
    (phF2              
       2   S r SSKrSSKrSSKr\R                  \\	\
\4   r\R                  \R                  \   \R                  \\4   \R                  \\4   \4   r\R"                  \\4   r " S S5      rS\R(                  S\R                  \\R,                  \R                  \R                  \\4         4   4S jrS\R(                  S\4S jrS\R(                  S\4S	 jrSS\R4                  S
\S\4S jjrS\R(                  S\S\4S jrg)z

uritemplate.variable
====================

This module contains the URIVariable class which powers the URITemplate class.

What treasures await you:

- URIVariable class

You see a hammer in front of you.
What do you do?
>

    Nc                      \ rS rSrSrSrSrS\4S jrS\4S jr	S\4S	 jr
SS jrSS jrS\S\S\S\R                   \   S\R                   \   4
S jrS\S\S\S\R                   \   S\R                   \   4
S jrS\S\S\S\R                   \   S\R                   \   4
S jrS\S\S\S\R                   \   S\R                   \   4
S jr SS\R                   \   S\R.                  \\4   4S jjrSrg
)URIVariable   a  This object validates everything inside the URITemplate object.

It validates template expansions and will truncate length as decided by
the template.

Please note that just like the :class:`URITemplate <URITemplate>`, this
object's ``__str__`` and ``__repr__`` methods do not return the same
information. Calling ``str(var)`` will return the original variable.

This object does the majority of the heavy lifting. The ``URITemplate``
object finds the variables in the URI and then creates ``URIVariable``
objects.  Expansions of the URI are handled by each ``URIVariable``
object. ``URIVariable.expand()`` returns a dictionary of the original
variable and the expanded value. Check that method's documentation for
more information.

)
+#./;?&|!@z:/?#[]@!$&'()*+,;=varc                     Xl         SU l        SU l        / U l        / U l        0 U l        U R                  5         U R                  5         g )N )originaloperatorsafe	variablesvariable_namesdefaultsparse
post_parse)selfr   s     G/var/www/html/venv/lib/python3.13/site-packages/uritemplate/variable.py__init__URIVariable.__init__6   sE     	  	 ,.DF

    returnc                     SU -  $ )NzURIVariable(%s) r   s    r   __repr__URIVariable.__repr__I   s     4''r   c                     U R                   $ N)r   r#   s    r   __str__URIVariable.__str__L   s    }}r   Nc                    U R                   nU R                   S   [        R                  ;   a#  U R                   S   U l        U R                   SS nU R                  [        R                  SS ;   a  [        R                  U l        UR                  S5      nU H  nSnUnSU;   a  [        UR                  SS5      5      u  pTSnUR                  S5      (       a  S	nUSS
 nSnSU;   a(  [        UR                  SS5      5      u  pX[        U5      nU(       a  X@R                  U'   U R                  R                  XVUS.45        M     U R                   V	V
s/ s H  u  pU	PM	     sn
n	U l        gs  sn
n	f )zyParse the variable.

This finds the:
    - operator,
    - set of safe characters,
    - variables, and
    - defaults.

r      N   ,=F*T:)explodeprefix)r   r   	operatorsr   reservedr   splittupleendswithintr   r   appendr   )r   var_list_strvar_listr   default_valnamer2   r3   
prefix_strvarname_s              r   r   URIVariable.parseO   sM    }}=={444 MM!,DM==,L==K11"155#,,DI%%c*CKDcz$)#))C*;$<!G}}S!!CRy&*Fd{#(C);#< Z&1d#NN!!f=>' . <@>>J><Gw>JJs   E2c                 T   SU l         U R                  =U l        U l        U R                  S:X  a  SU l        U R                  S;   a  SU l        U R                  S:X  a  SU l        U R                  S:X  a  SU l        SU l        U R                  S;   a  [        R
                  U l         g	g	)
zSet ``start``, ``join_str`` and ``safe`` attributes.

After parsing the variable, we need to set up these attributes and it
only makes sense to do it in a more easily testable way.
r   r   )r   r   r   r-   r   r   r   )r   r   N)r   r   startjoin_strr   r5   r#   s    r   r   URIVariable.post_parse|   s     	%)]]2
T]==CDJ==N*DM==CDJ==CDJDM==J&#,,DI 'r   r>   valuer2   r3   c                   ^^ Uc  g[        U5      u  pVU R                  m[        U5      (       a  U(       d  U(       d  g[        R                  " [        R
                  [           U5      nU(       a&  U R                  R                  UU4S jU 5       5      $ SR                  U4S jU 5       5      nT SU 3$ [        U5      (       d  U(       a  U(       d  g[        R                  " [        R                  [        [        4   U5      nU=(       d    [        UR                  5       5      nU(       a%  U R                  R                  U4S jU 5       5      $ SR                  U4S jU 5       5      nT SU 3$ U(       aD  [        R                  " [        R                  U5      nU(       a  USU OUnT S[        UT5       3$ TS-   $ )z/Expansion method for the '?' and '&' operators.Nc              3   F   >#    U  H  nT S [        UT5       3v   M     g7fr.   Nquote.0vr>   r   s     r   	<genexpr>/URIVariable._query_expansion.<locals>.<genexpr>   s&      *8=1tfAeAtn-.s   !r-   c              3   <   >#    U  H  n[        UT5      v   M     g 7fr'   rK   rN   rO   r   s     r   rP   rQ            ?Aq$   r.   c              3   ^   >#    U  H"  u  p[        UT5       S [        UT5       3v   M$     g7frJ   rK   rN   krO   r   s      r   rP   rQ      s/      *EJTQuQ~&aa'78U   *-c              3   ^   >#    U  H"  u  p[        UT5       S [        UT5       3v   M$     g7f)r-   NrK   rW   s      r   rP   rQ      s/      !EJTQuQ~&aa'78UrY   )is_list_of_tuplesr   	list_testtcastSequenceScalarVariableValuerE   join	dict_testMappingstrsorteditemsTextrL   )r   r>   rG   r2   r3   tuplesrf   r   s    `     @r   _query_expansionURIVariable._query_expansion   s    =)%0yyUFFF1::&9:EBE}})) *8=*    ? ??q((UvFF199S*=%=>FE2VEKKM2E}})) *EJ*    !EJ!  q((FF1665)E&,E'6N%EV1U5$/011czr   c                   ^^ U R                   nU R                  mUb4  [        U[        [        [
        [        45      (       d  [        U5      S:X  a  g[        U5      u  pg[        U5      (       av  U(       do  U(       d  Sn[        R                  " [        R                  [           U5      nU Vs/ s H  oc  M  [        UT5      PM     n	nU	(       a  UR                  U	5      $ S$ [!        U5      (       d  U(       a  [        R                  " [        R"                  [        [        4   U5      nU=(       d    [%        UR'                  5       5      nSmU(       d  SmSnUR                  UU4S jU 5       5      n
U
(       a  U
$ S$ [        R                  " [        R(                  U5      nU(       a  USU OUn[        UT5      $ s  snf )zCLabel and path expansion method.

Expands for operators: '/', '.'

Nr   r-   %s=%s%s,%sc              3   h   >#    U  H'  u  pUc  M
  T[        UT5      [        UT5      4-  v   M)     g 7fr'   rK   )rN   rX   rO   
format_strr   s      r   rP   4URIVariable._label_path_expansion.<locals>.<genexpr>   s5      %!DA >
eAtneAtn==!   	2"2)rE   r   
isinstancerd   r9   floatcomplexlenr[   r\   r]   r^   r_   r`   rL   ra   rb   rc   re   rf   rg   )r   r>   rG   r2   r3   rE   rh   rf   rO   	fragmentsexpandedro   r   s              @@r   _label_path_expansion!URIVariable._label_path_expansion   s`    ==yy=53UG"<==E
a)%0UFFF1::&9:EBE16HAq$IH/88==+BdBUvFF199S*=%=>FE2VEKKM2E J$
}} %!% H
  (81T1qvvu%"(gveUD!!) Is   0G:Gc                   ^^	 U R                   nU R                  m	Uc  gU R                  S:X  a  Sn[        U5      u  pg[	        U5      (       a  U(       d|  [
        R                  " [
        R                  [           U5      nU(       a'  UR                  UU	4S jU 5       5      nU(       a  U$ S$ SR                  U	4S jU 5       5      nT SU 3$ [        U5      (       d  U(       a  [
        R                  " [
        R                  [        [        4   U5      nU=(       d    [        UR                  5       5      nU(       a  UR                  U	4S jU 5       5      $ SR                  U	4S	 jU 5       5      nT SU 3$ [
        R                  " [
        R                  U5      nU(       a  USU OUnU(       a  T S[!        UT	5       3$ T$ )
z"Expansion method for ';' operator.Nr   r   c              3   N   >#    U  H  oc  M  T S[        UT5       3v   M     g 7fNr.   rK   rM   s     r   rP   3URIVariable._semi_path_expansion.<locals>.<genexpr>  s)      )8=1.tfAeAtn-.s   %%r-   c              3   <   >#    U  H  n[        UT5      v   M     g 7fr'   rK   rS   s     r   rP   r}     rT   rU   r.   c              3   h   >#    U  H'  u  pUc  M
  [        UT5       S[        UT5       3v   M)     g 7fr|   rK   rW   s      r   rP   r}     s8      % % 9uQ~&aa'78 %rq   c              3   h   >#    U  H'  u  pUc  M
  [        UT5       S[        UT5       3v   M)     g 7f)Nr-   rK   rW   s      r   rP   r}     s8      $ % 9uQ~&aa'78 %rq   )rE   r   r   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rL   )
r   r>   rG   r2   r3   rE   rh   rf   rw   r   s
    `       @r   _semi_path_expansion URIVariable._semi_path_expansion   s    ==yy===CH)%0UFFF1::&9:EBE#== )8=)  $,x55 ? ??q((UvFF199S*=%=>FE2VEKKM2E}} % %%   88 $ %$ 
 q
++qvvu%"(gveV1U5$/011r   c                   ^ ^ Uc  g [        U5      u  pV[        U5      (       aN  U(       dG  [        R                  " [        R                  [
           U5      nSR                  U 4S jU 5       5      $ [        U5      (       d  U(       a{  [        R                  " [        R                  [        [
        4   U5      nU=(       d    [        UR                  5       5      nU(       a  SOSmSR                  UU 4S jU 5       5      $ [        R                  " [        R                  U5      nU(       a  US U OUn[        UT R                  5      $ )Nr-   c              3   P   >#    U  H  n[        UTR                  5      v   M     g 7fr'   rL   r   )rN   rO   r   s     r   rP   0URIVariable._string_expansion.<locals>.<genexpr>7  s     ?AE!TYY//s   #&rl   rm   c              3      >#    U  H6  u  pT[        UTR                  5      [        UTR                  5      4-  v   M8     g 7fr'   r   )rN   rX   rO   ro   r   s      r   rP   r   >  s:      !DA eAtyy15DII3FGG!s   >A)r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rL   r   )r   r>   rG   r2   r3   rh   rf   ro   s   `      @r   _string_expansionURIVariable._string_expansion)  s     =)%0UFFF1::&9:EBE88????UvFF199S*=%=>FE2VEKKM2E$+J88 !  
 qvvu%"(gveUDII&&r   var_dictc                 ~   / nUc  U R                   U R                   0$ U R                   H  u  p4UR                  US5      nU(       d$  US:w  a  X0R                  ;   a  U R                  U   nUc  MG  SnU R                  S;   a  U R
                  nOFU R                  S;   a  U R                  nO)U R                  S:X  a  U R                  nOU R                  nU" X5US   US   5      nUc  M  UR                  U5        M     SnU(       a(  U R                  U R                  R                  U5      -   nU R                   U0$ )a  Expand the variable in question.

Using ``var_dict`` and the previously parsed defaults, expand this
variable and subvariables.

:param dict var_dict: dictionary of key-value pairs to be used during
    expansion
:returns: dict(variable=value)

Examples::

    # (1)
    v = URIVariable('/var')
    expansion = v.expand({'var': 'value'})
    print(expansion)
    # => {'/var': '/value'}

    # (2)
    v = URIVariable('?var,hello,x,y')
    expansion = v.expand({'var': 'value', 'hello': 'Hello World!',
                          'x': '1024', 'y': '768'})
    print(expansion)
    # => {'?var,hello,x,y':
    #     '?var=value&hello=Hello%20World%21&x=1024&y=768'}

Nr   )r	   r   )r   r   r
   r2   r3   )r   r   getr   r   rx   ri   r   r   r:   rD   rE   ra   )r   r   return_valuesr>   optsrG   rw   	expansions           r   expandURIVariable.expandG  s   : MM4==11..JDLLt,EUb[T]]-Bd+}H}}
* 66	*, 11	#% 55	 22	 d9otH~NH#$$X.+ ). JJ!3!3M!BBEu%%r   )r   rE   r   r   r   rD   r   r   )r    Nr'   )__name__
__module____qualname____firstlineno____doc__r4   r5   rd   r   r$   r(   r   r   VariableValueboolr]   Optionalr9   ri   rx   r   r   VariableValueDictrc   r   __static_attributes__r"   r   r   r   r      s   $ CI#HC &(# ( +KZ-*-- - 	-
 

3- 
C-^0"0" 0" 	0"
 

30" 
C0"d55 5 	5
 

35 
C5n'' ' 	'
 

3' 
C'> 9=;&

#45;&	
38	;& ;&r   r   rG   r    c                 ~    U (       a2  [        U [        [        45      (       a  [        S U  5       5      (       d  gSU 4$ )Nc              3   l   #    U  H*  n[        U[        5      =(       a    [        U5      S :H  v   M,     g7f)r,   N)rr   r7   ru   )rN   r]   s     r   rP   $is_list_of_tuples.<locals>.<genexpr>  s'     GA:a'7CFaK7s   24)FNT)rr   listr7   allrG   s    r   r[   r[     s6     %$//GGGG;r   c                 .    [        U [        [        45      $ r'   )rr   r   r7   r   s    r   r\   r\     s    edE]++r   c                 V    [        U [        [        R                  R                  45      $ r'   )rr   dictcollectionsabcMutableMappingr   s    r   rb   rb     s    edKOO$B$BCDDr   encodingc                 R    [        U [        5      (       a  U R                  U5      $ U $ r'   )rr   rd   encode)rG   r   s     r   _encoder     s#    %||H%%Lr   r   c                     [        U [        [        45      (       d  [        U 5      n [        R                  R                  [        U 5      U5      $ r'   )rr   rd   bytesurllibr   rL   r   )rG   r   s     r   rL   rL     s7    ec5\**E
<<gend33r   )zutf-8)r   collections.abcr   typingr]   urllib.parser   Unionr9   rs   rt   rd   r`   r_   rc   Tupler   Dictr   r   Anyr   r   r[   r\   rb   AnyStrr   r   rL   r"   r   r   <module>r      sL      ggc5'367 JJ"#IIc&&'GGC$$% FF3-. c& c&L
55
WWT1::ajj6I1I)JKLLM
,QUU ,t ,EQUU Et E188 s  4 4c 4c 4r   