!3Xc@@s ddlmZddlZddlZddlZddlZddlZddlZddlZ ddl Z ddl Z ddl Z ddlZddljjZddlmZmZmZmZddlmZdefdYZdZdZd ZdS( i(tabsolute_importN(t ClientErrort ServerErrortServiceInitErrort TimeoutError(tRegionConfigurableMixint BaseServicecB@seZdZdZdZdZdZdZdZ gZ ddddZ e dZ dZedZdZdddddddd Zdddddddd Zd Zd Zd ZdZdZRS(tiicK@s||_||_d|_tj|jj|_|dk rN||j_ n||_ d|_ i|_ ||_ d|_dS(N(targstconfigtNonetendpointtloggingt getLoggert __class__t__name__tlogtlevelt max_retriest region_namet session_argsttimeoutt_session(tselfR tloglevelRRtkwargs((s:/usr/lib/python2.7/site-packages/requestbuilder/service.pyt__init__0s        cK@s|jd|jj|jd|j|jdt|j|jd|jd|jkr~|jd|jdn||j|}|j |S(NRRRRtregion( t setdefaultRRRtdictRRRR t configure(tclstotherRtnew((s:/usr/lib/python2.7/site-packages/requestbuilder/service.pyt from_other>s cC@s)|j|j|jdkrb|jjd}|dk rSt||_qb|j|_n|jdkr|jjd}|dk rt ||_q|j |_n|j j dt |jjd}|dkr|jjd}n|j j d|jj|dt|jdS(Ns max-retriesRtstreams verify-tlss verify-ssltverifytdefault(tupdate_config_viewt _BaseService__configure_endpointRR R tget_global_optiontintt MAX_RETRIESRtfloattTIMEOUTRRtTruetget_region_optiontconvert_to_booltFalsetvalidate_config(Rtconfig_max_retriestconfig_timeoutt verify_ssl((s:/usr/lib/python2.7/site-packages/requestbuilder/service.pyRJs&      cC@s|jdkr}tj|_x3tj|jD]\}}t|j||q1Wx&|jjj D]}d|_ qgWn|jS(Ni( RR trequeststsessiontsixt iteritemsRtsetattrtadapterstvaluesR(Rtkeytvaltadapter((s:/usr/lib/python2.7/site-packages/requestbuilder/service.pyR6lscC@s|jdkr|jdk rdj|j}|jj|}t|dkr{dj|jdjt|}qdj|j|}nd}t |ndS(Ns{0}-urlisWNo {0} endpoint to connect to was given. Configured regions with {0} endpoints are: {1}s, sdNo {0} endpoint to connect to was given. {0} endpoints may be specified in a config file with "{1}".s#No endpoint to connect to was given( R R tNAMEtformatR tget_all_region_optionstlentjointsortedR(Rturl_opttavailable_regionstmsg((s:/usr/lib/python2.7/site-packages/requestbuilder/service.pyR1wstGETc C@s|j|}t|pi}dg|D]} | j^q+krbtj|jj|dsrequest header: %s: %stkeep_blank_valuessrequest param: %s: %ss content-typeRsmultipart/form-datas!application/x-www-form-urlencodedsrequest data: %s: %st__len__s <{0} bytes>srequest file: %s: %s(*t functoolstpartialt_log_response_dataRtbind_to_serviceR R5tRequestR6tprepare_requestthooksRfRQRPRaRTRt collectionstMappingRDR7R8RLRRSRMt parse_qsltqueryR-RUtcgit parse_headertgettparse_multiparttiotBytesIOtbodyRlRVRcR@RB(RRQRPRSRURVRTRWRt bound_authtrequestRYR<R=t content_typetcontent_type_params((s:/usr/lib/python2.7/site-packages/requestbuilder/service.pyt__log_and_prepare_requestsZ %   !     %cC@s|jjdr.t|jd\}}ntj|jrattj|j\}}nt|jr|jj|jd\}}|r|jj d|}|dkr|j ddd}qqd}n||_ ||_ dS(NRPs-urltnamet:ii(RRt_parse_endpoint_urltostgetenvt URL_ENVVARR?R tget_region_option2R.R trsplitR R(RRPRtsection((s:/usr/lib/python2.7/site-packages/requestbuilder/service.pyt__configure_endpointGs!    N(Rt __module__R R?t DESCRIPTIONt API_VERSIONR*R,t REGION_ENVVARRtARGSRt classmethodR"RtpropertyR6R1RZRRyRwRKROR'(((s:/usr/lib/python2.7/site-packages/requestbuilder/service.pyR$s, "   ^   6cK@st|jdrKtjj|jj}|jd|j|jdn|jdkrp|j d|jn|j d|jt |j t tjfrx9t|j jD]\}}|jd||qWndS(NRos response time: %i.%03i secondsiisresponse status: %isresponse header: %s: %s(RcRRmRnRoRftsecondst microsecondsRsterrorRiRaRTRRRRDRl(tloggerRt_tdurationR<R=((s:/usr/lib/python2.7/site-packages/requestbuilder/service.pyR]s"cc@s_|dkr[dVxGtd|D]3}tjdd|d}t|dfVq!WndS(Niiii(trangetrandomtmin(R|tretry_not next_delay((s:/usr/lib/python2.7/site-packages/requestbuilder/service.pyReks  cC@s=d|kr'|jdd\}}n d}|}||fS(s If given a URL, return the URL and None. If given a URL with a string and "::" prepended to it, return the URL and the prepended string. This is meant to give one a means to supply a region name via arguments and variables that normally only accept URLs. s::iN(tsplitR (turlishRRP((s:/usr/lib/python2.7/site-packages/requestbuilder/service.pyRss  (t __future__RRRRmRRR tos.pathRRRgtrequests.exceptionsR5R7tsix.moves.urllib_parsetmovest urllib_parseRMtrequestbuilder.exceptionsRRRRtrequestbuilder.mixinsRRRReR(((s:/usr/lib/python2.7/site-packages/requestbuilder/service.pyts&           ":