a MfW@szddlmZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl mZm Z mZddlmZddlmZmZmZddlmZddlmZddlZdd lmZdd lmZm Z m!Z!m"Z"dd l#m$Z$dd l%m&Z&m'Z'dd l(m)Z)ddl*m+Z+ddl,m-Z-m.Z.ddlm/Z/m0Z0ddl1m2Z2ddl3m4Z4m5Z5m6Z6e5dZ7dZ8ej9:e8Z;ddZ?e >dZ@dZAdZBej9:ddZCeDeCejEreCFdkrdZBddZGd@d d!ZHd"d#ZId$d%ZJd&d'ZKd(ZLd)ZMd*ZNd+ZOdd,d-d.d/d0ZPd1d2ZQd3d4ZRd5d6ZSGd7d8d8eZTGd9d:d:ejUjVZWGd;d<dd?d?e\Z]dS)A)absolute_importN)datedatetimetimezone) default_timer)requestssixurllib3)parse)tz) HTTPResponse) constants exceptionsregionsretry)signers)get_config_value_or_defaultvalidate_config)Request)Response)CircuitBreakerStrategyNoCircuitBreakerStrategy)CircuitBreakerCircuitBreakerMonitor) __version__) NONE_SENTINELSentinelextract_service_endpointMissingOCI_SDK_APPEND_USER_AGENTzOracle-PythonSDK/{}zdict\(str, (.+?)\)$zlist\[(.+?)\]$zOhttps://docs.oracle.com/en-us/iaas/Content/API/Concepts/sdk_troubleshooting.htmTOCI_PYSDK_USING_EXPECT_HEADERfalseFcGsi}|D]}||q|SN)update) dictionariesmerged dictionaryr(s/sparta/input/_build_configuration/image_build+validate/lib/bmcenv/lib64/python3.9/site-packages/oci/base_client.pymerge_type_mappings6s r*cCs@dtttt|pd}|}tr<|dt7}|S)Nz{} (python {}; {}-{}) {}r+z {})format USER_INFOplatformpython_versionmachinesystemstripAPPEND_USER_AGENT)extraagentr(r(r)build_user_agent=sr6cCsdttdS)N z: )strrutcnowr(r(r(r)utc_nowKsr:cCs"|rdtjjj_n dtjjj_dS)Nrr)r moves http_clientHTTPConnection debuglevel) is_enabledr(r(r)is_http_log_enabledOsr@cCs:t|D]*\}}t|tjs(t|tr t|||<q |Sr#)r iteritems isinstance integer_typesfloatr8)headers header_name header_valuer(r(r)_sanitize_headers_for_requestsVsrHstreambytesg$@gN@, r7|)multicsvtsvssvpipescCsd}|dkr|}qdS)N )readline)fpcurrentr(r(r)_read_all_headersvsrWcCsDg}|D],}t|tjr*||dq||qd|}|S)Nzutf-8rS)rBr text_typeappendencodejoin) input_buffer bytes_bufferchunkmsgr(r(r) _to_bytes|s   r`cCs2|dd}t|dko0|ddo0|ddkS)NrHTTP/rs100)splitlen startswith)linepartsr(r(r)_is_100_continues  ric@seZdZddZddZdS)OCIHTTPResponsecOs(|d|_tj|g|Ri|dS)N status_tuple)pop _status_tupler __init__selfargskwargsr(r(r)rns zOCIHTTPResponse.__init__cCs(|jdur|j}d|_|St|SdSr#)rmr _read_status)rprkr(r(r)rss  zOCIHTTPResponse._read_statusN)__name__ __module__ __qualname__rnrsr(r(r(r)rjsrjcsReZdZdZfddZfddZdddZd d Zd d Zfd dZ Z S) OCIConnectionz+ HTTPConnection with 100 Continue support. csFtt|j|i||j|_d|_d|_td t t ||_ dS)NF{}.{}) superrwrnresponse_class_original_response_cls_response_received_using_expect_headerlogging getLoggerr,rtidloggerro __class__r(r)rns zOCIConnection.__init__cs~d|_|dddkr0|jdkr(tdd|_n |jdkrBtdd|_|j|_tt|j ||||g|Ri|}d|_ |S) NFexpectr+z 100-continuerzUsing Expect header...TzNot using Expect header...) r|getr>printr}r{rzryrw _send_request_expect_header_set)rpmethodurlbodyrErqrrrvalrr(r)rs$   zOCIConnection._send_requestNcOs|jdt|j}|jdd=|js>t|tr>||7}d}|||jr~|jdkr`tdt j |j dr~| |dS|dur|jdkrtd||dS)N)rrz.Waiting 3 seconds for 100-continue response...rbzBTimeout waiting for 100-continue response, sending message body...)_bufferextendr`r}rBrJsendr>rr util wait_for_readsock_handle_expect_response)rp message_bodyrqrrr_r(r(r) _send_outputs$        zOCIConnection._send_outputcCs|jdd}z|}|dd}|jdkr6t|t|rd|jdkrPtdt|||nlt |dkr|d dr|jdkrtd|d dt |d |d df}t jt|d }||_d |_W|n |0dS) Nrbrraz7Received 100-continue response, sending message body...rbrcz4Received non-100-continue response, abort request...asciir)rkT)rmakefilerTrdr>rrirW_send_message_bodyrerfdecodeint functoolspartialrjrzr|close)rprrUrgrhrkrzr(r(r)rs.      z%OCIConnection._handle_expect_responsecCs|dur||dSr#)r)rprr(r(r)rsz OCIConnection._send_message_bodycs|jr dStt||Sr#)r|ryrwr)rpr8rr(r)rszOCIConnection.send)N) rtrurv__doc__rnrrrrr __classcell__r(r(rr)rws   rwc@seZdZeZdS)OCIConnectionPoolN)rtrurvrw ConnectionClsr(r(r(r)rsrhttpsc @sReZdZeeejeee e dZ dZ ddZ eddZejddZdd Zd d Zed d Zejdd ZddZdDddZddZddZdEddZddZdFddZed d!Zd"d#ZdGd$d%Zd&d'Zd(d)Z d*d+Z!d,d-Z"dHd.d/Z#dId0d1Z$dJd2d3Z%dKd4d5Z&d6d7Z'd8d9Z(d:d;Z)dd?Z+ed@dAZ,dBdCZ-dS)L BaseClient)rrDr8boolrrobjectFcKstt||d||_|dd|_d|_|d|_|d|_|d|_|d|_|jr|drt|d|_ qd}d |vr|d r|d }nt |d r|j }t j ||j||d |jd |_ n |dstd |d|_ ||_||_t|j||_t|_d |vr|d nttf|_tt|d|_td t!t"||_#|j#$t%t|drd|j#_&|j#'tj(t)dnd|j#_&t)d|d|_*|d|_+d|_,|j+dust-|j+t.r|j#/dnzt-|j+t0st1d|j+j2durt3t45n|j+j2|_,t6|j,}|durPt7|j+j8|j+j9|j+j:|j,d}||j;|_;|j#/d |jdS)N)signerregional_clientT base_pathservice_endpoint_templateendpoint_service_nameallow_control_charsservice_endpointregionendpoint)rrrrz>An endpoint must be provided for a non-regional service clienttimeoutadditional_user_agentrx log_requestsFskip_deserializationcircuit_breaker_strategyz$No circuit breaker strategy enabled!z!Invalid Circuit Breaker Strategy!)failure_thresholdrecovery_timeoutexpected_exceptionnamez Endpoint: {})rz'BaseClient.call_api..rNOCI_DB_OPC_HOST_SERIALzopc-host-serial{}z content-typezapplication/json)rr query_params header_paramsr response_typeenforce_content_headersrrariztime elapsed for request: {}))enable_expect_headerrrlrsanitize_for_serializationrHr-rHEADER_CLIENT_INFOrHEADER_USER_AGENTHEADER_REQUEST_IDmissingbuild_request_idosenvironitemsr r;urllibr quoter8 to_path_valuereplaceprocess_query_paramsjsondumpsrrrrr ServiceErrorstatusrrefresh_security_tokentimerrrr,)rp resource_pathr path_paramsrrrrrroperation_nameapi_reference_link/map_lowercase_header_params_keys_to_actual_keysopc_host_serialrv replacementrr call_attemptsestartresponseendr(r(r)call_apish             zBaseClient.call_apicCsJ|tur tS|tvr,td|tt|dkr8|St||SdS)Nz6Invalid collection format type {}. Valid types are: {}rN)rVALID_COLLECTION_FORMAT_TYPES ValueErrorr,listkeysr[)rp param_valuecollection_format_typer(r(r) generate_collection_format_paramsz+BaseClient.generate_collection_format_paramcCs||}i}|D]~\}}t|tr:|r0dnd||<qt|ts^t|ts^||||<qt|trr|||<q|D]\}}||d||<qzq|S)Ntruer"rx)rrrBrdictrrr,)rprprocessed_query_paramsrr inner_key inner_valr(r(r)rs    zBaseClient.process_query_paramsc Cs|jtdt|j|jfd}|jrVt|jj }|t j krV|j d ||j}|jsh|j}d}|jtkrzd}zt}|jj|j|j||j|j|j||jd} t} |jtjr|j td |jtjt| || rt| dr|j tdt| jWntjj y} zL| j!s:d | _!| j!d |jd |jd t"f| _!t | WYd} ~ nrd} ~ 0tjj#y} zL| j!sd | _!| j!d |jd |jd t"f| _!t#| WYd} ~ n d} ~ 00|j} |j td t| j$d| j$kr&dks8n|j%} |jd |j}t&}t'(t)j*+}|,| |\}}}| j$dkr|dkr|j-d | | j.}| /|j/t|_t0|j1t2r|j13| j$|rt|jj }||kr|j-d |||4|| ||||| |||| n|5|| ||||| |||| |rD| }n.| t6krV| j.}n| rn|7| j.| |}nd}t8| j$| j9||}|j td|S)NzRequest: %s %szCircuit Breaker State is {}!FT)authparamsrEdatarIrztime elapsed for request {}: {}elapsedztime elapsed in response: )r+zRequest Endpoint: r7zd See {} for help troubleshooting this error, or contact support and provide this full error message.zResponse status: %si+iRequestEntityTooLargez?Recieved a 413/RequestEntityTooLarge from {}, resetting sessionz+Circuit Breaker state changed from {} to {}zResponse returned):rinfor:r8rrrrrstatecircuitbreaker STATE_CLOSEDrr,rrwithout_content_headersrSTREAM_RESPONSE_TYPErrrrrrrrrrr%rrConnectTimeoutrqTROUBLESHOOT_URLRequestException status_coderr-rnowrutc isoformat)get_deserialized_service_code_and_messagewarningcontentrrBrris_transient_errorraise_transient_service_errorraise_service_errorBYTES_RESPONSE_TYPEdeserialize_response_datarrE)rprrr r initial_circuit_breaker_staterrIrrrrrtarget_servicerequest_endpointclient_version timestamp service_codemessagedeserialized_data_new_circuit_breaker_staterespr(r(r)r3s"    * ((       zBaseClient.requestcCsttddS)N-r+)r8rrrupperrr(r(r)rszBaseClient.build_request_idcCs(d|vr$dddt|D|d<dS)Nzopc-retry-tokenr+css$|]}ttjtjVqdSr#)random SystemRandomchoicestring ascii_lettersdigits)rrEr(r(r) rz;BaseClient.add_opc_retry_token_if_needed..)r[range)rprretry_token_lengthr(r(r)add_opc_retry_token_if_neededsz(BaseClient.add_opc_retry_token_if_neededcCsd|vrd|d<dS)Nzopc-client-retriesrr()rr(r(r)add_opc_client_retries_headersz(BaseClient.add_opc_client_retries_headercCs"t|tkrd|St|SdS)z Takes value and turn it into a string suitable for inclusion in the path, by url-encoding. :param obj: object or string value. :return string: quoted value. rKN)typerr[r8rpobjr(r(r)rs  zBaseClient.to_path_valuec stjtjtttdf}tjtttjfttjfd}rsdrdtt sd ndrtt stt s nXj vrtt stj s n$|vrt|s t|rSturdStt stt r4fddDSttrljsTtjtjddSttrStt r}d}rfd d |D}nZtd std ttjfd d jD}fdd t jD}i}t |D]X\} } d} | } |rN|| d} || d} r`d| n| } !| | | || <q |SdS)a Builds a JSON POST object. If obj is str, int, float, bool, None, return directly. If obj is datetime.datetime, datetime.date convert to string in iso8601 format. If obj is list, sanitize each element in the list. If obj is dict, return the dict. If obj is swagger model, return the properties dict. :param obj: The data to serialize. :return: The serialized form of data. N)r8rrrDdict(list[cs4g|],}|rndr*dndqS)Nz[*])r(extract_list_item_type_from_swagger_type)rsub_obj) declared_type field_namerpr(r) s z9BaseClient.sanitize_for_serialization..z+00:00Zcsi|]}||fqSr(r(r)dict_value_typer(r)rrz9BaseClient.sanitize_for_serialization.. swagger_typesz7Not able to serialize data: {} of type: {} in field: {}cs0i|](\}}t|durj|t|qSr#)getattr attribute_map)rattrrErXr(r)rscs i|]\}}j|||fqSr()rd)rre swagger_typerfr(r)rrrrrx)"r string_typesrCrDrrVis_none_or_none_sentinelrfrBr"raise_type_error_serializing_modelrtuplerrrtzinfopytzr3localize astimezoner4rr)extract_dict_value_type_from_swagger_typerrr,r8rtrbrrAr) rprXr]r^types0declared_swagger_type_to_acceptable_python_typesobj_dictkeys_to_types_and_field_namesanitized_dictkeyvalvalue_declared_typeinner_field_namer()r]rar^rXrpr)rsh             z%BaseClient.sanitize_for_serializationcCs|dup|tuSr#)rrWr(r(r)risz#BaseClient.is_none_or_none_sentinelcCs"td|t||t|jdS)NzGField {} with value {} was expected to be of type {} but was of type {})rr,r8rVrt)rpr^rXr]r(r(r)rjsz-BaseClient.raise_type_error_serializing_modelcCs t|}d}|r|d}|SNr)DICT_VALUE_TYPE_REGEXsearchgrouprprgmresultr(r(r)rps   z4BaseClient.extract_dict_value_type_from_swagger_typecCs t|}d}|r|d}|Srz)LIST_ITEM_TYPE_REGEXr|r}r~r(r(r)r[ s   z3BaseClient.extract_list_item_type_from_swagger_typec Cs*tj|j||j||||||| | | d dSN)original_requestr r r>r?r@rArD)rrr1rE rprrrBrCr r r>r?r@rArDr(r(r)r:szBaseClient.raise_service_errorc Cs*tj|j||j||||||| | | d dSr)rTransientServiceErrorr1rErr(r(r)r9!sz(BaseClient.raise_transient_service_errorcCsF||jd|}d}d}t|tr8|d}|d}n|}|||fS)NrcoderC)r<r7rBrr)rprrrDrBrCr(r(r)r50s   z4BaseClient.get_deserialized_service_code_and_messagec Cs|d}z8||}tj|| d}|dks.rYzdict\(([^,]*), (.*)\)racsi|]\}}||qSr(r)rrrrr(r)r}sz,BaseClient.__deserialize.. get_subtype)rfrematchr}rr"_BaseClient__deserialize_primitiverrrrDr urrr_BaseClient__deserialize_dater!_BaseClient__deserialize_datetime_BaseClient__deserialize_model)rpr$clsr(rr) __deserializejs6               zBaseClient.__deserializecCsBz ||}Wn0ty(t|}Ynty<|}Yn0|S)z Deserializes string to primitive type. :param data: str. :param cls: class literal. :return: int, float, str, bool. )UnicodeEncodeErrorr rr)rpr$rvaluer(r(r)__deserialize_primitives     z"BaseClient.__deserialize_primitivecCsHzt|WSty$|YStyBtd|Yn0dS)zb Deserializes string to date. :param string: str. :return: date. z(Failed to parse `{0}` into a date objectN)r r ImportErrorr Exceptionr,)rprNr(r(r)__deserialize_dates   zBaseClient.__deserialize_datec Csz"t|d}|jtd}|WSty|zt|WYStyX|YYStyvtd |Yn0Ynty|YS0dS)z Deserializes string to datetime. The string should be in iso8601 datetime format. :param string: str. :return: datetime. z%Y-%m-%dT%H:%M:%S.%fZ)rlz,Failed to parse `{0}` into a datetime objectN) rstrptimerr tzutcrr rrr,)rprN naivedatetime awaredatetimer(r(r)__deserialize_datetimes       z!BaseClient.__deserialize_datetimecCsL|}|jD]6\}}|j|}||vr||}t|||||q|S)z Deserializes list or dict to model. :param data: dict, list. :param cls: class literal. :return: model object. )rbrrdsetattrr)rpr$rinstancere attr_typepropertyrr(r(r)__deserialize_models zBaseClient.__deserialize_modelcCs(d}|r|}n|r|}n tjr$tj}|S)a  Gets the preferred Retry Strategy for the client :param operation_retry_strategy: (optional) Operation level Retry Strategy :param client_retry_strategy: (optional) Client level Retry Strategy :return: Preferred Retry Strategy. N)rGLOBAL_RETRY_STRATEGY)operation_retry_strategyclient_retry_strategyretry_strategyr(r(r)get_preferred_retry_strategysz'BaseClient.get_preferred_retry_strategycCs8|}|j}tj}|dur|S|dur(|S|dur4dSdSr)rrALLOW_CONTROL_CHARACTERS)rprrequest_configurationclient_configurationglobal_configurationr(r(r)rsz%BaseClient.should_allow_control_chars) NNNNNTNNN)NNN)rJ)NN)NNNNNNN)NNNNNNN)N)N).rtrurvrrDr rrrrrrrrnrrsetterrrrrrrrrrrT staticmethodrUrrrirjrpr[r:r9r5r<rrrrrrrr(r(r(r)rsp T      b > U   X     *, r)r+)^ __future__rrr~r.r*rmrKrrrNr _strptimerrrtimeitrr_vendorrr r dateutil.parserr dateutilr rsix.moves.http_clientr r+rrrrr"rrrrrrrrrrrrrversionrrrrrrAPPEND_USER_AGENT_ENV_VAR_NAMErrr3r,r-compiler{rr/rexpect_header_env_varrBrhrr*r6r:r@rHr-r;rrrrWr`rirj connectionVerifiedHTTPSConnectionrwHTTPSConnectionPoolr poolmanagerpool_classes_by_schemerrr(r(r(r)s|                  T