B =@Sa6@sddlZddlZddlZddlmZddlmZddlmZm Z m Z ddl m Z e eZddZd d ZGd d d eZGd ddeZGdddeZGdddeZGdddeZdS)N)get_service_module_name)WaiterDocstring) WaiterError ClientErrorWaiterConfigError) xform_namec Cs|||}t|j}tt||}dd}t||jj|jj|dd|_ t dt |jj|f}t |t fd|i}||||S)a :type waiter_name: str :param waiter_name: The name of the waiter. The name should match the name (including the casing) of the key name in the waiter model file (typically this is CamelCasing). :type waiter_model: botocore.waiter.WaiterModel :param waiter_model: The model for the waiter configuration. :type client: botocore.client.BaseClient :param client: The botocore client associated with the service. :rtype: botocore.waiter.Waiter :return: The waiter object. c[stj|f|dS)N)Waiterwait)selfkwargsr g/private/var/folders/fg/1jzmct0d7d72tjkvm_1nhqc5sw67yj/T/pip-unpacked-wheel-ef76ia09/botocore/waiter.pyr 4sz'create_waiter_with_client..waitF) waiter_nameZ event_emitter service_modelZservice_waiter_modelZinclude_signaturez %s.Waiter.%sr ) get_waiterr operationNormalizedOperationMethodgetattrrmetaeventsr__doc__strrtyper ) rZ waiter_modelclientsingle_waiter_configZoperation_nameoperation_methodr Zwaiter_class_nameZdocumented_waiter_clsr r rcreate_waiter_with_clients$      rcCs$|d}t|tr d|kr dSdS)NErrorCodeTF)get isinstancedict)responseerrorr r ris_valid_waiter_errorNs r%c@seZdZddZddZdS)rcCs ||_dS)N)_client_method)r Z client_methodr r r__init__Vsz"NormalizedOperationMethod.__init__c Ks6y |jf|Stk r0}z|jSd}~XYnXdS)N)r&rr#)r r er r r__call__Ys z"NormalizedOperationMethod.__call__N)__name__ __module__ __qualname__r'r)r r r rrUsrc@s(eZdZdZddZddZddZdS) WaiterModelcCs@|d|_|dd}||||_tt|d|_dS)a Note that the WaiterModel takes ownership of the waiter_config. It may or may not mutate the waiter_config. If this is a concern, it is best to make a copy of the waiter config before passing it to the WaiterModel. :type waiter_config: dict :param waiter_config: The loaded waiter config from the *.waiters.json file. This can be obtained from a botocore Loader object as well. waitersversionunknownN)_waiter_configr _verify_supported_versionr0listsortedkeysZ waiter_names)r Z waiter_configr0r r rr'cs    zWaiterModel.__init__cCs"||jkrtd|j|fddS)Nz^Unsupported waiter version, supported version must be: %s, but version of waiter config is: %s) error_msg)SUPPORTED_VERSIONr)r r0r r rr3{s  z%WaiterModel._verify_supported_versioncCs8y|j|}Wn tk r.td|YnXt|S)NzWaiter does not exist: %s)r2KeyError ValueErrorSingleWaiterConfig)r rrr r rrs zWaiterModel.get_waiterN)r*r+r,r8r'r3rr r r rr-`sr-c@s$eZdZdZddZeddZdS)r;zRepresents the waiter configuration for a single waiter. A single waiter is considered the configuration for a single value associated with a named waiter (i.e TableExists). cCs6||_|dd|_|d|_|d|_|d|_dS)N descriptionrdelayZ maxAttempts)_configr r<rr> max_attempts)r rr r rr's   zSingleWaiterConfig.__init__cCs.g}x$|jdD]}t|}||qW|S)N acceptors)r?AcceptorConfigappend)r rAZacceptor_configacceptorr r rrAs zSingleWaiterConfig.acceptorsN)r*r+r,rr'propertyrAr r r rr;s r;c@sPeZdZddZeddZddZddZd d Zd d Z d dZ ddZ dS)rBcCs8|d|_|d|_|d|_|d|_||_dS)Nstatematcherexpectedargument)rFrGrHr rI_create_matcher_func matcher_func)r configr r rr's     zAcceptorConfig.__init__cCs|jdkrd|j|jfS|jdkr4d|j|jfS|jdkrNd|j|jfS|jdkrbd|jS|jd krvd |jSd |jSdS) Npathz2For expression "%s" we matched expected path: "%s"pathAllz;For expression "%s" all members matched excepted path: "%s"pathAnyz@For expression "%s" we matched expected path: "%s" at least oncestatusz%Matched expected HTTP status code: %sr$z'Matched expected service error code: %sz,No explanation for unknown waiter type: "%s")rGrIrH)r r r r explanations       zAcceptorConfig.explanationcCsn|jdkr|S|jdkr$|S|jdkr6|S|jdkrH|S|jdkrZ|Std|jddS)NrMrNrOrPr$zUnknown acceptor: %s)r7)rG_create_path_matcher_create_path_all_matcher_create_path_any_matcher_create_status_matcher_create_error_matcherr)r r r rrJs     z#AcceptorConfig._create_matcher_funccs$t|j|jfdd}|S)Ncst|r dS|kS)N)r%search)r#)rH expressionr racceptor_matchessz=AcceptorConfig._create_path_matcher..acceptor_matches)jmespathcompilerIrH)r rYr )rHrXrrRs z#AcceptorConfig._create_path_matchercs$t|j|jfdd}|S)NcsFt|r dS|}t|tr$|s(dSx|D]}|kr.dSq.WdS)NFT)r%rWr!r4)r#resultelement)rHrXr rrYs  zAAcceptorConfig._create_path_all_matcher..acceptor_matches)rZr[rIrH)r rYr )rHrXrrSs z'AcceptorConfig._create_path_all_matchercs$t|j|jfdd}|S)NcsFt|r dS|}t|tr$|s(dSx|D]}|kr.dSq.WdS)NFT)r%rWr!r4)r#r\r])rHrXr rrYs  zAAcceptorConfig._create_path_any_matcher..acceptor_matches)rZr[rIrH)r rYr )rHrXrrTs z'AcceptorConfig._create_path_any_matchercs|jfdd}|S)Ncs|did}|kS)NZResponseMetadataZHTTPStatusCode)r )r# status_code)rHr rrYs z?AcceptorConfig._create_status_matcher..acceptor_matches)rH)r rYr )rHrrUs z%AcceptorConfig._create_status_matchercs|jfdd}|S)Ncs|diddkS)Nrrr=)r )r#)rHr rrYsz>AcceptorConfig._create_error_matcher..acceptor_matches)rH)r rYr )rHrrVs z$AcceptorConfig._create_error_matcherN) r*r+r,r'rErQrJrRrSrTrUrVr r r rrBs   rBc@seZdZddZddZdS)r cCs||_||_||_dS)a :type name: string :param name: The name of the waiter :type config: botocore.waiter.SingleWaiterConfig :param config: The configuration for the waiter. :type operation_method: callable :param operation_method: A callable that accepts **kwargs and returns a response. For example, this can be a method from a botocore client. N)_operation_methodnamerL)r r`rLrr r rr' szWaiter.__init__c Ks4t|jj}d}|di}|d|jj}|d|jj}d}d}x|jf|} |d7}xZ|D]} | | r`| }| j }Pq`Wt | rt |j d| dd d | dd d f| d |d krt ddS|dkrd| j} t |j | | d ||kr"|dkrd} n d| j} t |j | | d t|qFWdS)NZwaitingZ WaiterConfigZDelayZ MaxAttemptsrrzAn error occurred (%s): %srrUnknownMessage)r`reasonZ last_responsesuccessz3Waiting complete, waiter matched the success state.Zfailurez/Waiter encountered a terminal failure state: %szMax attempts exceededz4Max attempts exceeded. Previously accepted state: %s)r4rLrApopr r>r@r_rKrFr%rr`loggerdebugrQtimesleep) r r rAZ current_staterLZ sleep_amountr@Zlast_matched_acceptorZ num_attemptsr#rDrcr r rr 5sT        z Waiter.waitN)r*r+r,r'r r r r rr sr )rZloggingrhZbotocore.utilsrZbotocore.docs.docstringr exceptionsrrrr=r getLoggerr*rfrr%objectrr-r;rBr r r r r s    4 +z