
    MhyC                       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dS )%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dS )ExpansionFailedErrorz&Exception thrown when expansions fail.strvariablereturnNonec                    || _         d S Nr   )selfr   s     W/var/www/html/test/jupyter/venv/lib/python3.11/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   r   r   r   r   )__name__
__module____qualname____doc____annotations__r   r    r   r   r   r      sM         00MMM! ! ! !1 1 1 1 1 1r   r   c                      e Zd ZdZd.dZed/d            Zed0d            Zd1dZd2dZ	d3dZ
d4dZd5dZd6d Zd7d#Z	 d8d9d(Zd:d+Zd;d,Zd-S )<	Expansionz`
    Base class for template expansions.

    https://tools.ietf.org/html/rfc6570#section-3
    r   r   c                    d S r   r$   r   s    r   r   zExpansion.__init__#   s    r   Iterable[Variable]c                    g S )z$Get all variables in this expansion.r$   r   s    r   	variableszExpansion.variables&   	     	r   Iterable[str]c                    g S )z1Get the names of all variables in this expansion.r$   r   s    r   variable_nameszExpansion.variable_names+   r+   r   valuer   legalpct_encodedboolc                   d}d}|t          |          k     r||         }||v r||z  }n|r`d|k    rZ|dz   t          |          k     rD||dz            t          j        v r-||dz            t          j        v r||||dz            z  }|dz  }nX|                    d          }|D ]@}|dt          j        t	          |dz                     z   t          j        |dz           z   z  }A|dz  }|t          |          k     |S )	z"Encode a string into legal values. r   %   r      utf8   )lenr   	HEX_DIGITencodeint)	r   r/   r0   r1   outputindex	codepointr8   bytes	            r   _encodezExpansion._encode0   s3   s5zz!!eIU"")# 	e3)#3#3	SZZ//UQY'7+<<<UQY'7+<<<%eai00
 ''//  e eDcG$5c$)nn$EEHYZ^acZcHdddFFQJE s5zz!! r   c                D    |                      |t          j        d          S )!Encode a value into uri encoding.F)rB   r   
UNRESERVEDr   r/   s     r   _uri_encode_valuezExpansion._uri_encode_valueE   s    ||E7#5u===r   name	str | intc                    |r;|                      t          |          t          j        t          j        z   d          ndS )z)Encode a variable name into uri encoding.Tr4   )rB   r   r   rE   RESERVED)r   rH   s     r   _uri_encode_namezExpansion._uri_encode_nameI   s4    X\et||CIIw'9G<L'LdSSSceer   prefixjoinerc                    |r||z   |z   S |S )zJoin a prefix to a value.r$   )r   rM   rN   r/   s       r   _joinzExpansion._joinM   s     	+F?U**r   r   r
   firstc           	        |j         rU|st          t          |                    |                     |||                     |d|j                                      S |                     |||                     |                    S )z%Encode a string value for a variable.N)
max_lengthr   r   rP   rG   )r   r   rH   r/   rM   rN   rQ   s          r   _encode_strzExpansion._encode_strS   s     	c :*3x==999::ffd.D.DUK_HL_K_E`.a.abbbzz&&$*@*@*G*GHHHr   key	int | stritemr   delim
str | Nonec	           	        |j         rdnd}|j        r'|                     |          }|r|s|dz   |z   dz   n|}n*|                     |d|                     |                    }|                     |t          |          ||||d          S )"Encode a dict item for a variable.=,[].F)explodearrayrL   rP   _encode_varr   	r   r   rH   rU   rW   rX   rM   rN   rQ   s	            r   _encode_dict_itemzExpansion._encode_dict_item[   s     ")3N 	I((--D5;TETfslT)C//PTFFZZT-B-B3-G-GHHF#c((D%QVWWWr   r?   r=   c	           	         |j         r7|r|dz   t          |          z   dz   nd}|                     |d||||d          S |                     |||||dd          S )"Encode a list item for a variable.r^   r_   r4   Fr`   )rb   r   rc   	r   r   rH   r?   rW   rX   rM   rN   rQ   s	            r   _encode_list_itemzExpansion._encode_list_itemf   sr     N 	V9?HVc\CJJ.44bF##Hb$vvuUUU$eVS%PPPr   r]   r4   r\   Tc                &    t          t                    r                               S t          t          j        j                  rWt                    rF fd                                D             }                    d |D                       S dS t          t          j        j	                  rQt                    r@ fdt                    D             }                    d |D                       S dS t          t                    r9                     t                                                              S                      t                              S )zEncode a variable.c                T    g | ]$}                     	||                   %S r$   )re   )
.0rU   rX   rQ   rN   rH   rM   r   r/   r   s
     r   
<listcomp>z)Expansion._encode_var.<locals>.<listcomp>u   sN     !: !: !:%( "&!7!7$USVZY^`fhnpu!v!v !: !: !:r   c                    g | ]}||S r   r$   rl   rW   s     r   rm   z)Expansion._encode_var.<locals>.<listcomp>w       "X"X"XDdFV4FVFVFVr   Nc                N    g | ]!\  }}                     	||          "S r$   )ri   )
rl   r?   rW   rX   rQ   rN   rH   rM   r   r   s
      r   rm   z)Expansion._encode_var.<locals>.<listcomp>{   sS     !F !F !F%0UD "&!7!7$tUZ\bdjlq!r!r !F !F !Fr   c                    g | ]}||S r   r$   ro   s     r   rm   z)Expansion._encode_var.<locals>.<listcomp>}   rp   r   )
isinstancer   rT   collectionsabcr   r:   keysjoinSequence	enumerater2   lower)	r   r   rH   r/   rX   rM   rN   rQ   encoded_itemss	   ```````` r   rc   zExpansion._encode_varn   s    uc"" 	W##HdE665QQQ 788 	WE

 Z!: !: !: !: !: !: !: !: !: !: !:,1JJLL!: !: !:zz"X"XM"X"X"XYYY4 899 		WE

 Z!F !F !F !F !F !F !F !F !F !F4=e4D4D!F !F !Fzz"X"XM"X"X"XYYY4%% 	W##HdCJJ4D4D4F4FPVX]^^^##HdCJJPUVVVr   valuesMapping[str, Any]c                    dS )zExpand values.Nr$   r   r|   s     r   expandzExpansion.expand   s    tr   c                    dS )zPerform partial expansion.r4   r$   r   s     r   partialzExpansion.partial   s    rr   N)r   r   r   r(   r   r,   )r/   r   r0   r   r1   r2   r   r   r/   r   r   r   )rH   rI   r   r   )rM   r   rN   r   r/   r   r   r   )r   r
   rH   r   r/   r   rM   r   rN   r   rQ   r2   r   r   r   r
   rH   r   rU   rV   rW   r   rX   r   rM   r   rN   r   rQ   r2   r   rY   r   r
   rH   r   r?   r=   rW   r   rX   r   rM   r   rN   r   rQ   r2   r   rY   )r]   r4   r\   T)r   r
   rH   r   r/   r   rX   r   rM   r   rN   r   rQ   r2   r   rY   r|   r}   r   rY   r|   r}   r   r   )r   r    r!   r"   r   propertyr*   r.   rB   rG   rL   rP   rT   re   ri   rc   r   r   r$   r   r   r&   r&      s[               X    X   *> > > >f f f f   I I I I	X 	X 	X 	XQ Q Q Q Z^W W W W 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   r/   r   r   c                V    t                                                       || _        d S r   )superr   r/   )r   r/   	__class__s     r   r   zLiteral.__init__   s$    


r   r|   r}   rY   c                h    |                      | j        t          j        t          j        z   d          S )zPerform exansion.T)rB   r/   r   rE   rK   r   s     r   r   zLiteral.expand   s&    ||DJ);g>N)NQUVVVr   c                    | j         S )r   )r/   r   s    r   r   zLiteral.__str__   s
    zr   )r/   r   r   r   r   r   )	r   r    r!   r"   r#   r   r   r   __classcell__r   s   @r   r   r      s           JJJ     W W W 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
    r4   r]   list[Variable]varsr   trailing_joinerr*   r   r   c                    t                                                       |r!|d         dv r|d         | _        |d d         }d |                    d          D             | _        d S )N)r]   r`   /;&c                ,    g | ]}t          |          S r$   r	   rl   vars     r   rm   z0ExpressionExpansion.__init__.<locals>.<listcomp>   s    CCCsXc]]CCCr   r]   )r   r   r   splitr   r   r*   r   s     r   r   zExpressionExpansion.__init__   sn     	'9R=,EEE#,R=D !#2#ICCiooc.B.BCCC			r   r(   c                *    t          | j                  S )zGet all variables.)listr   r   s    r   r*   zExpressionExpansion.variables   s     DIr   r,   c                $    d | j         D             S )zGet names of all variables.c                    g | ]	}|j         
S r$   )rH   r   s     r   rm   z6ExpressionExpansion.variable_names.<locals>.<listcomp>   s    ...S...r   )r   r   s    r   r.   z"ExpressionExpansion.variable_names   s     /.DI....r   r   r
   r/   r   rY   c                `    |                      ||                     |j                  |          S )Expand a single variable.)rc   rL   rH   r   r   r/   s      r   _expand_varzExpressionExpansion._expand_var   s+    $*?*?*N*NPUVVVr   r|   r}   c                &   g }| j         D ]Q}|                    |j        |j                  }|-|                     ||          }||                    |           R|r3| j        s| j        nd| j        	                    |          z   | j        z   S dS )z*Expand all variables, skip missing values.Nr4   )
r   getrU   defaultr   appendr   output_prefix
var_joinerrw   )r   r|   expanded_varsr   r/   expanded_vars         r   r   zExpressionExpansion.expand   s    #%9 	7 	7CJJsw44E!#//U;; ,!((666 	,040DMT''2QUQ`QeQefsQtQtt*+ ,tr   c           
     r   g }g }g }| j         D ]}|                    |j        |j                  }|I|                     ||          }|0|r|                    d|f           g }|                    |           m|r|                    |df           g }|                    |           |r|                    |df           |r|                    d|f           d}d}	t          |          D ]\  }
\  }}|
t          |          dz
  k    }|r9||	r| j        s| j	        nd| j
                            |          z   | j        z   z  }nj||	r	|s| j	        n
|s| j
        nddz   |	r| j        n| j        z   d                    d t          d|          D                       z   |s| j        ndz   d	z   z  }d
}	|S )z=Expand all variables, replace missing values with expansions.Nr4   Tr   {r]   c                ,    g | ]}t          |          S r$   r   r   s     r   rm   z/ExpressionExpansion.partial.<locals>.<listcomp>   s    &[&[&[Cs3xx&[&[&[r   r   }F)r   r   rH   r   r   r   ry   r:   r   r   r   rw   operatorpartial_operatorr   partial_joiner)r   r|   r   missing_varsresultr   r/   r   r>   rQ   r?   expandedmissinglasts                 r   r   zExpressionExpansion.partial   sM   #%')KM9 	) 	)CJJsx55E!#//U;; ,$ *t\&:;;;')!((666! 'MM=$"7888$&M##C(((( 	1MM=$/000 	0MM4.///*3F*;*; 
	 
	&E&Hgc&kkAo.D P5`$BV`D..^`!_11(;;<>B>RS T 5ssD..eiMrT__pr !6;$WDMM$BWY XX&[&[4@PRY;Z;Z&[&[&[\\] ;?Gd11RI LOO P EEr   c                v    d| j         z   d                    d | j        D                       z   | j        z   dz   S )r   r   r]   c                ,    g | ]}t          |          S r$   r   r   s     r   rm   z/ExpressionExpansion.__str__.<locals>.<listcomp>   s    /N/N/NSC/N/N/Nr   r   )r   rw   r   r   r   s    r   r   zExpressionExpansion.__str__   s@    dm#chh/N/NDI/N/N/N&O&OORVRffillmr   r*   r   r   r   r   r   r   r
   r/   r   r   rY   r   r   r   )r   r    r!   r"   r   r   r   r   r   r#   r   r   r   r*   r.   r   r   r   r   r   r   s   @r   r   r      s%          HMJNOD D D D D D    X / / / X/W W W W   % % % %Nn n n n n n 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

    r*   r   r   r   c                J    t                                          |           d S r   r   r   r   s     r   r   zSimpleExpansion.__init__
  !    #####r   r   )r   r    r!   r"   r   r   r   s   @r   r   r     sG         $ $ $ $ $ $ $ $ $ $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
    +,+r*   r   r   r   c                Z    t                                          |dd                     d S Nr   r   r   s     r   r   zReservedExpansion.__init__  )    122'''''r   r/   c                ^    |                      |t          j        t          j        z   d          S )rD   T)rB   r   rE   rK   rF   s     r   rG   z#ReservedExpansion._uri_encode_value  s#    ||EG$69I$IDQQQr   r   r   )	r   r    r!   r"   r   r   r   rG   r   r   s   @r   r   r     sp          H( ( ( ( ( (R R R R R R R 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
    #r*   r   r   r   c                J    t                                          |           d S 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      S          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
    r`   r*   r   r   r   c                Z    t                                          |dd                     d S r   r   r   s     r   r   zLabelExpansion.__init__;  r   r   r   r
   r/   r   rY   c                v    |                      ||                     |j                  ||j        rdnd          S r   r`   r]   rX   rc   rL   rH   ra   r   s      r   r   zLabelExpansion._expand_var>  H    $*?*?*N*NPU.6.>'GssC   J 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 J J J J J J 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   r*   r   r   r   c                Z    t                                          |dd                     d S r   r   r   s     r   r   zPathExpansion.__init__Q  r   r   r   r
   r/   r   rY   c                v    |                      ||                     |j                  ||j        rdnd          S )r   r   r]   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   r*   r   r   r   c                Z    t                                          |dd                     d S r   r   r   s     r   r   zPathStyleExpansion.__init__g  r   r   r   r
   rH   r/   r   rM   rN   rQ   r2   c                    |j         r|r|r|dz   |z   dz   n|}n|j        r|                     |d|          }t                                          ||||||          S )zEncode a string for a variable.r^   r_   r`   )rb   ra   rP   r   rT   )r   r   rH   r/   rM   rN   rQ   r   s          r   rT   zPathStyleExpansion._encode_strj  sv    N 	3 I7=H#,s22D 	3ZZT22Fww""8T5&&%PPPr   rU   rV   rW   rX   rY   c	           	        |j         rJ|r|r|dz   |z   dz   n|}|r!|s|dz   |                     |          z   dz   }ne|                     |          }nO|j        r|s|                     |d|          nd}n,|                     |d|                     |                    }d}|                     ||j         s|                     |          nd||||d          S )r[   r^   r_   r`   r4   r]   F)rb   rL   ra   rP   rc   rd   s	            r   re   z$PathStyleExpansion._encode_dict_items  s    N 	 I7=H#,s22D 4u 4 3,)>)>s)C)CCcI..s33 	;@ITZZT222rFFZZT-B-B3-G-GHHFFX^*d$*?*?*D*D*Dbdfj %vvu> > 	>r   r?   r=   c	           	         |j         r9|r|r|dz   |z   dz   n|}|                     |t          |          ||||d          S |                     ||||||j        rdndd          S )rg   r^   r_   Fr\   r`   )rb   rc   r   ra   rh   s	            r   ri   z$PathStyleExpansion._encode_list_item  s     N 	^ I7=H#,s22D##Hc%jj$vvW\]]]$eVXM]EgSSdginooor   c                &   |j         r1|                     ||                     |j                  |d          S |                     ||                     |j                  |d          }|r |                     |j                  dz   |z   n|j        S )r   r   r   r]   r\   ra   rc   rL   rH   r   s      r   r   zPathStyleExpansion._expand_var  s     	f##Hd.C.CHM.R.RTYad#eee  4+@+@+O+OQV^a bbHMa%%hm44s:UBBT\Taar   r   )r   r
   rH   r   r/   r   rM   r   rN   r   rQ   r2   r   r   r   r   r   )r   r    r!   r"   r   r   r   r   r   r   rT   re   ri   r   r   r   s   @r   r   r   Z  s          HMJN( ( ( ( ( (Q Q Q Q Q Q> > > >$p p p pb b b b b b b 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   r*   r   r   r   c                J    t                                          |           d S r   r   r   s     r   r   z FormStyleQueryExpansion.__init__  r   r   r   r
   r/   r   rY   c                   |j         r1|                     ||                     |j                  |d          S |                     ||                     |j                  |d          }| |                     |j                  dz   |z   ndS )r   r   r   r]   Nr\   r   r   s      r   r   z#FormStyleQueryExpansion._expand_var  s     	f##Hd.C.CHM.R.RTYad#eee  4+@+@+O+OQV^a bbHMHY%%hm44s:UBB`ddr   r   r   r   r   s   @r   r   r     s          HMJN$ $ $ $ $ $e e e e e e e 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   r*   r   r   r   c                J    t                                          |           d S 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.
    r]   r*   r   r   r   c                Z    t                                          |dd                     d S r   r   r   s     r   r   zCommaExpansion.__init__  r   r   r   r
   r/   r   rY   c                v    |                      ||                     |j                  ||j        rdn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     so          HM( ( ( ( ( (J J J J J J J 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   r]   r*   r   r   r   c                Z    t                                          |dd                     d S r   r   r   s     r   r   zReservedCommaExpansion.__init__  r   r   r   r
   r/   r   rY   c                v    |                      ||                     |j                  ||j        rdnd          S r   r   r   s      r   r   z"ReservedCommaExpansion._expand_var  r   r   r   r   r   r   s   @r   r   r     so          HM( ( ( ( ( (J J J J J J J Jr   r   )r"   
__future__r   rt   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 C " " " " " "     + + + + + + + + + +             211111111
1 
1 
1 
1 
19 
1 
1 
1n n n n n n n nb    i   ,\n \n \n \n \n) \n \n \n~	$ 	$ 	$ 	$ 	$) 	$ 	$ 	$R R R R R+ R R R$$ $ $ $ $) $ $ $J J J J J( J J J,J J J J J' J J J,9b 9b 9b 9b 9b, 9b 9b 9bxe e e e e0 e e e0$ $ $ $ $!8 $ $ $ J J J J J( J J J&J J J J J. J J J J Jr   