
    XhyC                       d Z ddlmZ ddlZddlmZmZmZ ddlm	Z	 ddl
mZ erddlmZmZ  G d	 d
e      Z G d d      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d d e      Z G d! d"e      Z G d# d$e      Zy)%z=Process URI templates per http://tools.ietf.org/html/rfc6570.    )annotationsN)AnyTYPE_CHECKINGcast   )Charset)Variable)IterableMappingc                  ,    e Zd ZU dZded<   ddZddZy)	ExpansionFailedErrorz&Exception thrown when expansions fail.strvariablec                    || _         y Nr   )selfr   s     K/var/www/html/myenv/lib/python3.12/site-packages/uri_template/expansions.py__init__zExpansionFailedError.__init__   s	         c                     d| j                   z   S )Convert to string.zBad expansion: r   r   s    r   __str__zExpansionFailedError.__str__   s     4==00r   N)r   r   returnNoner   r   )__name__
__module____qualname____doc____annotations__r   r    r   r   r   r      s    0M!1r   r   c                      e Zd ZdZddZedd       Zedd       ZddZddZ	ddZ
ddZdd	Z	 	 	 	 	 	 	 	 	 	 dd
Z	 	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 	 	 ddZddZddZy)	Expansionz`
    Base class for template expansions.

    https://tools.ietf.org/html/rfc6570#section-3
    c                     y r   r#   r   s    r   r   zExpansion.__init__#   s    r   c                    g S )z$Get all variables in this expansion.r#   r   s    r   	variableszExpansion.variables&   	     	r   c                    g S )z1Get the names of all variables in this expansion.r#   r   s    r   variable_nameszExpansion.variable_names+   r)   r   c                   d}d}|t        |      k  r||   }||v r||z  }n|rWd|k(  rR|dz   t        |      k  rA||dz      t        j                  v r)||dz      t        j                  v r||||dz    z  }|dz  }nT|j                  d      }|D ]>  }|dt        j                  t	        |dz           z   t        j                  |dz     z   z  }@ |dz  }|t        |      k  r|S )	z"Encode a string into legal values. r   %   r      utf8   )lenr   	HEX_DIGITencodeint)	r   valuelegalpct_encodedoutputindex	codepointr1   bytes	            r   _encodezExpansion._encode0   s   s5z!eIU")#3)#3	SZ/UQY'7+<+<<UQY'7+<+<<%eai00
 ''/  eDcG$5$5c$)n$EEHYHYZ^acZcHdddFeQJE s5z! r   c                D    | j                  |t        j                  d      S )!Encode a value into uri encoding.F)r>   r   
UNRESERVEDr   r7   s     r   _uri_encode_valuezExpansion._uri_encode_valueE   s    ||E7#5#5u==r   c                    |r;| j                  t        |      t        j                  t        j                  z   d      S dS )z)Encode a variable name into uri encoding.Tr-   )r>   r   r   rA   RESERVED)r   names     r   _uri_encode_namezExpansion._uri_encode_nameI   s2    X\t||CIw'9'9G<L<L'LdSeceer   c                    |r||z   |z   S |S )zJoin a prefix to a value.r#   )r   prefixjoinerr7   s       r   _joinzExpansion._joinM   s    F?U**r   c           	         |j                   rE|st        t        |            | j                  ||| j	                  |d|j                                S | j                  ||| j	                  |            S )z%Encode a string value for a variable.N)
max_lengthr   r   rK   rC   )r   r   rF   r7   rI   rJ   firsts          r   _encode_strzExpansion._encode_strS   sg    *3x=99::ffd.D.DUK_HL_L_E`.abbzz&&$*@*@*GHHr   c	           	        |j                   rdnd}|j                  r#| j                  |      }|r|s|dz   |z   dz   n|}n"| j                  |d| j                  |            }| j	                  |t        |      ||||d      S )"Encode a dict item for a variable.=,[].F)explodearrayrG   rK   _encode_varr   	r   r   rF   keyitemdelimrI   rJ   rN   s	            r   _encode_dict_itemzExpansion._encode_dict_item[   s     "))NN((-D5;EfslT)C/PTFZZT-B-B3-GHF#c(D%QVWWr   c	           	         |j                   r/|r|dz   t        |      z   dz   nd}| j                  |d||||d      S | j                  |||||dd      S )"Encode a list item for a variable.rT   rU   r-   FrV   )rX   r   rY   	r   r   rF   r;   r\   r]   rI   rJ   rN   s	            r   _encode_list_itemzExpansion._encode_list_itemf   s`     NN9?Vc\CJ.4bF##Hb$vvuUU$eVS%PPr   c                J   t        |t              r| j                  ||||||      S t        |t        j                  j
                        rdt        |      rX|j                         D cg c]  }| j                  |||||   ||||       }	}|j                  |	D 
cg c]  }
|
|
	 c}
      S yt        |t        j                  j                        rat        |      rUt        |      D 
cg c]  \  }}
| j                  ||||
||||       }	}}
|j                  |	D 
cg c]  }
|
|
	 c}
      S yt        |t              r-| j                  ||t        |      j                         |||      S | j                  ||t        |      |||      S c c}w c c}
w c c}
}w c c}
w )zEncode a variable.N)
isinstancer   rO   collectionsabcr   r3   keysr^   joinSequence	enumeraterb   boollower)r   r   rF   r7   r]   rI   rJ   rN   r[   encoded_itemsr\   r;   s               r   rY   zExpansion._encode_varn   s    uc"##HdE665QQ 7 78E
,1JJL!:%( "&!7!7$USVZY^`fhnpu!v !: !:zzM"XDdFV4"XYY 8 89E
4=e4D!F%0UD "&!7!7$tUZ\bdjlq!r !F !FzzM"XDdFV4"XYY%##HdCJ4D4D4FPVX]^^##HdCJPUVV!:"X!F"Xs$   ("FF#F,"F F (F c                     y)zExpand values.Nr#   r   valuess     r   expandzExpansion.expand   s    r   c                     y)zPerform partial expansion.r-   r#   ro   s     r   partialzExpansion.partial   s    r   N)r   r   r   zIterable[Variable]r   zIterable[str])r7   r   r8   r   r9   rk   r   r   r7   r   r   r   )rF   z	str | intr   r   )rI   r   rJ   r   r7   r   r   r   )r   r	   rF   r   r7   r   rI   r   rJ   r   rN   rk   r   r   r   r	   rF   r   r[   z	int | strr\   r   r]   r   rI   r   rJ   r   rN   rk   r   
str | Noner   r	   rF   r   r;   r6   r\   r   r]   r   rI   r   rJ   r   rN   rk   r   rx   )rS   r-   rR   T)r   r	   rF   r   r7   r   r]   r   rI   r   rJ   r   rN   rk   r   rx   rp   Mapping[str, Any]r   rx   rp   r{   r   r   )r   r   r    r!   r   propertyr(   r+   r>   rC   rG   rK   rO   r^   rb   rY   rq   rs   r#   r   r   r%   r%      s        *>fI	X!$	X.1	X;>	XGK	XQ[	XQ!$Q.1Q;>QGKQQ[Q Z^WW.1W@CWRVWcmW,r   r%   c                  @     e Zd ZU dZded<   d fdZddZd	dZ xZS )
LiteralzS
    A literal expansion.

    https://tools.ietf.org/html/rfc6570#section-3.1
    r   r7   c                0    t         |           || _        y r   )superr   r7   )r   r7   	__class__s     r   r   zLiteral.__init__   s    
r   c                z    | j                  | j                  t        j                  t        j                  z   d      S )zPerform exansion.T)r>   r7   r   rA   rE   ro   s     r   rq   zLiteral.expand   s+    ||DJJ););g>N>N)NQUVVr   c                    | j                   S )r   )r7   r   s    r   r   zLiteral.__str__   s    zzr   )r7   r   r   r   rz   r   )	r   r   r    r!   r"   r   rq   r   __classcell__r   s   @r   r   r      s     JWr   r   c                       e Zd ZU dZdZdZdZdZdZde	d<   dZ
de	d<   d fdZedd	       Zedd
       ZddZddZddZddZ xZS )ExpressionExpansionzd
    Base class for expression expansions.

    https://tools.ietf.org/html/rfc6570#section-3.2
    r-   rS   list[Variable]varsr   trailing_joinerc                    t         |           |r|d   dv r|d   | _        |d d }|j                  d      D cg c]  }t	        |       c}| _        y c c}w )N)rS   rV   /;&rS   )r   r   r   splitr	   r   )r   r(   varr   s      r   r   zExpressionExpansion.__init__   sV    9R=,EE#,R=D !#2I.7ooc.BCsXc]C	Cs   Ac                ,    t        | j                        S )zGet all variables.)listr   r   s    r   r(   zExpressionExpansion.variables   s     DIIr   c                T    | j                   D cg c]  }|j                   c}S c c}w )zGet names of all variables.)r   rF   r   r   s     r   r+   z"ExpressionExpansion.variable_names   s      %)II.S...s   %c                Z    | j                  || j                  |j                        |      S )Expand a single variable.)rY   rG   rF   r   r   r7   s      r   _expand_varzExpressionExpansion._expand_var   s'    $*?*?*NPUVVr   c                R   g }| j                   D ]Q  }|j                  |j                  |j                        }|,| j	                  ||      }|A|j                  |       S |rC| j                  s| j                  nd| j                  j                  |      z   | j                  z   S y)z*Expand all variables, skip missing values.Nr-   )
r   getr[   defaultr   appendr   output_prefix
var_joinerrh   )r   rp   expanded_varsr   r7   expanded_vars         r   rq   zExpressionExpansion.expand   s    #%99 	7CJJsww4E!#//U; ,!((6	7 040D0DT''2QUQ`Q`QeQefsQtt**+ ,r   c                   g }g }g }| j                   D ]  }|j                  |j                  |j                        }|>| j	                  ||      }|@|r|j                  d|f       g }|j                  |       i|r|j                  |df       g }|j                  |        |r|j                  |df       |r|j                  d|f       d}d}	t        |      D ]  \  }
\  }}|
t        |      dz
  k(  }|rI||	r| j                  s| j                  nd| j                  j                  |      z   | j                  z   z  }n||	r|s| j                  n|s| j                  nddz   |	r| j                  n| j                  z   dj                  t        d|      D cg c]  }t        |       c}      z   |s| j                   ndz   dz   z  }d	}	 |S c c}w )
z=Expand all variables, replace missing values with expansions.Nr-   Tr   {rS   r   }F)r   r   rF   r   r   r   rj   r3   r   r   r   rh   operatorpartial_operatorr   r   partial_joiner)r   rp   r   missing_varsresultr   r7   r   r:   rN   r;   expandedmissinglasts                 r   rs   zExpressionExpansion.partial   s   #%')KM99 	)CJJsxx5E!#//U; ,$t\&:;')!((6!MM=$"78$&M##C(	) MM=$/0MM4./*3F*; 
	&E&Hgc&kAo.D5$BVBVD..^`!__11(;<>B>R>RS T 5D..eiT__pr !6;DMM$BWBWY XX4@PRY;Z&[Cs3x&[\] ;?d11RI LOO P E
	  '\s   Gc           	         d| j                   z   dj                  | j                  D cg c]  }t        |       c}      z   | j                  z   dz   S c c}w )r   r   rS   r   )r   rh   r   r   r   r   s     r   r   zExpressionExpansion.__str__   sG    dmm#chhDII/NSC/N&OORVRfRffillm/Ns   A
r(   r   r   r   rt   ru   r   r	   r7   r   r   rx   rz   r|   r   )r   r   r    r!   r   r   r   r   r   r"   r   r   r}   r(   r+   r   rq   rs   r   r   r   s   @r   r   r      sy     HMJN
OSD   / /W%Nnr   r   c                  $     e Zd ZdZd fdZ xZS )SimpleExpansionz`
    Simple String expansion {var}.

    https://tools.ietf.org/html/rfc6570#section-3.2.2

    c                $    t         |   |       y r   r   r   r   r(   r   s     r   r   zSimpleExpansion.__init__
      #r   r   )r   r   r    r!   r   r   r   s   @r   r   r     s    $ $r   r   c                  4     e Zd ZdZdZdZd fdZddZ xZS )ReservedExpansionz[
    Reserved Expansion {+var}.

    https://tools.ietf.org/html/rfc6570#section-3.2.3
    +,+c                *    t         |   |dd         y Nr   r   r   s     r   r   zReservedExpansion.__init__      12'r   c                f    | j                  |t        j                  t        j                  z   d      S )r@   T)r>   r   rA   rE   rB   s     r   rC   z#ReservedExpansion._uri_encode_value  s&    ||EG$6$69I9I$IDQQr   r   rv   )	r   r   r    r!   r   r   r   rC   r   r   s   @r   r   r     s      H(Rr   r   c                  ,     e Zd ZdZdZdZd fdZ xZS )FragmentExpansionz[
    Fragment Expansion {#var}.

    https://tools.ietf.org/html/rfc6570#section-3.2.4
    #c                $    t         |   |       y r   r   r   s     r   r   zFragmentExpansion.__init__*  r   r   r   r   r   r    r!   r   r   r   r   r   s   @r   r   r           HM$ $r   r   c                  @     e Zd ZdZdZdZdZdZdZd fdZ	ddZ
 xZS )LabelExpansionzh
    Label Expansion with Dot-Prefix {.var}.

    https://tools.ietf.org/html/rfc6570#section-3.2.5
    rV   c                *    t         |   |dd         y r   r   r   s     r   r   zLabelExpansion.__init__;  r   r   c                    | j                  || j                  |j                        ||j                  rd      S d      S r   rV   rS   r]   rY   rG   rF   rW   r   s      r   r   zLabelExpansion._expand_var>  Q    $*?*?*NPU.6.>.>s   J 	JDG   J 	Jr   r   r   r   r   r    r!   r   r   r   r   r   r   r   r   r   s   @r   r   r   .  /     HMJN(Jr   r   c                  @     e Zd ZdZdZdZdZdZdZd fdZ	ddZ
 xZS )PathExpansionz_
    Path Segment Expansion {/var}.

    https://tools.ietf.org/html/rfc6570#section-3.2.6
    r   c                *    t         |   |dd         y r   r   r   s     r   r   zPathExpansion.__init__Q  r   r   c                    | j                  || j                  |j                        ||j                  rd      S d      S )r   r   rS   r   r   r   s      r   r   zPathExpansion._expand_varT  r   r   r   r   r   r   s   @r   r   r   D  r   r   r   c                       e Zd ZdZdZdZdZdZdZd fdZ	d	 fdZ
	 	 	 	 	 	 	 	 	 	 d
dZ	 	 	 	 	 	 	 	 	 	 ddZddZ xZS )PathStyleExpansionzg
    Path-Style Parameter Expansion {;var}.

    https://tools.ietf.org/html/rfc6570#section-3.2.7
    r   c                *    t         |   |dd         y r   r   r   s     r   r   zPathStyleExpansion.__init__g  r   r   c                    |j                   r|r/|r|dz   |z   dz   n|}n|j                  r| j                  |d|      }t        |   ||||||      S )zEncode a string for a variable.rT   rU   rV   )rX   rW   rK   r   rO   )r   r   rF   r7   rI   rJ   rN   r   s          r   rO   zPathStyleExpansion._encode_strj  sY    NN7=#,s2DZZT2Fw"8T5&&%PPr   c	           	        |j                   rB|r|r|dz   |z   dz   n|}|r|s|dz   | j                  |      z   dz   }nZ| j                  |      }nH|j                  r|s| j                  |d|      nd}n$| j                  |d| j                  |            }d}| j	                  ||j                   s| j                  |      nd||||d      S )rQ   rT   rU   rV   r-   rS   F)rX   rG   rW   rK   rY   rZ   s	            r   r^   z$PathStyleExpansion._encode_dict_items  s     NN7=#,s2Du 3,)>)>s)CCcI..s3;@TZZT2rFZZT-B-B3-GHFFX^^$*?*?*Dbdfj %vvu> 	>r   c	           	         |j                   r1|r|r|dz   |z   dz   n|}| j                  |t        |      ||||d      S | j                  ||||||j                  rdd      S dd      S )r`   rT   rU   FrR   rV   )rX   rY   r   rW   ra   s	            r   rb   z$PathStyleExpansion._encode_list_item  sy     NN7=#,s2D##Hc%j$vvW\]]$eVXM]M]Sinoodginoor   c                0   |j                   r.| j                  || j                  |j                        |d      S | j                  || j                  |j                        |d      }|r!| j                  |j                        dz   |z   S |j                  S )r   r   r   rS   rR   rW   rY   rG   rF   r   s      r   r   zPathStyleExpansion._expand_var  s    ##Hd.C.CHMM.RTYad#ee  4+@+@+OQV^a bHM%%hmm4s:UBaT\TaTaar   r   )r   r	   rF   r   r7   r   rI   r   rJ   r   rN   rk   r   r   rw   ry   r   )r   r   r    r!   r   r   r   r   r   r   rO   r^   rb   r   r   r   s   @r   r   r   Z  s     HMJN(Q>!$>.1>;>>GK>Q[>$p!$p.1p;>pGKpQ[pbr   r   c                  @     e Zd ZdZdZdZdZdZdZd fdZ	ddZ
 xZS )FormStyleQueryExpansionzc
    Form-Style Query Expansion {?var}.

    https://tools.ietf.org/html/rfc6570#section-3.2.8
    ?r   c                $    t         |   |       y r   r   r   s     r   r   z FormStyleQueryExpansion.__init__  r   r   c                   |j                   r.| j                  || j                  |j                        |d      S | j                  || j                  |j                        |d      }|!| j                  |j                        dz   |z   S dS )r   r   r   rS   NrR   r   r   s      r   r   z#FormStyleQueryExpansion._expand_var  s    ##Hd.C.CHMM.RTYad#ee  4+@+@+OQV^a bHMHY%%hmm4s:UBd`ddr   r   r   r   r   s   @r   r   r     s/     HMJN$er   r   c                  ,     e Zd ZdZdZdZd fdZ xZS )FormStyleQueryContinuationzf
    Form-Style Query Continuation {&var}.

    https://tools.ietf.org/html/rfc6570#section-3.2.9
    r   c                $    t         |   |       y r   r   r   s     r   r   z#FormStyleQueryContinuation.__init__  r   r   r   r   r   s   @r   r   r     r   r   r   c                  4     e Zd ZdZdZdZd fdZddZ xZS )CommaExpansionzn
    Label Expansion with Comma-Prefix {,var}.

    Non-standard extension to support partial expansions.
    rS   c                *    t         |   |dd         y r   r   r   s     r   r   zCommaExpansion.__init__  r   r   c                    | j                  || j                  |j                        ||j                  rd      S d      S r   r   r   s      r   r   zCommaExpansion._expand_var  r   r   r   r   	r   r   r    r!   r   r   r   r   r   r   s   @r   r   r     s     HM(Jr   r   c                  4     e Zd ZdZdZdZd fdZddZ xZS )ReservedCommaExpansionzr
    Reserved Expansion with comma prefix {,+var}.

    Non-standard extension to support partial expansions.
    r   rS   c                *    t         |   |dd         y r   r   r   s     r   r   zReservedCommaExpansion.__init__  r   r   c                    | j                  || j                  |j                        ||j                  rd      S d      S r   r   r   s      r   r   z"ReservedCommaExpansion._expand_var  r   r   r   r   r   r   s   @r   r   r     s     HM(Jr   r   )r!   
__future__r   re   typingr   r   r   charsetr   r   r	   collections.abcr
   r   	Exceptionr   r%   r   r   r   r   r   r   r   r   r   r   r   r   r#   r   r   <module>r      s    C "  + +  1
19 
1n nbi ,\n) \n~	$) 	$R+ R$$) $J( J,J' J,9b, 9bxe0 e0$!8 $ J( J&J. Jr   