
    i&                        S SK r S SKrS SKJr  S SKJr  S SKJrJrJ	r	J
r
JrJrJrJrJrJrJr  S SKJr  S SKJrJrJrJr  S SKJr  S SKJr  \" S	5      r\\/\\\4   4   r \RB                  " S
\RD                  5      r#S\S\4S jr$S\S\\   S\4S jr%S\4S jr& " S S\\\4   5      r'S\(S\4S jr)S\S\4S jr*g)    N)	timedelta)isfinite)AnyCallableDictIterableIteratorMappingMutableMappingNoReturnOptionalTypeVarUnion)Self)InfoHash
InfoHashesInfoHashesOrAll_info_hash_str)TimeUnit)StrPathTz(?!^)([A-Z]+)namereturnc                 L    [         R                  S U 5      R                  5       $ )z
Convert camelCase to snake_case

Examples:
- helloWorld -> hello_world
- SendHTTP -> send_http
- HTTPRequest -> httprequest
- HTTP2Request -> http2_request
- seedingTimeLimit -> seeding_time_limit
c                 F    SU R                  S5      R                  5        3$ )N_   )grouplower)ms    >/app/mltbenv/lib/python3.13/site-packages/aioqbt/_paramdict.py<lambda>_camel2snake.<locals>.<lambda>*   s    !AGGAJ,<,<,>+?(@    )_CAMEL_PATTERNsubr   )r   s    r!   _camel2snaker'      s!     @$GMMOOr$   keyparamc                 "    Uc  [        U 5      $ U$ )z%
Derive parameter name from key name
)r'   r(   r)   s     r!   _param_namer,   -   s    
 }C  r$   c                      [         eN)AssertionError r$   r!   _missingr1   8   s    
r$   c                      \ rS rSr% Sr\\\4   \S'    S8S\\	\\
4      4S jjrS\S\S	S4S
 jrS\S	S4S jrS\S	\4S jrS	\4S jrS	\\   4S jrS8S\\\\
4      S	\4S jjr\r\S\S\\   S	\4S j5       rS	\\\4   4S jrS\4S\S\\   S\
S\S\\\
      S\
S	S4S jjrSSS\S.S\S\
S\\   S\S\\\
      S\
S	S4S jjrSS.S\S\\   S\\   S	S4S jjrSS.S\S\S\\   S	S4S jjr SS.S\S\\   S\\   S	S4S jjr!SS.S\S\S\\   S	S4S jjr"SS.S\S\\#   S\\   S	S4S  jjr$SS.S\S\#S\\   S	S4S! jjr%SS.S\S\\   S\\   S	S4S" jjr&SS.S\S\S\\   S	S4S# jjr'S\S\\   S\(\)\\#S4   S$\*S\S	S4S% jr+SS.S\S\(\)\\#4   S$\*S\\   S	S4
S& jjr,SS.S\S\(\)\\#S4   S$\*S\\   S	S4
S' jjr-SS.S\S\.S\\   S	S4S( jjr/SS.S\S\\.   S\\   S	S4S) jjr0S\S\\1\2      S*\S\\   S\S\\\2      S+\S	S4S, jr3SSSS-.S\S\1\2   S*\S\\   S\\\2      S+\S	S4S. jjr4SSSS-.S\S\\1\2      S*\S\\   S\\\2      S+\S	S4S/ jjr5\SSS0.S1\6S\\   S\\   S	\4S2 jj5       r7\SSSS3.S4\8S\\   S\\   S+\S	\4
S5 jj5       r9\SSSS3.S4\:S\\   S\\   S+\S	\4
S6 jj5       r;S7r<g)9	ParamDict<   zG
A helper dict to construct GET params and POST data in common pattern
_dataNdatac                     Uc  0 U l         g [        U[        5      (       a   UR                   R                  5       U l         g 0 U l         [	        UR                  5       5       H  u  p#U R                  X#5        M     g r.   )r5   
isinstancer3   copylistitemsput)selfr6   kvs       r!   __init__ParamDict.__init__C   sX     <DJi((*DJDJTZZ\* +r$   r(   valuer   c                      X R                   U'   g r.   r5   )r=   r(   rB   s      r!   __setitem__ParamDict.__setitem__Q   s    

3r$   c                     U R                   U	 g r.   rD   r=   r(   s     r!   __delitem__ParamDict.__delitem__T   s    JJsOr$   c                      U R                   U   $ r.   rD   rH   s     r!   __getitem__ParamDict.__getitem__W   s    zz#r$   c                 ,    [        U R                  5      $ r.   )lenr5   r=   s    r!   __len__ParamDict.__len__Z   s    4::r$   c                 ,    [        U R                  5      $ r.   )iterr5   rP   s    r!   __iter__ParamDict.__iter__]   s    DJJr$   memoc                 $    [        U 5      " U 5      $ r.   )type)r=   rW   s     r!   __deepcopy__ParamDict.__deepcopy__`   s    Dz$r$   r)   c                 2    [        [        X5      < S35      $ )Nz is required)	TypeErrorr,   )clsr(   r)   s      r!   _missing_paramParamDict._missing_parame   s    K36lCDDr$   c                 6    U R                   R                  5       $ r.   )r5   r9   rP   s    r!   to_dictParamDict.to_dicti   s    zz  r$   optionalpreparedefaultc           	         Uc$  U[         L a  U(       a  gU R                  X5      eUnUcO  [        U[        [        [
        45      (       d#  [        [        X5      < S[        U5       35      e[        U5      nOYU" U5      n[        U[        [        [
        45      (       d&  [        [        X5      < SU S[        U5       35      e[        U5      nX0R                  U'   g)a  
Associate a key with a value

The put operation is ignored if the value is None and optional is True.
An exception is raised if the value is None but optional is False.

:param key: the key name.
:param value: the value or None if empty.
:param param: the parameter name.
:param optional: whether value None is allowed.
:param prepare: callable to convert non-None value to str, int, or float
:param default: default value if value is None.
Nz& expect str, int, or float instead of z expect z) result in str, int, or float instead of )
r1   r_   r8   strintfloatr]   r,   rY   r5   )r=   r(   r)   rB   rd   re   rf   s          r!   _putParamDict._putl   s    , =("))#55E?ec3%677"3.1 266:5k]D 
 JEENEec3%677"3.1' C66:5k]D 
 JE

3r$   F)r)   rd   re   rf   c                *    U R                  XX$XV5        g r.   )rk   )r=   r(   rB   r)   rd   re   rf   s          r!   r<   ParamDict.put   s     			#ew@r$   r)   c                4    U R                  XUS[        5        g NTrk   rh   r=   r(   rB   r)   s       r!   optional_strParamDict.optional_str       		#eT3/r$   c                4    U R                  XUS[        5        g NFrr   rs   s       r!   required_strParamDict.required_str       		#eUC0r$   c                4    U R                  XUS[        5        g rq   rk   ri   rs   s       r!   optional_intParamDict.optional_int   rv   r$   c                4    U R                  XUS[        5        g rx   r}   rs   s       r!   required_intParamDict.required_int   r{   r$   c                4    U R                  XUS[        5        g rq   rk   rj   rs   s       r!   optional_floatParamDict.optional_float   s     			#eT51r$   c                4    U R                  XUS[        5        g rx   r   rs   s       r!   required_floatParamDict.required_float   s    		#eUE2r$   c                4    U R                  XUS[        5        g rq   rk   _prepare_boolrs   s       r!   optional_boolParamDict.optional_bool   s     			#eT=9r$   c                4    U R                  XUS[        5        g rx   r   rs   s       r!   required_boolParamDict.required_bool   s    		#eUM:r$   unitc                    [        U[        5      (       a  UR                  UR                  5       5      n[        U[        5      (       a+  [        U5      (       d  [        [        X5      < SU< 35      eU R                  XX5[        5        g )Nz expect a finite value: )
r8   r   from_secondstotal_secondsrj   r   
ValueErrorr,   rk   ri   )r=   r(   r)   rB   r   rd   s         r!   _put_durationParamDict._put_duration   sn     eY''%%e&9&9&;<EeU##HUOOC 7::RSXR[\]]		#es3r$   c                *    U R                  XX#S5        g rx   r   r=   r(   rB   r   r)   s        r!   required_durationParamDict.required_duration   s     	3uE:r$   c                *    U R                  XX#S5        g rq   r   r   s        r!   optional_durationParamDict.optional_duration   s     	3uD9r$   c                4    U R                  XUS[        5        g rx   rk   _prepare_pathrs   s       r!   required_pathParamDict.required_path   s     			#eUM:r$   c                4    U R                  XUS[        5        g rq   r   rs   s       r!   optional_pathParamDict.optional_path   s     			#eT=9r$   sepnonemptyc                 X   Uc  U(       a  g U R                  X5      eUc  U Vs/ s H  n[        U5      PM     n	nO!U Vs/ s H  n[        U" U5      5      PM     n	nU(       a  U	(       d  [        [        X5      < S35      eUR	                  U	5      U R
                  U'   g s  snf s  snf )Nz must not be empty)r_   rh   r   r,   joinr5   )
r=   r(   rB   r   r)   rd   re   r   sr;   s
             r!   	_put_listParamDict._put_list   s     =%%c11?%*+USVUE+E.34eS_eE4EC 7::LMNN((5/

3 ,4s   B" B'r)   re   r   c          	      ,    U R                  XX4SXV5        g rx   r   r=   r(   rB   r   r)   re   r   s          r!   required_listParamDict.required_list  s     	s3ugHr$   c          	      ,    U R                  XX4SXV5        g rq   r   r   s          r!   optional_listParamDict.optional_list$  s     	s3tWGr$   r+   hashc                H    Uc  SnU " 5       nUR                  X!U[        S9  U$ )Nr   )r)   re   )r<   r   )r^   r   r(   r)   ress        r!   	with_hashParamDict.with_hash0  s,     ;Ce?
r$   )r(   r)   r   hashesc          	      L    Uc  SnU " 5       nUR                  X!SU[        US9  U$ )Nr   |r   )r   r   r^   r   r(   r)   r   r   s         r!   with_hashesParamDict.with_hashes?  s4     ;Ce#s%Zbc
r$   c          	          Uc  SnU " 5       nUS:X  a  UR                  USUS9  U$ UR                  UUSU[        US9  U$ )Nr   allro   r   r   )r<   r   r   r   s         r!   with_hashes_or_allParamDict.with_hashes_or_allO  sc     ;CeU?GGCeG, 
 &!   
r$   rD   r.   )=__name__
__module____qualname____firstlineno____doc__r   rh   __annotations__r   r
   r   r@   rE   rI   rL   ri   rQ   r	   rU   r   rZ   __copy__classmethodr]   r_   rb   r1   bool	PrepareFnrk   r<   rt   ry   r~   r   rj   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes__r0   r$   r!   r3   r3   <   s    S> -1wsCx() s  3  4  s t s s   (3-   $sCx.!9  T   HE EXc] Ey E E!c3h ! -12 2  }2  	2 
 2  )C.)2  2  
2 r  $,0
A
A 
A
 }
A 
A )C.)
A 
A 

A VZ 0 0HSM 0Xc] 0^b 0 LP 1 1C 18C= 1TX 1 VZ 0 0HSM 0Xc] 0^b 0 LP 1 1C 18C= 1TX 1 KO22'2:B3-2	2
 PT 3# 3e 3x} 3X\ 3 JN::'~:9A#:	:
 NR ; ;T ;Xc] ;VZ ;44 }4 YUD01	4
 4 4 
4,  $;; YU*+; 	; }; 
;   $:: YUD01: 	: }: 
:  $;; ;
 }; 
;  $::  :
 }: 
:** $* 	*
 }* * )A,'* * 
*@  $*.
I
I {
I 	
I }
I )A,'
I 
I 

I$  $*.
H
H $
H 	
H }
H )A,'
H 
H 

H 
 "# c]	
 } 
  
 "# c]	
 }  
  
 "# c]	
 }  
 r$   r3   bc                 *    [        U 5      (       a  S$ S$ )zA
Convert boolean values to "true" or "false" string in lowercase
truefalse)r   )r   s    r!   r   r   j  s     !WW6)')r$   pc                 N    [         R                  " U 5      R                  SS5      $ )z!
Convert path-like object to str
\/)osfsdecodereplace)r   s    r!   r   r   q  s     ;;q>!!$,,r$   )+r   redatetimer   mathr   typingr   r   r   r   r	   r
   r   r   r   r   r   typing_extensionsr   aioqbt.bittorrentr   r   r   r   aioqbt.chronor   aioqbt.typingr   r   rj   rh   r   compileASCIIr%   r'   r,   r1   r3   r   r   r   r0   r$   r!   <module>r      s    	 	      # S S " !CLaS%s
++,	,bhh7Ps Ps PS # 3 ( ksCx( k\	*T *c *-W - -r$   