t_c@s ddlZddlZddlmZmZddlmZddlmZddl m Z ddl m Z ddl m Z ddlmZmZmZmZmZdd lmZdd lmZdd lmZdd lmZmZmZmZmZm Z m!Z!m"Z"ddlmZdd lm#Z#ddl$m%Z%ddl&m'Z'ddl(m)Z)m*Z*m+Z+ddl,m-Z-ddl,m.Z.ej/e0Z1e'Z2de3fdYZ4de3fdYZ5de3fdYZ6de3fdYZ7dZ8dS(iN(twaitert xform_name(tClientArgsCreator(tAUTH_TYPE_MAPS(tprepare_request_dict(tClientMethodDocstring(tPaginatorDocstring(t ClientErrortDataNotFoundErrortOperationNotPageableErrortUnknownSignatureVersionErrort*InvalidEndpointDiscoveryConfigurationError(tfirst_non_none_response(t ServiceModel(t Paginator(tCachedPropertytget_service_module_nametS3RegionRedirectortS3ArnParamHandlertS3EndpointSettertensure_booleantS3ControlArnParamHandlertS3ControlEndpointSetter(tUNSIGNED(tConfig(tget_global_history_recorder(tEndpointDiscoveryHandlertEndpointDiscoveryManagert,block_endpoint_discovery_required_operations(tstandard(tadaptivet ClientCreatorcBseZdZddddZedddddddZddZdZddZ dZ dZ dZ d Z d Zd Zd Zd ZdZdZdZdZdZdZdZdZdZRS(s%Creates client objects for a service.c CsU||_||_||_||_||_||_||_||_| |_dS(N( t_loadert_endpoint_resolvert _user_agentt_event_emittert_retry_handler_factoryt_retry_config_translatort_response_parser_factoryt_exceptions_factoryt _config_store( tselftloadertendpoint_resolvert user_agentt event_emittertretry_handler_factorytretry_config_translatortresponse_parser_factorytexceptions_factoryt config_store((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyt__init__6s        c  Cs|jjdd|} t| d|}|j||} |j|| } t|j|| d| jjd} |j | ||||||| | }| |}|j ||j || || ||j || || ||j ||| |S(Nschoose-service-namet service_nametdefaulttservice_signing_namet signingName(R#temitR t_load_service_modelt_create_client_classtClientEndpointBridgeR!tmetadatatgett_get_client_argst_register_retriest_register_s3_eventst_register_s3_control_eventst_register_endpoint_discovery(R)R4t region_namet is_securet endpoint_urltverifyt credentialst scoped_configt api_versiont client_configt responsest service_modeltclstendpoint_bridget client_argstservice_client((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyt create_clientHs,       cCs"|j||}|j||S(N(R9R:(R)R4RIRL((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pytcreate_client_classesc Cs|j|}|j|}||d||d?s   cCsCi}x6|jD]+}t|}|j|||||RVRWR(((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyR4s8              $   R;cBseZdZdZddgZdddddZddedZdZ dZ dZ d Z d Z d Zd Zd ZdZdZRS(sBridges endpoint data and client creation This class handles taking out the relevant arguments from the endpoint resolver and determining which values to use, taking into account any client configuration options and scope configuration options. This class also handles determining what, if any, region to use if no explicit region setting is provided. For example, Amazon S3 client will utilize "us-east-1" by default if no region can be resolved.s {service}.{region}.amazonaws.comRs s3-controlcCs:||_||_||_||_|p0|j|_dS(N(R6R+RHRJtDEFAULT_ENDPOINTtdefault_endpoint(R)R+RHRJRR6((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyR3s     cCs|j||}|jj||}|sK|jj||dd}n|rj|j|||||S|j||||SdS(Ntpartition_nametaws(t_check_default_regionR+Rt_create_endpointt_assume_endpoint(R)R4RCRERDtresolved((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pytresolves    cCs9|dk r|S|jr5|jjdk r5|jjSdS(N(RoRJRC(R)R4RC((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyRs c Cs|dk }|j|||\}}|dkr|j|rd|j|||d||}q|jd|jd}|j|||jdg}n|j||} |j||} |jd|d|d|d| d |d |d | S( Nt dnsSuffixt sslCommonNamethostnamet protocolsR4RCtsigning_regiont signing_nameRER<R( Rot_pick_region_valuest_is_s3_dualstack_modet_create_dualstack_endpointR=t _make_urlt_resolve_signature_versiont_resolve_signing_namet_create_result( R)RR4RCRERDtexplicit_regionRRRR((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyRs&        cCs||jkrtS|j}|dk rQ|jdk rQd|jkrQ|jdS|jdkrdtS|jjdijdt}|tddgkrtStS(Ntuse_dualstack_endpointRRR(t_DUALSTACK_ENABLED_SERVICESRRJRoRRHR=R(R)R4RJR((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyRs   cCsS| r|dkrd}ndjd|d|d|}|j||ddgS( Ns aws-globals us-east-1s){service}.dualstack.{region}.{dns_suffix}tserviceRt dns_suffixthttpthttps(tformatR(R)R4RCRRDRR((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyRs     cCs|dkrE|jjd|d|}|j||ddg}ntjd||||j|idgd6}|j|di}|jd |d |d |d |d |d|diS(NRRRRs#Assuming an endpoint for %s, %s: %stv4RRR4RCRRRRER<( RoRRRRzR{RRR(R)R4RCRERDRRR((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyRs         cCs5i|d6|d6|d6|d6|d6|d6|d6S(NR4RCRRRERR<((R)R4RCRRRERR<((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyRscCs/|rd|krd}nd}d||fS(NRRs%s://%s((R)RRDtsupported_protocolstscheme((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyRs cCs<d|kr(d|dkr(|ddS|jr8|jS|S(NtcredentialScopeR(R6(R)R4R((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyR s    cCs\|}|dkrR|d}|}d|krRd|dkrR|dd}qRn||fS(Nt endpointNameRR(Ro(R)RRCRER((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyRs  cCst||j|j}|dk r(|Sd|kr|d}|dkrNdSd|kr^dSx!|D]}|tkre|SqeWntd|jddS(NRRts3v4RR(RRJRHRoRR R=(R)R4Rtconfigured_versiontpotential_versionstknown((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyR+s        N(RRRRRRoR3RRRRRRRRRRRR(((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyR;ws$           RXcBseZiZdZdZdZedZdZdZ ddZ dZ dZ d Zd Zd Zed Zed ZdZRS(c Cs||_||_||_||_i|_||_||_t||j|j||j | |_ | |_ d|_ |jdS(N(t _serializert _endpointt_response_parsert_request_signert_cacheR t_client_configt ClientMetathostRSReR'Rot _exceptionst_register_handlers( R)t serializerRtresponse_parserR-trequest_signerRLR*RJRR1((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyR3Ks           cCsmd|jjj|f}|jjj|d|\}}|dk rM|Std|jj |fdS(Ns getattr.%s.%sRks!'%s' object has no attribute '%s'( t_service_modelRYRZReR}temit_until_responseRotAttributeErrort __class__R(R)titemt event_nameRtevent_response((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyt __getattr__\s  cCs9|jjjj}|jjjd||jjdS(Nsrequest-created.%s(ReRLRYRZR}R~RR(R)RY((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyRks cCs |jjS(N(ReRL(R)((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyRssc Cs|jj|}|jj}tjdi|d6|d6|d6|jrbtjd||ni|jj d6|jj d6|j d6|j d 6}|j ||d |}|jjj}|jjjd jd |d |d|d|d|jd |\}} | dk r#| \} } n|j|||\} } |jjjdjd |d |d| d| d|d || jdkr| jdijd} |jj| } | | |n| SdS(NtAPI_CALLRt operationtparamssWarning: %s.%s() is deprecatedt client_regionRJthas_streaming_inputt auth_typetcontexts)before-call.{service_id}.{operation_name}RYRtmodelRs(after-call.{service_id}.{operation_name}t http_responsetparsedi,tErrortCode(RRR4thistory_recordertrecordt deprecatedRzR{ReRCRfRRt_convert_to_request_dictRYRZR}RRRRot _make_requestR8t status_codeR=t exceptionst from_code(R)Rt api_paramsRR4trequest_contextt request_dictRYRRRtparsed_responset error_codet error_class((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyRwsL                    cCsty|jj||SWnVtk ro}|jjjdjd|jjj d|j d|d|nXdS(Ns.after-call-error.{service_id}.{operation_name}RYRt exceptionR( Rt make_requestt ExceptionReR}R8RRRYRZtname(R)RRRte((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyRs    cCsu|j|||}|jj||}|jjsI|jddnt|d|jj d|jj d||S(Nt host_prefixRER,R( t_emit_api_paramsRtserialize_to_requestRtinject_host_prefixRRoRRRR,(R)RRRR((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyRs    cCs|j}|jjj}|jjjdjd|d|d|d|d|}t|d|}d}|jjj|jd|d|d|d|d||S( Ns3provide-client-params.{service_id}.{operation_name}RYRRRRR5s4before-parameter-build.{service_id}.{operation_name}( RRRYRZReR}R8RR (R)RRRRRYRKR((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyR!s       c Cs|j|s!td|n|j|}d}|jd|}td|d|jjd|jjd|dt|_ t d t |jj|f}t |t fi|d 6}|jj|}|t||||}|Sd S( sCreate a paginator for an operation. :type operation_name: string :param operation_name: The operation name. This is the same name as the method name on the client. For example, if the method name is ``create_foo``, and you'd normally invoke the operation as ``client.create_foo(**kwargs)``, if the ``create_foo`` operation can be paginated, you can use the call ``client.get_paginator("create_foo")``. :raise OperationNotPageableError: Raised if the operation is not pageable. You can use the ``client.can_paginate`` method to check if an operation is pageable. :rtype: L{botocore.paginate.Paginator} :return: A paginator object. Rc[stj||S(N(Rtpaginate(R)Rq((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyR$st page_configtpaginator_nameR-RLtpaginator_configRs%s.Paginator.%sR$N(t can_paginateR RSRRReR}RLRRR\RR[RRRtgetattr( R)Rtactual_operation_nameR$R'tpaginator_class_nametdocumented_paginator_clsRt paginator((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyt get_paginators.         cCsd|jkrly9|jj|jjd|jjd}||jdscCs|jS(N(R=(R)((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyRs( RRRR3R:RLRCRERfR>R(((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyRgs  cCs|r|jdk r|jS|dk r|j|}|dk rt|tr|jd}|rtjd|||SqndS(s Gets the manually configured signature version. :returns: the customer configured signature version, or None if no signature version was configured. RsWSwitching signature version for service %s to version %s based on config file override.N(RRoR=RtdictRzR{(R4RJRHtservice_configtversion((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyRs    (9tloggingt functoolstbotocoreRRt botocore.argsRt botocore.authRtbotocore.awsrequestRtbotocore.docs.docstringRRtbotocore.exceptionsRRR R R tbotocore.hooksR tbotocore.modelR tbotocore.paginateRtbotocore.utilsRRRRRRRRRtbotocore.configRtbotocore.historyRtbotocore.discoveryRRRtbotocore.retriesRRt getLoggerRRzR tobjectRR;RXRR(((s:/opt/awscli/lib/python2.7/site-packages/botocore/client.pyt s8  (: D'/