
    E0jU                       d dl mZ d dlmZ d dlmZmZmZ d dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl
Z
d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dl m!Z! d dl"m#Z# d dl	m	Z	 d dlmZmZmZ ddl$m%Z%m&Z&  e' ej                    dz            Z(d a)d Z*d Z+d Z,d Z-d Z. G d de/          Z0dS )    )annotations)	DaraModel)DictAnyListN)default_backend)hashes)padding)load_pem_private_key)
quote_plusquote)STREAM_CLASS)Form)DaraCore)datetime)r   r   r      )hash_sm3Sm3  c                t    | | S t          | t                    rt          | d          S t          |           S )Nutf-8encoding)
isinstancebytesstr)vals    f/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/alibabacloud_tea_openapi/utils.pyto_strr   !   s<    
{
#u 3))))3xx    c                   |                     d          sd|z  }|                    d          sd|z  }t          |d t                                }|                    | t          j                    t          j                              S )Ns   -----BEGIN RSA PRIVATE KEY-----s"   -----BEGIN RSA PRIVATE KEY-----
%ss   -----END RSA PRIVATE KEY-----s    %s
-----END RSA PRIVATE KEY-----)passwordbackend)	
startswithendswithr   r   signr
   PKCS1v15r	   SHA256)	plaintextsecretkeys      r   rsa_signr,   +   s    ?@@ A7&@??;<< ?5>
vo>O>O
P
P
PC88Iw/116=??CCCr    c                \   |                     d          }|                      d          } |dk    r2t          j        | |t          j                                                  S |dk    r-t          j        | |t                                                    S |dk    rt          ||           S d S )Nr   ACS3-HMAC-SHA256ACS3-HMAC-SM3ACS3-RSA-SHA256)encodehmacnewhashlibsha256digestr   r,   )r*   source	sign_types      r   signature_methodr9   5   s    ]]7##F]]7##F&&&x77>>@@@	o	%	%x,,33555	'	'	'''' 
(	'r    c                :   | t          |           dk    rdS g }|                                 D ]\  }}||                    |           |                                 d}|D ]/}t	          | |         dd          }|| d}n| d| d}||z  }0|d d         S )	Nr    ~r   safer   &=)lenitemsappendsortr   )query
canon_keyskvquery_stringr+   valuess           r   get_canonical_query_stringrM   @   s    }E

arJ ! !1=a   OOL  eCjsW====			AA!!!!!Ar    c                   g }i }|                                  D ]\  }}||                                |vr_|                    |                                           t          |                                          g||                                <   |||                                                             t          |                                                     |                                 d}|D ]7}d                    t          ||                             }| d| d}||z  }8|d                    |          fS )Nr;   ,:
;)rC   lowerrD   r   striprE   joinsorted)	headersrG   tmp_headersrH   rI   canonical_headersr+   header_entryrL   s	            r   get_canonicalized_headersr[   T   s5   JK A A1=wwyy
**!!!'')),,,*0))//*;*;)<AGGII&&AGGII&--fQiioo.?.?@@@OO  xx{3'7 8 899%%\%%%Qchhz2222r    c                      e Zd ZdZed             Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed3d            Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed4d            Zed4d            Zed5d            Zed6d#            Zed$             Zed7d&            Z ed8d(            Z!ed9d+            Z"ed:d-            Z#ed;d<d1            Z$ed=d2            Z%d'S )>Utilsz"
    This is for OpenApi Util
    c                    t                               |                                           }|                    |           dS )z
        Convert all params of body other than type of readable into content

        @param body: source Model

        @param content: target Model

        @return: void
        N)r]   _except_streamto_mapfrom_map)bodycontentbody_maps      r   convertzUtils.convertm   s9     ''66"""""r    c                   t          | t                    r;i }|                                 D ]"\  }}t                              |          ||<   #|S t          | t
                    rjg }| D ]c}|2t                              |          }||                    |           6|                    t                              |                     d|S t          | t                    rd S | S N)r   dictrC   r]   r_   listrD   r   )r   resultrH   rI   iitems         r   r_   zUtils._except_stream{   s    c4   	F		 4 41!0033q		MT"" 	F ; ;= //22D'd+++MM%"6"6q"9"9::::M\** 	4
r    c                    g }| D ],}|                     d          r|                    |           -t          |          }d}|D ]}||d| |         dz  }|S )Nzx-acs-r;   rP   rQ   )r$   rD   rV   )rW   rG   rH   canon_headers       r   _get_canonicalized_headersz Utils._get_canonicalized_headers   s    
 	% 	%A||H%% %!!!$$$J''
 	8 	8AGAJJJ77LLr    c                    t          |          dk    r| S d| z  }t          t          |                    }|D ]/}||         %||         dk    rd|z  }n|d||         d}||z  }0|d d         S )Nr   z%s?r;   z%s&r@   r?   rA   )rB   rV   ri   )pathnamerF   resource
query_listr+   rL   s         r   _get_canonicalized_resourcez!Utils._get_canonicalized_resource   s    u::??O8#DKK((
 	 	CSz%:##AA$'CCs4AA}r    c           
     @   | j         | j        | j        | j        f\  }}}}|                    d          dn|                    d          }|                    d          dn|                    d          }|                    d          dn|                    d          }|                    d          dn|                    d          }|d|d|d|d|d
}	t
                              |          }
t
                              ||          }|	|
z   |z   }|S )z
        Get the string to be signed according to request

        @param request:  which contains signed messages

        @return: the signed string
        acceptNr;   zcontent-md5zcontent-typedaterQ   )methodrq   rW   rF   getr]   ro   rt   )requestrx   rq   rW   rF   rv   content_md5content_typerw   headercanon_headerscanon_resourcesign_strs                r   get_string_to_signzUtils.get_string_to_sign   s#    ,3>7;KW_^e^k+k('5{{8,,4'++h:O:O#KK66>bbGKKP]D^D^$[[88@rrgkkR`FaFa[[((0rrgkk&6I6I+166666;;;VZVZVZ[88AA::8UKKM)N:r    c                   t          j        |                    d          |                     d          t          j                                                  }t          j        |                              d          }|S )z
        Get signature according to stringToSign, secret

        @type string_to_sign: str
        @param string_to_sign:  the signed string

        @type secret: str
        @param secret: accesskey secret

        @return: the signature
        r   )	r2   r3   r1   r4   sha1r6   base64	b64encodedecode)string_to_signr*   hash_val	signatures       r   get_roasignaturezUtils.get_roasignature   se     8FMM'22N4I4I'4R4RT[T`aahhjj$X..55g>>	r    c                   |d S t          |t                    r=|                                D ]&\  }}t                              | d|||           'd S t          |t
                    rO|                                                                D ]&\  }}t                              | d|||           'd S t          |t          t          f          r;t          |          D ])\  }}t                              | d|dz   ||           *d S | 
                    d          r
| dd          } t          |t                    rt          |d          || <   d S t          |t                    st          |          || <   d S d S )N.r   r   r   )r   rh   rC   r]   _object_handlerr   r`   ri   tuple	enumerater$   r   r   r   )r+   rK   outrH   rI   indexr   s          r   r   zUtils._object_handler   s   =FeT"" 	& B B1%%aa&8!SAAAAB By)) 	&,,.. B B1%%aa&8!SAAAAB Be}-- 		&'.. L L
s%%eaii&@#sKKKKL L ~~c"" !""g%'' &uw777C|44 &u::C& &r    mDict[str, str]returnDict[str, Any]c                    | S )zN
        Anyify the value of map
        @return: the new anyfied map
         )r   s    r   anyify_map_valuezUtils.anyify_map_value   s	     r    c                j    i }| rt                               d| |           t          j        |          S )z
        Parse filter into a form string

        @type filter: dict
        @param filter: object

        @return: the string
        r;   )r]   r   r   to_form_string)filterrj   s     r   to_formzUtils.to_form   s:      	6!!"ff555"6***r    c                 N    t          j                                        d          S )zF
        Get timestamp

        @return: the timestamp string
        z%Y-%m-%dT%H:%M:%SZr   utcnowstrftimer   r    r   get_timestampzUtils.get_timestamp   s!       ))*>???r    c                F    i }| rt                               d| |           |S )z
        Parse filter into a object which's type is map[string]string

        @type filter: dict
        @param filter: query param

        @return: the object
        r;   )r]   r   )r   out_dicts     r   rF   zUtils.query	  s.      	8!!"fh777r    c           
     H   |                                  }t          |                                          }|                                 d}|D ];}||         1|dt	          |dd           dt	          ||         dd           z  }<| dt          |d	d         dd           }t          j        t          |dz   d
          t          |d
          t          j
                  }|                                }	t          t          j        |	          d
          }
|
S )aU  
        Get signature according to signedParams, method and secret

        @type signed_params: dict
        @param signed_params: params which need to be signed

        @type method: str
        @param method: http method e.g. GET

        @type secret: str
        @param secret: AccessKeySecret

        @return: the signature
        r;   Nr?   r<   r   r=   r@   z&%2F&r   r   )	digestmod)copyri   keysrE   r   r   r2   r3   r   r4   r   r6   r   r   r   )signed_paramsrx   r*   queriesr   canonicalized_query_stringrH   r   digest_maker
hash_bytes
signed_strs              r   get_rpcsignaturezUtils.get_rpcsignature  sO      $$&&GLLNN##		%'" 	a 	aAqz%* /a%g2V2V2V /a /a16wqzV]1^1^1^/a /a a* #qq4Nqrr4RY\gn)o)o)oqqxfslW E E E %nw G G G*1,8 8 8 "((**
)*55HHH
r    c                   | dS |dk    rt                               || i          S |dk    r(d                    t          t          |                     S |dk    r(d                    t          t          |                     S |dk    r(d	                    t          t          |                     S |d
k    r,t          j        t                               |                     S dS )a  
        Parse array into a string with specified style

        @type array: any
        @param array: the array

        @type prefix: str
        @param prefix: the prefix string

        @param style: specified style e.g. repeatList

        @return: the string
        Nr;   
repeatListsimplerO   spaceDelimited pipeDelimited|json)r]   _flat_repeat_listrU   mapr   r   to_json_string_parse_to_dict)arrayprefixstyles      r   $array_to_string_with_specified_stylez*Utils.array_to_string_with_specified_style=  s     =2L  **FE?;;;h88CUOO,,,&&&88CUOO,,,o%%88CUOO,,,f__*5+?+?+F+FGGG2r    c                   i }| rt                               d| |           g }t          |          }|D ]E}t          |d          }t          ||         d          }|                    |dz   |z              Fd                    |          S )Nr;   r   r   r@   z&&)r]   r   rV   r   rD   rU   )dicrF   lqrk   rH   rI   s          r   r   zUtils._flat_repeat_list\  s     	2!!"c51115MM 	" 	"A1w///A58g666AHHQWq[!!!!yy||r    c                    	 t                               |           }t          j        |          S # t          $ r Y dS w xY w)z)
        Transform input as map.
        N)r]   r   r   deepcopy	TypeError)inprj   s     r   parse_to_mapzUtils.parse_to_mapj  sL    
	))#..F=((( 	 	 	FF	s   -0 
>>c                N   t          | t                    rci }|                                 D ]J\  }}t          |t          t          t          f          rt
                              |          ||<   E|||<   K|S t          | t                    rng }| D ]g}t          |t          t          t          f          r.|                    t
                              |                     R|                    |           h|S t          | t                    r|                                 S d S rg   )	r   rh   rC   ri   r   r]   r   rD   r`   )r   rj   rH   rI   rk   s        r   r   zUtils._parse_to_dictu  s   c4   	 F		 " "1a$i!899 " % 4 4Q 7 7F1II !F1IIMT"" 		 F % %a$i!899 %MM%"6"6q"9"9::::MM!$$$$MY'' 	 ::<<	  	 r    c                    |dk    r:|                      d          }|dxx         dz  cc<   d                    |          } |r|dk    rdS | S )aX  
        If endpointType is internal, use internal endpoint
        If serverUse is true and endpointType is accelerate, use accelerate endpoint
        Default return endpoint
        @param server_use whether use accelerate endpoint
        @param endpoint_type value must be internal or accelerate
        @return the final endpoint
        internalr   r   z	-internal
acceleratezoss-accelerate.aliyuncs.com)splitrU   )endpoint
server_useendpoint_type	str_splits       r   get_endpointzUtils.get_endpoint  sd     J&& s++IaLLLK'LLLxx	**H 	1-<7700r    c                    |dk    s|dk    r&t          j        |                                           S |dk    rt          |           S d S )Nr.   r0   r/   )r4   r5   r6   r   )rawr8   s     r   hashz
Utils.hash  sT    ***i;L.L.L>#&&--////))C==  *)r    c                X    | r't          j        |                               d          S d S )Nr   )binasciib2a_hexr   )r   s    r   
hex_encodezUtils.hex_encode  s3     	9#C((//888	9 	9r    c                   | j         r| j         nd}t          | j                  }t          | j                  \  }}| j         d| d| d| d| d| }	| dt                              t                              |		                    d          |                     }
t                              t          ||
|                    }| d| d| d| }|S )N/rQ   r   z Credential=z,SignedHeaders=z,Signature=)rq   rM   rF   r[   rW   rx   r]   r   r   r1   r9   )rz   r8   payloadakr*   canonical_uricanonicalized_querycanonicalized_headerssigned_headerscanonical_requeststr_to_signr   auths                r   get_authorizationzUtils.get_authorization  s    ,3,<E((#8GG0I'/0Z0Z-~&~ ) ),) )2) )  5) )  .	) )
  ') ) #rre&6&6uzzBSBZBZ[bBcBcen7o7o&p&prr$$%5fk9%U%UVV	bbbbNbbW`bbr    c                &    t          | dd          S )Nz/~r   r=   r   )paths    r   get_encode_pathzUtils.get_encode_path  s    Tw7777r    c                &    t          | dd          S )Nr<   r   r=   r   )params    r   get_encode_paramzUtils.get_encode_param  s    Uw7777r    r   c            	        t          j                    } t          t          j                    dz            }t          }t          dz  at          j        d          }t          t          j                    dz            }| d|  d| d| d| 	}t          j                    }|	                    |
                    d                     |                                S )zK
        Generate a nonce string
        @return: the nonce string
        r   r   @   -r   )	threading	get_identinttime_seqIdrandomgetrandbitsr4   md5updater1   	hexdigest)	thread_idcurrent_timeseqrandNum_process_start_timemsgr   s          r   	get_noncezUtils.get_nonce  s     '))	49;;-..!$R((!$)++"455$QQyQQ<QQ#QQQQkmm

3::g&&'''}}r    c                 N    t          j                                        d          S )z
        Get an UTC format string by current date, e.g. 'Thu, 06 Feb 2020 07:32:54 GMT'
        @return: the UTC format string
        z%a, %d %b %Y %H:%M:%S GMTr   r   r    r   get_date_utcstringzUtils.get_date_utcstring  s!       ))*EFFFr    c                    | i S i }|                                  D ]F\  }}|:t          |t                    r|                    d          }nt	          |          }|||<   G|S )zU
        Stringify the value of map
        @return: the new stringified map
        Nr   )rC   r   r   r   r   )r   
dic_resultrH   rI   s       r   stringify_map_valuezUtils.stringify_map_value  st     9I
GGII 	 	DAq}a'' ))AAAAJqMMr    inputr   List[Dict[str, Any]]c                    | g S g }| D ]T}t          |t                    r(|                    |                                           ?|                    |           U|S )z+
        Transform input as array.
        )r   r   rD   r`   )r  r   rk   s      r   to_arrayzUtils.to_array  sg     =I 	 	A!Y'' 

188::&&&&

1
r    c            	         dt          j                     dt          j                     dt          j                     dt          j         d	S )NzAlibabaCloud (z; z	) Python/z Core/z	 TeaDSL/2)platformsystemmachinepython_versionTea__version__r   r    r   __get_default_agentzUtils.__get_default_agent  sj    U 1 1 U UX5E5G5G U U!022U U:=/U U U 	Ur    
user_agentc                t    | rt                                            d|  S t                                           S )z
        Get user agent, if it userAgent is not null, splice it with defaultUserAgent and return, otherwise return defaultUserAgent
        @return: the string value
        r   )r]   _Utils__get_default_agent)r  s    r   get_user_agentzUtils.get_user_agent  s?      	A//11@@J@@@((***r    Nc                J   | pd} |pd}|dk    r.||dk    rt          d          d                    d|          }nd}|                    d|                                           }|dk    s|dk    r|                    d	d          }n|                    d	d
|z             }|S )Nr;   regionalz.RegionId is empty, please set a valid RegionIdz+<product><network>.<region_id>.aliyuncs.comz<region_id>z<product><network>.aliyuncs.comz	<product>publicz	<network>r   )RuntimeErrorreplacerS   )product	region_idr   networksuffixrj   s         r   get_endpoint_ruleszUtils.get_endpoint_rules  s    -R-RJ&& IOO"DF F FBJJy* *FF 7FW]]__==b==Gx//^^K44FF^^KW==Fr    rW   r   c                    |                      d          }|                      d          }t                              |          }t                              |          }t          ||          S )z
        Get throttling time left based on the response headers
        
        @param headers: The response headers
        @return: Remaining time in milliseconds before the throttle is lifted
        zx-ratelimit-user-apizx-ratelimit-user)ry   r]   _get_time_leftmax)rW   rate_limit_user_apirate_limit_usertime_left_user_apitime_left_users        r   get_throttling_time_leftzUtils.get_throttling_time_left,  sb     &kk*@AA!++&899"112EFF--o>>%~666r    
rate_limitc                    | rm|                      d          }|D ]U}|                     d          \  }}|                                dk    r#t          |                                          c S VdS )z
        Extract time left from rate limit string
        
        @param rate_limit: Rate limit string from headers
        @return: Time left in milliseconds
        rO   rP   TimeLeftr   )r   rT   r   )r'  pairspairr+   rK   s        r   r   zUtils._get_time_left<  sz      	.$$S))E . .!ZZ__
U99;;*,,u{{}}----- -qr    r;   paramsr   c                2    i fd | |           S )z
        Flatten the dictionary with a given prefix
        
        @param params: Dictionary to flatten
        @param prefix: Prefix for keys in the flattened dictionary
        @return: A flattened dictionary
        c                @   t          | t                    r3|                                 D ]\  }}|r| d| n|} ||           d S t          | t                    r-t	          |           D ]\  }}| d|dz    } ||           d S t          |           |<   d S )Nr   r   )r   rh   rC   ri   r   r   )	current_paramscurrent_prefixrH   rI   new_keyr   rl   _flattenflat_results	          r   r2  z Utils.flat_map.<locals>._flattenW  s    .$// 	B*0022 ) )DAq9GN55!555QGHQ(((() ) ND11 B#,^#<#< , ,KE4!/==%!)==GHT7++++, , /2..A.AN+++r    r   )r,  r   r2  r3  s     @@r   flat_mapzUtils.flat_mapL  sI     
	B 
	B 
	B 
	B 
	B 
	B 	   r    c                   | | S t          | t                    r6g }| D ]/}|                    t                              |                     0|S t          | t
                    r t          |           D ]}|                    d          r	 t          | |          }t          |          r9t          |t                    r`i }|                                D ]7\  }}dt          |           d| }t                              |          ||<   8t          | ||           n)t          | |t                              |                     # t          t          f$ r Y w xY w| S t          | t                    rPi }|                                 D ]7\  }}dt          |           d| }t                              |          ||<   8|S | S )a  
        Transform a map to a flat style map where keys are prefixed with length info.
        Map keys are transformed from "key" to "#length#key" format.
        
        @param input: Input to convert
        @return: A flat representation of the input
        N_#)r   ri   rD   r]   map_to_flat_styler   dirr$   getattrcallablerh   rC   rB   setattrAttributeErrorr   )	r  rj   rl   	attr_name
attr_valuer4  r+   rK   flat_keys	            r   r8  zUtils.map_to_flat_stylef  s    =L eT"" 	F = =e55d;;<<<<M eY'' 	 ZZ  	'',, !(	!:!:J
++ !  "*d33 W#%*4*:*:*<*< P PJC';3s88';';c';';H161H1H1O1OHX..y(;;;;  y%2I2I*2U2UVVV&	2   H L eT"" 	F#kkmm B B
U/s3xx//#//#(#:#:5#A#Ax  M s   E.BEE! E!)r   r   r   r   )r   r   )r   r   r   r   )r  r   r   r  )r  r   r   r   rg   )rW   r   r   r   )r'  r   r   r   )r;   )r,  r   r   r   r   r   )r  r   r   r   )&__name__
__module____qualname____doc__staticmethodre   r_   ro   rt   r   r   r   r   r   r   rF   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r&  r   r4  r8  r   r    r   r]   r]   h   s         # # \#   \( 	 	 \	   \   \*   \  & & \&*    \ + + \+ @ @ \@   \ " " \"H   \<   \   \     \ (   \& ! ! \! 9 9 \9   \" 8 8 \8 8 8 \8    \" G G G \G    \(    \" U U \U 	+ 	+ 	+ \	+    \( 7 7 7 \7    \     \2 7 7 7 \7 7 7r    r]   )1
__future__r   darabonba.modelr   typingr   r   r   r   r   r4   r2   r   r   r
  r   r  r   r   cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr	   )cryptography.hazmat.primitives.asymmetricr
   ,cryptography.hazmat.primitives.serializationr   urllib.parser   r   darabonba.utils.streamr   darabonba.utils.formr   darabonba.corer   sm3r   r   r   r   r   r   r,   r9   rM   r[   objectr]   r   r    r   <module>rS     sD   # " " " " " % % % % % % " " " " " " " " " "         



       8 8 8 8 8 8 1 1 1 1 1 1 = = = = = = M M M M M M * * * * * * * * / / / / / / % % % % % % # # # # # #       " " " " " " " " " "        c)$)++,-- 	
  D D D( ( (  (3 3 3(v v v v vF v v v v vr    