
    ~i7                       d dl 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mZm	Z	m
Z
mZmZmZmZmZmZ d dlmZ d dlmZmZ d dlmZ ddlmZmZmZ dd	lmZ  ed
          Z ede	edf                   Z ede
e ef                   Z! edee                   Z" ededef                   Z#dvdZ$dwdZ%dxd$Z&dyd'Z'dzd)Z(d{d,Z)d|d.Z*d}d1Z+d~d3Z,dd6Z-dd8Z.dd:Z/dd<Z0dd>Z1d?d@dAddFZ2ddHZ3ddKZ4 edL          Z5 edM          Z6eddO            Z7eddR            Z7eddS            Z7ddUZ7ddWZ8ddYZ9dd[Z:dd]Z;dd_Z<ddaZ=ddcZ>ddeZ?ddgZ@ddhZAdidjddlZBddnZCdo ZDdp ZEdq ZFdr ZGds ZHdt ZIdu ZJdS )    )annotationsN)	AnyTupleMappingTypeVarCallableIterableSequencecastoverload)Path)datedatetime)	TypeGuard   )NotGiven	FileTypes
NotGivenOr)ARK_APIKEY_PROJECT_NAME_T_TupleT.)bound	_MappingT
_SequenceT	CallableTtIterable[Iterable[_T]]returnlist[_T]c                    d | D             S )Nc                    g | ]	}|D ]}|
S  r"   ).0sublistitems      n/root/.openclaw/workspace/.venvs/ark-sdk/lib/python3.11/site-packages/volcenginesdkarkruntime/_utils/_utils.py
<listcomp>zflatten.<locals>.<listcomp>-   s%    666Wg66dD6666    r"   )r   s    r&   flattenr)   ,   s    666666r(   queryMapping[str, object]pathsSequence[Sequence[str]]list[tuple[str, FileTypes]]c          	     `    g }|D ](}|                     t          | |dd                     )|S )zRecursively extract files from the given dictionary based on specified paths.

    A path may look like this ['foo', 'files', '<array>', 'data'].

    Note: this mutates the given dictionary.
    r   Nindexflattened_key)extend_extract_items)r*   r,   filespaths       r&   extract_filesr7   0   sE     *,E O O^E4qMMMNNNNLr(   objobjectr6   Sequence[str]r1   intr2   
str | Nonec               ,   	          }nX# t           $ rK t          | t                    rg cY S ddlm}  ||            J t          t          |           fgcY S w xY wdz  t          |           rf	 t                    k    r| 	                    |          }n| |         }n# t          $ r g cY S w xY w|n	d| dz  t          |          S t          |           r%|dk    rg S t          fd	| D                       S g S )
Nr   )assert_is_file_content)key   []r0   z<array>c           	     D    g | ]}t          |dz   nd          S )Nz[]r0   )r4   )r#   r%   r2   r1   r6   s     r&   r'   z"_extract_items.<locals>.<listcomp>u   sY     
 
 
  $0 #0$"6"6  
 
 
r(   )
IndexError
isinstancer   _filesr>   r   r   is_dictlenpopKeyErrorr4   is_listr)   )r8   r6   r1   r2   r?   r>   r%   s    ```   r&   r4   r4   C   s   75k 7 7 7c8$$ 	III 	433333 	s6666(((Y 4 4566667 
QJEs|| &

	D		e##wws||3x 	 	 	 III		
  MMZZZZ'M'	
 
 
 	
 
 
)I
 
 
 
 
 
  
 
 

 
 	
 Is&    !A#/A#"A#;1B- -B<;B<NotGivenOr[_T]TypeGuard[_T]c                .    t          | t                     S NrE   r   r8   s    r&   is_givenrR      s    #x((((r(   TypeGuard[tuple[object, ...]]c                ,    t          | t                    S rO   rE   tuplerQ   s    r&   is_tuplerW          c5!!!r(   _TupleT | objectTypeGuard[_TupleT]c                ,    t          | t                    S rO   rU   rQ   s    r&   
is_tuple_tr\      rX   r(   TypeGuard[Sequence[object]]c                ,    t          | t                    S rO   rE   r
   rQ   s    r&   is_sequencer`          c8$$$r(   _SequenceT | objectTypeGuard[_SequenceT]c                ,    t          | t                    S rO   r_   rQ   s    r&   is_sequence_tre      ra   r(   TypeGuard[Mapping[str, object]]c                ,    t          | t                    S rO   rE   r   rQ   s    r&   
is_mappingri          c7###r(   _MappingT | objectTypeGuard[_MappingT]c                ,    t          | t                    S rO   rh   rQ   s    r&   is_mapping_trn      rj   r(   TypeGuard[dict[object, object]]c                ,    t          | t                    S rO   )rE   dictrQ   s    r&   rG   rG          c4   r(   TypeGuard[list[object]]c                ,    t          | t                    S rO   )rE   listrQ   s    r&   rK   rK      rr   r(   TypeGuard[Iterable[object]]c                ,    t          | t                    S rO   )rE   r	   rQ   s    r&   is_iterablerx      ra   r(   r%   c                    t          |           r1t          t          d |                                 D                       S t	          |           rt          t          d | D                       S | S )zMinimal reimplementation of copy.deepcopy() that will only copy certain object types:

    - mappings, e.g. `dict`
    - list

    This is done for performance reasons.
    c                4    i | ]\  }}|t          |          S r"   deepcopy_minimal)r#   kvs      r&   
<dictcomp>z$deepcopy_minimal.<locals>.<dictcomp>   s'    IIIDAq,Q//IIIr(   c                ,    g | ]}t          |          S r"   r{   )r#   entrys     r&   r'   z$deepcopy_minimal.<locals>.<listcomp>   s!    CCCU)%00CCCr(   )ri   r   r   itemsrK   )r%   s    r&   r|   r|      so     $ KBIIDJJLLIIIJJJt}} EBCCdCCCDDDKr(   z, or)delimfinalseqr   strr   c                   t          |           }|dk    rdS |dk    r| d         S |dk    r| d          d| d| d          S |                    | d d                   d| d| d          z   S )Nr    r@   r    )rH   join)r   r   r   sizes       r&   
human_joinr      s    s88Dqyyrqyy1vqyya&++5++3q6+++::c#2#h"7e"7"7c"g"7"777r(   stringc                    d|  dS )zOAdd single quotation marks around the given string. Does *not* do any escaping.'r"   )r   s    r&   quoter      s    v===r(   variants Callable[[CallableT], CallableT]c                      d fd}|S )a4  Decorator to enforce a given set of arguments or variants of arguments are passed to the decorated function.

    Useful for enforcing runtime validation of overloaded functions.

    Example usage:
    ```py
    @overload
    def foo(*, a: str) -> str: ...


    @overload
    def foo(*, b: bool) -> str: ...


    # This enforces the same constraints that a static type checker would
    # i.e. that either a or b must be passed to the function
    @required_args(["a"], ["b"])
    def foo(*, a: str | None = None, b: bool | None = None) -> str: ...
    ```
    funcr   r   c                     t          j                   j        }d |                                D             t	          j                   d fd            }|S )Nc                B    g | ]\  }}|j         |j        |j        hv |S r"   )kindPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORD)r#   nameparams      r&   r'   z0required_args.<locals>.inner.<locals>.<listcomp>   sL     
 
 
ez%+    r(   argsr9   kwargsr   c                 H  
 t                      
t          |           D ]g\  }}	 
                    |                    "# t          $ r9 t	          j         dt                     dt          |            d          d w xY w|                                D ]}
                    |           D ]!}t          
fd|D                       }|r nŌ"t                    dk    r t          d D                       }d| d}nt                    d	k    sJ t          t          d	                   
z
            }	t          |	          dk    rd
t          d |	D                        }ndt          |	d	                    }t	          |           | i |S )Nz	() takes z argument(s) but z were givenc              3      K   | ]}|v V  	d S rO   r"   )r#   r   given_paramss     r&   	<genexpr>z@required_args.<locals>.inner.<locals>.wrapper.<locals>.<genexpr>  s(      JJu4JJJJJJr(   r@   c                P    g | ]#}d t          d |D             d          z   dz   $S )(c                ,    g | ]}t          |          S r"   r   r#   args     r&   r'   zLrequired_args.<locals>.inner.<locals>.wrapper.<locals>.<listcomp>.<listcomp>  s    )H)H)H%**)H)H)Hr(   and)r   ))r   )r#   variants     r&   r'   zArequired_args.<locals>.inner.<locals>.wrapper.<locals>.<listcomp>  sX        !(  ()H)H)H)H)HPUVVVW!"  r(   z,Missing required arguments; Expected either z arguments to be givenr   zMissing required arguments: c                ,    g | ]}t          |          S r"   r   r   s     r&   r'   zArequired_args.<locals>.inner.<locals>.wrapper.<locals>.<listcomp>   s    HgHgHgX[sHgHgHgr(   zMissing required argument: )set	enumerateaddrD   	TypeError__name__rH   keysallr   ru   r   )r   r   i_r?   r   matches
variationsmsgmissingr   r   
positionalr   s             @r&   wrapperz-required_args.<locals>.inner.<locals>.wrapper   s   %(UUL!$    1  $$Z]3333!      #=kk3z??kkUXY]U^U^kkk   
 {{}} & &  %%%%# % %JJJJ'JJJKK E x==1$$!+  ,4	  " "J lkkkCCx==1,,,, #3x{#3#3l#BCCG7||a''jZHgHg_fHgHgHg=h=hjjOE'!*<M<MOOnn$4((((s   AAB)r   r9   r   r9   r   r9   )inspect	signature
parametersr   	functoolswraps)r   paramsr   r   r   s   `  @r&   innerzrequired_args.<locals>.inner   s    "4((3
 
%||~~
 
 

 
		&	) &	) &	) &	) &	) &	) &	) 
	&	)P r(   )r   r   r   r   r"   )r   r   s   ` r&   required_argsr      s)    ,5 5 5 5 5 5n Lr(   _K_VNonec                    d S rO   r"   rQ   s    r&   strip_not_givenr   /  s    (+r(   Mapping[_K, _V | NotGiven]dict[_K, _V]c                    d S rO   r"   rQ   s    r&   r   r   3  s    FIcr(   c                    d S rO   r"   rQ   s    r&   r   r   7  s    ,/Cr(   object | Nonec                h    | dS t          |           s| S d |                                 D             S )zHRemove all top-level keys where their values are instances of `NotGiven`Nc                D    i | ]\  }}t          |t                    ||S r"   rP   r#   r?   values      r&   r   z#strip_not_given.<locals>.<dictcomp>C  s-    XXX:3Juh<W<WXCXXXr(   )ri   r   rQ   s    r&   r   r   ;  s;    
{tc?? 
XXXXXXr(   valc                $    t          | d          S )N
   )base)r;   r   s    r&   coerce_integerr   F  s    sr(   floatc                     t          |           S rO   )r   r   s    r&   coerce_floatr   J  s    ::r(   boolc                &    | dk    p| dk    p| dk    S )Ntrue1onr"   r   s    r&   coerce_booleanr   N  s    &=5C3J5#+5r(   
int | Nonec                (    | d S t          |           S rO   )r   r   s    r&   maybe_coerce_integerr   R      
{t#r(   float | Nonec                (    | d S t          |           S rO   )r   r   s    r&   maybe_coerce_floatr   X  s    
{tr(   bool | Nonec                (    | d S t          |           S rO   )r   r   s    r&   maybe_coerce_booleanr   ^  r   r(   prefixc                T     | j         |          r| t          |          d         S | S )zXRemove a prefix from a string.

    Backport of `str.removeprefix` for Python < 3.9
    N)
startswithrH   )r   r   s     r&   removeprefixr   d  s3    
 v   $c&kkll##Mr(   suffixc                V     | j         |          r| dt          |                    S | S )zXRemove a suffix from a string.

    Backport of `str.removesuffix` for Python < 3.9
    N)endswithrH   )r   r   s     r&   removesuffixr   n  s4    
 vv &nVn%%Mr(   r   c                    t          |                                           }t          j                            |           }||fS rO   )r   
read_bytesosr6   basename)r6   contents	file_names      r&   file_from_pathr   x  s9    Dzz$$&&H  &&Ix  r(   c                 V    	 dd l } |                                 S # t          $ r Y dS w xY w)Nr   false)sniffiocurrent_async_library	Exception)r   s    r&   get_async_libraryr   ~  sD    ,,...   wws    
((   maxsizer  c                V    t          j        |           }t          t          |          S )zmA version of functools.lru_cache that retains the type signature
    for the wrapped function arguments.
    r  )r   	lru_cacher   r   )r  r   s     r&   r  r    s0     !  G Wr(   datac                :   t          |           rd |                                 D             S t          |           r.t          | t          t
          t          f          sd | D             S t          | t          t          f          r| 	                                S | S )zvTranslates a mapping / sequence recursively in the same fashion
    as `pydantic` v2's `model_dump(mode="json")`.
    c                N    i | ]"\  }}t          |          t          |          #S r"   	json_safer   s      r&   r   zjson_safe.<locals>.<dictcomp>  s,    PPPZS%	#	% 0 0PPPr(   c                ,    g | ]}t          |          S r"   r	  )r#   r%   s     r&   r'   zjson_safe.<locals>.<listcomp>  s    111D	$111r(   )
ri   r   rx   rE   r   bytes	bytearrayr   r   	isoformat)r  s    r&   r
  r
    s     $ QPP4::<<PPPP4 2D3y2I!J!J 211D1111$4())  ~~Kr(   c                     t          j                                        d          } t          j        t          j        z   d                    fdt          d          D                       }|  | S )Nz%Y%m%d%H%M%Sr   c              3  @   K   | ]}t          j                  V  d S rO   )randomchoice)r#   r   charss     r&   r   z"_gen_request_id.<locals>.<genexpr>  s-      ??v}U++??????r(      )r   nowstrftimer   ascii_lettersdigitsr   range)time_strrand_strr  s     @r&   _gen_request_idr    sh    |~~&&~66H 6=0Eww????U2YY?????H""""r(   c                      fd}|S )Nc                 4    t          | |            | i |S rO   _insert_sts_tokenr   r   r   s     r&   r   zwith_sts_token.<locals>.wrapper  s(    $'''tT$V$$$r(   r"   r   r   s   ` r&   with_sts_tokenr#    #    % % % % % Nr(   c                      fd}|S )Nc                 D   K   t          | |            | i | d {V S rO   r  r!  s     r&   r   z%async_with_sts_token.<locals>.wrapper  s>      $'''T4*6*********r(   r"   r"  s   ` r&   async_with_sts_tokenr'    #    + + + + + Nr(   c                   t          |           dk    sJ d|v s
J d            | d         j        }|                    dd          }|j        v|rt|                    d          r_|j        rX|j        rQdd|                    |          z   i}|                    d          r|                    d          ni }i |||d<   d S |j        |r|j        r|j        r|                    d          r|                    d          ni }d }|(|                    t          d           |t                   }dd|	                    ||          z   i}i |||d<   d S d S d S d S d S )	Nr   modelzyou need to support modelr   zbot-AuthorizationzBearer extra_headers)
rH   _clientgetapi_keyr   aksk_get_bot_sts_tokenr   _get_endpoint_sts_token)r   r   
ark_clientr*  default_auth_headerr,  project_names          r&   r   r     s   t99q====f9aJJJw##E" 	#V$$ 	# M 	# M	 	# Y)F)Fu)M)MM
 ,2::o+F+FNFJJ'''B 	 #K%8"JM"J" 	#M 	# M 	# ,2::o+F+FNFJJ'''B 	 !$):):;RTX)Y)Y)e()@ALY)K)KES_)`)``
 #K%8"JM"J 	#"""""""r(   c                      fd}|S )Nc                 4    t          | |            | i |S rO   _assert_apikeyr!  s     r&   r   z apikey_required.<locals>.wrapper  s(    tV$$$tT$V$$$r(   r"   r"  s   ` r&   apikey_requiredr;    r$  r(   c                      fd}|S )Nc                 D   K   t          | |            | i | d {V S rO   r9  r!  s     r&   r   z&async_apikey_required.<locals>.wrapper  s>      tV$$$T4*6*********r(   r"   r"  s   ` r&   async_apikey_requiredr>    r(  r(   c                l    t          |           dk    sJ | d         j        }|j        
J d            d S )Nr   z[ak&sk authentication is currently not supported for this method, please use api key instead)rH   r-  r/  )r   r   r4  s      r&   r:  r:    s@    t99q====aJ))e *))))r(   )r   r   r   r   )r*   r+   r,   r-   r   r.   )
r8   r9   r6   r:   r1   r;   r2   r<   r   r.   )r8   rL   r   rM   )r8   r9   r   rS   )r8   rY   r   rZ   )r8   r9   r   r]   )r8   rb   r   rc   )r8   r9   r   rf   )r8   rk   r   rl   )r8   r9   r   ro   )r8   r9   r   rs   )r8   r9   r   rv   )r%   r   r   r   )r   r:   r   r   r   r   r   r   )r   r   r   r   )r   r:   r   r   )r8   r   r   r   )r8   r   r   r   )r8   r9   r   r9   )r8   r   r   r9   )r   r   r   r;   )r   r   r   r   )r   r   r   r   )r   r<   r   r   )r   r<   r   r   )r   r<   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r6   r   r   r   )r   r   )r  r   r   r   )r  r9   r   r9   )K
__future__r   r   r   r   r  r   typingr   r   r   r   r   r	   r
   r   r   pathlibr   r   r   typing_extensionsr   _typesr   r   r   
_constantsr   r   r9   r   r   r   r   r   r)   r7   r4   rR   rW   r\   r`   re   ri   rn   rG   rK   rx   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r#  r'  r   r;  r>  r:  r"   r(   r&   <module>rF     s   # " " " " " 				       
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
       # # # # # # # # ' ' ' ' ' ' 4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0WT]]
')5#5
6
6
6GKwsF{';<<<	W\&)9:::
GKxS'9:::	7 7 7 7   &@ @ @ @F) ) ) )" " " "" " " "% % % %% % % %$ $ $ $$ $ $ $! ! ! !! ! ! !% % % %     48d 8 8 8 8 8 8   
M M M M` WT]]WT]] 
 + + + 
 + 
 I I I 
 I 
 / / / 
 /Y Y Y Y      6 6 6 6               ! ! ! !    (+          # # #    #K #K #KL        r(   