a 97a5@sddlZddlZddlZddlZddlmZddlmZddlm Z ddl m Z ddl m Z mZddlmZddlmZdd lmZdd lmZeeZeZd Zd Zd dZGdddeZGdddeZ dS)N)six)create_request_object)HTTPClientError)URLLib3Session)is_valid_endpoint_urlget_environ_proxies)first_non_none_response)get_global_history_recorder) StreamingBody)parsers< cCst|j|jd|jid}|ddkr.|j|d<nB|jr@|j|d<n0|jrf|dd}t|j||d<n |j|d<|S)aConvert an HTTP response object to a request dict. This converts the requests library's HTTP response object to a dictionary. :type http_response: botocore.vendored.requests.model.Response :param http_response: The HTTP response from an AWS service request. :rtype: dict :return: A response dictionary which will contain the following keys: * headers (dict) * status_code (int) * body (string or file-like object) operation_name)headers status_codecontextr,bodyrzcontent-length) rrnamecontenthas_event_stream_outputrawhas_streaming_outputgetr ) http_responseoperation_model response_dictlengthrl/private/var/folders/s6/9n5zrl012gv99k63s4q6ccsd4s6mqz/T/pip-target-f5cq3f2q/lib/python/botocore/endpoint.pyconvert_to_response_dict&s    r c@sveZdZdZdddZddZddZdd d Zd d Zd dZ ddZ ddZ ddZ ddZ dddZddZdS)Endpointa, Represents an endpoint for a particular service in a specific region. Only an endpoint can make requests. :ivar service: The Service object that describes this endpoints service. :ivar host: The fully qualified endpoint hostname. :ivar session: The session object. NcCsN||_||_||_t|_|dur,t}||_||_ |j durJt |_ dSN) _endpoint_prefix_event_emitterhost threadingLock_lockr ZResponseParserFactory_response_parser_factory http_sessionr)selfr%endpoint_prefix event_emitterresponse_parser_factoryr*rrr__init__Ss  zEndpoint.__init__cCsd|j|jfS)Nz%s(%s))r#r%)r+rrr__repr__`szEndpoint.__repr__cCstd|||||S)Nz%Making request for %s with params: %s)loggerdebug _send_request)r+r request_dictrrr make_requestcszEndpoint.make_requestcCs\t|}|rNt|j|jg|_|jj}dj||j d}|j j |||j d| |}|S)Nz&request-created.{service_id}.{op_name}) service_idZop_name)requestr) ranyrrZ stream_output service_modelr6 hyphenizeformatrr$emitprepare_request)r+paramsrr7r6 event_nameprepared_requestrrrcreate_requesths    zEndpoint.create_requestcCs0|D]"\}}t|tjr|d||<qdS)Nzutf-8)items isinstancer text_typeencode)r+rkeyvaluerrr_encode_headersxs zEndpoint._encode_headerscCs||j|Sr")rHrpreparer+r7rrrr=~s zEndpoint.prepare_requestc Csd}|||}|d}||||\}}||||||rl|d7}||||}||||\}}q*|durd|dvr|d}||ddd<|dur|n|SdS)NrZResponseMetadataZ RetryAttempts)rA _get_response _needs_retryZ reset_stream) r+r4rattemptsr7rsuccess_response exceptionZ total_retriesrrrr3s4    zEndpoint._send_requestc Csv|||\}}dd||d}|durD|\}}||d<t|||d<|jj} |jjd| |jffi|||fS)N)rparsed_responserrPrQrzresponse-received.%s.%s)_do_get_responser r9r6r:r$r<r) r+r7rrrOrPZkwargs_to_emitrrQr6rrrrLs. zEndpoint._get_responsec Cs\zvtd|td|j|j|j|j|jd|j j }d||j f}|j j||d}t|}|durt||}Wndty}zd|fWYd}~Sd}~0ty}z"tjdddd|fWYd}~Sd}~00t||}|} |j| d <td | |jd } |j| } | ||j} |jd krD||| || td | || fdfS)NzSending http request: %sZ HTTP_REQUEST)methodr streamingurlrzbefore-send.%s.%s)r7z-Exception received when sending HTTP request.T)exc_inforTZ HTTP_RESPONSEprotocolrZPARSED_RESPONSE)r1r2history_recorderrecordrSrZhas_streaming_inputrUrr9r6r:rr$r<r_sendr Exceptionr copyrmetadatar) create_parserparseZ output_shaper_add_modeled_error_fields) r+r7rr6r? responsesrerZhttp_response_record_dictrWparserrQrrrrRsN        zEndpoint._do_get_responsec CsT|did}|durdS|j}||}|dur:dS|||}||dS)NErrorZCode)rr9Zshape_for_error_coder_update) r+rrQrrcZ error_coder9Z error_shapeZ modeled_parserrrr`s  z"Endpoint._add_modeled_error_fieldsc Csf|jj}d||jf}|jj|||||||d}t|} | durHdStd| t | dSdS)Nzneeds-retry.%s.%s)responseZendpointZ operationrNcaught_exceptionr4Fz3Response received to retry, sleeping for %s secondsT) r9r6r:rr$r<rr1r2timesleep) r+rNrr4rfrgr6r?raZhandler_responserrrrMs$  zEndpoint._needs_retrycCs |j|Sr")r*sendrJrrrrZ szEndpoint._send)NN)N)NN)__name__ __module__ __qualname____doc__r/r0r5rArHr=r3rLrRr`rMrZrrrrr!Is  / r!c @s@eZdZddZddeeeddddf ddZddZdd Z dS) EndpointCreatorcCs ||_dSr")r$)r+r-rrrr/szEndpointCreator.__init__Nc  Csjt|std|| dur&||} |j} td| |||| |||| | | d}t|| |j||dS)NzInvalid endpoint: %szSetting %s timeout as %s)timeoutproxiesverifymax_pool_connectionssocket_options client_certproxies_config)r,r-r.r*) r ValueError _get_proxiesr,r1r2_get_verify_valuer!r$)r+r9Z region_nameZ endpoint_urlrrr.rprsZhttp_session_clsrqrtrurvr,r*rrrcreate_endpoints,    zEndpointCreator.create_endpointcCst|Sr")r)r+rUrrrrx7szEndpointCreator._get_proxiescCs|dur |StjddS)NREQUESTS_CA_BUNDLET)osenvironr)r+rrrrrry<sz!EndpointCreator._get_verify_value) rkrlrmr/DEFAULT_TIMEOUTMAX_POOL_CONNECTIONSrrzrxryrrrrros #ro)!r|loggingrhr&Zbotocore.vendoredrZbotocore.awsrequestrZbotocore.exceptionsrZbotocore.httpsessionrZbotocore.utilsrrZbotocore.hooksrZbotocore.historyr Zbotocore.responser Zbotocorer getLoggerrkr1rXr~rr objectr!rorrrrs(         #H