o .&aN&@sddlmZddlmZddlmZddlmZmZm Z ddZ ddZ d d Z Gd d d eZ Gd ddeZGdddeZGdddeZGdddeZGddde ZdS)) xform_name)DataNotFoundError)ServiceOperation) BasicCommand BasicHelpBasicDocHandlercCs|dtdS)Nzbuilding-command-table)register add_waiters)clir ?/usr/lib/python3/dist-packages/awscli/customizations/waiters.pyregister_add_waiterssr cKsPt|dd}|dur$t||}|durdS|j}|r&t||||d<dSdSdS)N service_modelwait)getattr#get_waiter_model_from_service_model waiter_names WaitCommand) command_tablesessioncommand_objectkwargsr waiter_modelrr r r r s  r cCs,z ||j|j}W|StyYdSwN)get_waiter_model service_name api_versionr)rrmodelr r r r+s rcs@eZdZdZdZfddZddZfddZd d ZZ S) rrzqWait until a particular condition is satisfied. Each subcommand polls an API until the listed requirement is met.cs4||_||_t||j|jd|_tt||dS)N)rrr)_model_service_modelWaiterStateCommandBuilderwaiter_cmd_buildersuperr__init__)selfrrr __class__r r r#:szWaitCommand.__init__cCs|jdur tddS)NzVusage: aws [options] [parameters] aws: error: too few arguments) subcommand ValueError)r$ parsed_argsparsed_globalsr r r _run_mainDs zWaitCommand._run_maincs(tt|}|j||||Sr)r"r_build_subcommand_tabler!build_all_waiter_state_cmds _add_lineage)r$subcommand_tabler%r r r,Is  z#WaitCommand._build_subcommand_tablecCst|j||j|jtdS)N)r arg_tableevent_handler_class)r_sessionr/r0WaiterCommandDocHandler)r$r r r create_help_commandOs zWaitCommand.create_help_command) __name__ __module__ __qualname__NAME DESCRIPTIONr#r+r,r4 __classcell__r r r%r r4s  rc@s$eZdZddZddZddZdS)r cCs||_||_||_dSr)r2rr)r$rrrr r r r#Ws z"WaiterStateCommandBuilder.__init__cCs.|jj}|D]}t|d}||||<qdS)zThis adds waiter state commands to the subcommand table passed in. This is the method that adds waiter state commands like ``instance-running`` to ``ec2 wait``. -N)rrr_build_waiter_state_cmd)r$r/r waiter_namewaiter_cli_namer r r r-\s  z5WaiterStateCommandBuilder.build_all_waiter_state_cmdsc Cs^|j|}t|d}|j}|j|}t|dt|j||j|d}t |}| }||_ |S)Nr;r)name parent_nameoperation_callerroperation_model) r get_waiterr operationrrBWaiterStateCommand WaiterCallerr2WaiterStateDocBuilderbuild_waiter_state_descriptionr9) r$r= waiter_configr>operation_namerBwaiter_state_commandwaiter_state_doc_builder descriptionr r r r<hs     z1WaiterStateCommandBuilder._build_waiter_state_cmdN)r5r6r7r#r-r<r r r r r Vs r c@sDeZdZddddddZddZd d Zd d Zd dZddZdS)rGz %s is thrown z%s z%s for all elements z%s for any element z%s response is received )errorpathpathAllpathAnystatuscCs ||_dSr)_waiter_config)r$rIr r r r#s zWaiterStateDocBuilder.__init__cCsh|jj}|s&d}|jjD]}|jdkr|||7}nq |||jj7}|||jj|jj 7}|S)Nz Wait until success) rSrM acceptorsstate_build_success_description_build_operation_descriptionrD_build_polling_descriptiondelay max_attempts)r$rMacceptorr r r rHs   z4WaiterStateDocBuilder.build_waiter_state_descriptioncCs<|j}|j|}d}|dvrd|j}||}||j}|S)N)rOrQrPzJMESPath query %s returns )matcherSUCCESS_DESCRIPTIONSargumentexpected)r$r\r]success_descriptionresource_descriptionfull_success_descriptionr r r rWs  z0WaiterStateDocBuilder._build_success_descriptioncCst|dd}d|S)N_r;zwhen polling with ``%s``.)rreplace)r$rDrJr r r rXsz2WaiterStateDocBuilder._build_operation_descriptioncCsd||f}|S)Nz It will poll every %s seconds until a successful state has been reached. This will exit with a return code of 255 after %s failed checks.r )r$rZr[rMr r r rYs z0WaiterStateDocBuilder._build_polling_descriptionN) r5r6r7r^r#rHrWrXrYr r r r rGs rGc@seZdZddZddZdS)rFcCs||_||_dSr)r2 _waiter_name)r$rr=r r r r#s zWaiterCaller.__init__cCs>|jj||j|j|jd}|t|j}|jdi|dS)N) region_name endpoint_urlverifyrr ) r2 create_clientregionrh verify_sslrCrrfr)r$rrJ parametersr*clientwaiterr r r invokeszWaiterCaller.invokeN)r5r6r7r#rpr r r r rFs rFcs eZdZdZfddZZS)rEcs$tt|}|j|j_d|j_|Sr)r"rEr4r9_operation_model documentation output_shape)r$ help_commandr%r r r4s z&WaiterStateCommand.create_help_command)r5r6r7r9r4r:r r r%r rEsrEc@s<eZdZddZddZddZddZd d Zd d Zd S)r3cKdSrr r$rurr r r doc_synopsis_startz*WaiterCommandDocHandler.doc_synopsis_startcKrvrr r$arg_namerurr r r doc_synopsis_optionryz+WaiterCommandDocHandler.doc_synopsis_optioncKrvrr rwr r r doc_synopsis_endryz(WaiterCommandDocHandler.doc_synopsis_endcKrvrr rwr r r doc_options_startryz)WaiterCommandDocHandler.doc_options_startcKrvrr rwr r r doc_options_endryz'WaiterCommandDocHandler.doc_options_endcKrvrr rzr r r doc_optionryz"WaiterCommandDocHandler.doc_optionN) r5r6r7rxr|r}r~rrr r r r r3s r3N)botocorerbotocore.exceptionsrawscli.clidriverrawscli.customizations.commandsrrrr r rrobjectr rGrFrEr3r r r r s   "1>