o
    tfyC                     @  s:  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
 d
eZG dd dZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d eZG d!d" d"eZG d#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                   @  s.   e Zd ZU dZded< dddZddd	Zd
S )ExpansionFailedErrorz&Exception thrown when expansions fail.strvariablereturnNonec                 C  s
   || _ d S Nr   )selfr    r   `/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/uri_template/expansions.py__init__   s   
zExpansionFailedError.__init__c                 C  s
   d| j  S )Convert to string.zBad expansion: r   r   r   r   r   __str__   s   
zExpansionFailedError.__str__N)r   r   r   r   r   r   )__name__
__module____qualname____doc____annotations__r   r   r   r   r   r   r      s
   
 
r   c                   @  s   e Zd ZdZd;ddZed<ddZed=d
dZd>ddZd?ddZ	d@ddZ
dAddZdBd d!ZdCd(d)ZdDd,d-Z	1dEdFd2d3ZdGd6d7ZdHd8d9Zd:S )I	Expansionz`
    Base class for template expansions.

    https://tools.ietf.org/html/rfc6570#section-3
    r   r   c                 C  s   d S r   r   r   r   r   r   r   #   s   zExpansion.__init__Iterable[Variable]c                 C     g S )z$Get all variables in this expansion.r   r   r   r   r   	variables&      zExpansion.variablesIterable[str]c                 C  r"   )z1Get the names of all variables in this expansion.r   r   r   r   r   variable_names+   r$   zExpansion.variable_namesvaluer   legalpct_encodedboolc           	      C  s   d}d}|t |k rn|| }||v r||7 }nM|rFd|krF|d t |k rF||d  tjv rF||d  tjv rF||||d  7 }|d7 }n|d}|D ]}|dtjt|d   tj|d   7 }qM|d7 }|t |k s
|S )	z"Encode a string into legal values. r   %   r      utf8   )lenr   Z	HEX_DIGITencodeint)	r   r'   r(   r)   outputindex	codepointr/   byter   r   r   _encode0   s$   


*zExpansion._encodec                 C  s   |  |tjdS )!Encode a value into uri encoding.F)r8   r   
UNRESERVEDr   r'   r   r   r   _uri_encode_valueE   s   zExpansion._uri_encode_valuename	str | intc                 C  s"   |r|  t|tjtj dS dS )z)Encode a variable name into uri encoding.Tr+   )r8   r   r   r:   RESERVED)r   r=   r   r   r   _uri_encode_nameI   s   "zExpansion._uri_encode_nameprefixjoinerc                 C  s   |r|| | S |S )zJoin a prefix to a value.r   )r   rA   rB   r'   r   r   r   _joinM   s   zExpansion._joinr   r	   firstc              	   C  sH   |j r|stt|| ||| |d|j  S | ||| |S )z%Encode a string value for a variable.N)
max_lengthr   r   rC   r<   r   r   r=   r'   rA   rB   rD   r   r   r   _encode_strS   s
   zExpansion._encode_strkey	int | stritemr   delim
str | Nonec	           	   	   C  sj   |j rdnd}|jr| |}|r|s|d | d n|}n
| |d| |}| |t|||||dS )"Encode a dict item for a variable.=,[].F)explodearrayr@   rC   _encode_varr   	r   r   r=   rH   rJ   rK   rA   rB   rD   r   r   r   _encode_dict_item[   s   
zExpansion._encode_dict_itemr5   r3   c	           	   	   C  sN   |j r|r|d t| d nd}| |d||||dS | |||||ddS )"Encode a list item for a variable.rP   rQ   r+   FrR   )rT   r   rU   	r   r   r=   r5   rJ   rK   rA   rB   rD   r   r   r   _encode_list_itemf   s   zExpansion._encode_list_itemrO   r+   rN   Tc           	        s   t trS t tjjr8tr6 fdd D } dd |D S dS t tjj	r`tr^ fddt
D } dd |D S dS t trst S tS )zEncode a variable.c                   s(   g | ]} ||  qS r   )rW   ).0rH   rK   rD   rB   r=   rA   r   r'   r   r   r   
<listcomp>u   s     z)Expansion._encode_var.<locals>.<listcomp>c                 S     g | ]}|d ur|qS r   r   r[   rJ   r   r   r   r]   w       Nc                   s(   g | ]\}} || qS r   )rZ   )r[   r5   rJ   )rK   rD   rB   r=   rA   r   r   r   r   r]   {   s    c                 S  r^   r   r   r_   r   r   r   r]   }   r`   )
isinstancer   rG   collectionsabcr   r1   keysjoinSequence	enumerater*   lower)	r   r   r=   r'   rK   rA   rB   rD   Zencoded_itemsr   r\   r   rU   n   s&   

zExpansion._encode_varvaluesMapping[str, Any]c                 C     dS )zExpand values.Nr   r   ri   r   r   r   expand      zExpansion.expandc                 C  rk   )zPerform partial expansion.r+   r   rl   r   r   r   partial   rn   zExpansion.partialN)r   r   r   r!   r   r%   )r'   r   r(   r   r)   r*   r   r   r'   r   r   r   )r=   r>   r   r   )rA   r   rB   r   r'   r   r   r   )r   r	   r=   r   r'   r   rA   r   rB   r   rD   r*   r   r   r   r	   r=   r   rH   rI   rJ   r   rK   r   rA   r   rB   r   rD   r*   r   rL   r   r	   r=   r   r5   r3   rJ   r   rK   r   rA   r   rB   r   rD   r*   r   rL   )rO   r+   rN   T)r   r	   r=   r   r'   r   rK   r   rA   r   rB   r   rD   r*   r   rL   ri   rj   r   rL   ri   rj   r   r   )r   r   r   r   r   propertyr#   r&   r8   r<   r@   rC   rG   rW   rZ   rU   rm   ro   r   r   r   r   r       s$    







	
r    c                      s@   e Zd ZU dZded< d fddZdddZdddZ  ZS )LiteralzS
    A literal expansion.

    https://tools.ietf.org/html/rfc6570#section-3.1
    r   r'   r   r   c                   s   t    || _d S r   )superr   r'   r;   	__class__r   r   r      s   

zLiteral.__init__ri   rj   rL   c                 C  s   |  | jtjtj dS )zPerform exansion.T)r8   r'   r   r:   r?   rl   r   r   r   rm      s   zLiteral.expandc                 C  s   | j S )r   )r'   r   r   r   r   r      s   zLiteral.__str__)r'   r   r   r   ru   r   )	r   r   r   r   r   r   rm   r   __classcell__r   r   rz   r   rx      s   
 
rx   c                      s   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dZed#ddZed$ddZd%ddZd&ddZd'ddZd(d d!Z  ZS ))ExpressionExpansionzd
    Base class for expression expansions.

    https://tools.ietf.org/html/rfc6570#section-3.2
    r+   rO   list[Variable]varsr   trailing_joinerr#   r   r   c                   sJ   t    |r|d dv r|d | _|d d }dd |dD | _d S )N)rO   rR   /;&c                 S     g | ]}t |qS r   r   r[   varr   r   r   r]          z0ExpressionExpansion.__init__.<locals>.<listcomp>rO   )ry   r   r   splitr   r   r#   rz   r   r   r      s
   

zExpressionExpansion.__init__r!   c                 C  s
   t | jS )zGet all variables.)listr   r   r   r   r   r#      s   
zExpressionExpansion.variablesr%   c                 C  s   dd | j D S )zGet names of all variables.c                 S  s   g | ]}|j qS r   )r=   r   r   r   r   r]      s    z6ExpressionExpansion.variable_names.<locals>.<listcomp>)r   r   r   r   r   r&      s   z"ExpressionExpansion.variable_namesr   r	   r'   r   rL   c                 C  s   |  || |j|S )Expand a single variable.)rU   r@   r=   r   r   r'   r   r   r   _expand_var      zExpressionExpansion._expand_varri   rj   c                 C  sp   g }| j D ]}||j|j}|dur"| ||}|dur"|| q|r6| js+| jnd| j	| | j S dS )z*Expand all variables, skip missing values.Nr+   )
r   getrH   defaultr   appendr   output_prefix
var_joinerre   )r   ri   expanded_varsr   r'   expanded_varr   r   r   rm      s   

zExpressionExpansion.expandc              	   C  sp  g }g }g }| j D ]9}||j|j}|dur2| ||}|dur1|r,|d|f g }|| q	|r=||df g }|| q	|rL||df |rU|d|f d}d}	t|D ]X\}
\}}|
t|d k}|r||	rv| jsv| j	nd| j
| | j 7 }n0||	r|s| j	n|s| j
ndd |	r| jn| j ddd td	|D  |s| jnd d
 7 }d}	q]|S )z=Expand all variables, replace missing values with expansions.Nr+   Tr   {rO   c                 S  r   r   r   r   r   r   r   r]      r   z/ExpressionExpansion.partial.<locals>.<listcomp>r~   }F)r   r   r=   r   r   r   rg   r1   r   r   r   re   operatorpartial_operatorr   partial_joiner)r   ri   r   Zmissing_varsresultr   r'   r   r4   rD   r5   expandedmissinglastr   r   r   ro      sX   


zExpressionExpansion.partialc                 C  s*   d| j  ddd | jD  | j d S )r   r   rO   c                 S  r   r   r   r   r   r   r   r]      r   z/ExpressionExpansion.__str__.<locals>.<listcomp>r   )r   re   r   r   r   r   r   r   r      s   *zExpressionExpansion.__str__r#   r   r   r   rp   rq   r   r	   r'   r   r   rL   ru   rv   r   )r   r   r   r   r   r   r   r   r   r   r   r   rw   r#   r&   r   rm   ro   r   r|   r   r   rz   r   r}      s$   
 


'r}   c                      s"   e Zd ZdZd fddZ  ZS )	SimpleExpansionz`
    Simple String expansion {var}.

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

    r#   r   r   r   c                      t  | d S r   ry   r   r   rz   r   r   r   
     zSimpleExpansion.__init__r   )r   r   r   r   r   r|   r   r   rz   r   r     s    r   c                      s4   e Zd ZdZdZdZd fdd	ZdddZ  ZS )ReservedExpansionz[
    Reserved Expansion {+var}.

    https://tools.ietf.org/html/rfc6570#section-3.2.3
    +,+r#   r   r   r   c                      t  |dd   d S Nr   r   r   rz   r   r   r        zReservedExpansion.__init__r'   c                 C  s   |  |tjtj dS )r9   T)r8   r   r:   r?   r;   r   r   r   r<     r   z#ReservedExpansion._uri_encode_valuer   rr   )	r   r   r   r   r   r   r   r<   r|   r   r   rz   r   r         r   c                      *   e Zd ZdZdZdZd	 fddZ  ZS )
FragmentExpansionz[
    Fragment Expansion {#var}.

    https://tools.ietf.org/html/rfc6570#section-3.2.4
    #r#   r   r   r   c                   r   r   r   r   rz   r   r   r   *  r   zFragmentExpansion.__init__r   r   r   r   r   r   r   r   r|   r   r   rz   r   r      
    r   c                      @   e Zd ZdZdZdZdZdZdZd fddZ	dddZ
  ZS )LabelExpansionzh
    Label Expansion with Dot-Prefix {.var}.

    https://tools.ietf.org/html/rfc6570#section-3.2.5
    rR   r#   r   r   r   c                   r   r   r   r   rz   r   r   r   ;  r   zLabelExpansion.__init__r   r	   r'   r   rL   c                 C  (   | j || |j||jrddS ddS r   rR   rO   rK   rU   r@   r=   rS   r   r   r   r   r   >  
   zLabelExpansion._expand_varr   r   r   r   r   r   r   r   r   r   r   r   r   r|   r   r   rz   r   r   .      r   c                      r   )PathExpansionz_
    Path Segment Expansion {/var}.

    https://tools.ietf.org/html/rfc6570#section-3.2.6
    r   r#   r   r   r   c                   r   r   r   r   rz   r   r   r   Q  r   zPathExpansion.__init__r   r	   r'   r   rL   c                 C  r   )r   r   rO   r   r   r   r   r   r   r   T  r   zPathExpansion._expand_varr   r   r   r   r   rz   r   r   D  r   r   c                      sb   e Zd ZdZdZdZdZdZdZd! fddZ	d" fddZ
d#ddZd$ddZd%dd Z  ZS )&PathStyleExpansionzg
    Path-Style Parameter Expansion {;var}.

    https://tools.ietf.org/html/rfc6570#section-3.2.7
    r   r#   r   r   r   c                   r   r   r   r   rz   r   r   r   g  r   zPathStyleExpansion.__init__r   r	   r=   r'   r   rA   rB   rD   r*   c                   sN   |j r|r|r|d | d n|}n
|jr| |d|}t ||||||S )zEncode a string for a variable.rP   rQ   rR   )rT   rS   rC   ry   rG   rF   rz   r   r   rG   j  s   zPathStyleExpansion._encode_strrH   rI   rJ   rK   rL   c	           	   	   C  s   |j r'|r|r|d | d n|}|r!|s!|d | | d }n!| |}n|jr6|s3| |d|nd}n| |d| |}d}| ||j sM| |nd||||dS )rM   rP   rQ   rR   r+   rO   F)rT   r@   rS   rC   rU   rV   r   r   r   rW   s  s   z$PathStyleExpansion._encode_dict_itemr5   r3   c	           	   	   C  s`   |j r|r|r|d | d n|}| |t|||||dS | ||||||jr,ddS ddS )rX   rP   rQ   FrN   rR   )rT   rU   r   rS   rY   r   r   r   rZ     s
   $z$PathStyleExpansion._encode_list_itemc                 C  sX   |j r| j|| |j|ddS | j|| |j|dd}|r)| |jd | S |jS )r   r   r   rO   rN   rS   rU   r@   r=   r   r   r   r   r     s   zPathStyleExpansion._expand_varr   )r   r	   r=   r   r'   r   rA   r   rB   r   rD   r*   r   r   rs   rt   r   )r   r   r   r   r   r   r   r   r   r   rG   rW   rZ   r   r|   r   r   rz   r   r   Z  s    
	
	r   c                      s@   e Zd ZdZdZdZdZdZdZd fdd	Z	dddZ
  ZS )FormStyleQueryExpansionzc
    Form-Style Query Expansion {?var}.

    https://tools.ietf.org/html/rfc6570#section-3.2.8
    ?r   r#   r   r   r   c                   r   r   r   r   rz   r   r   r     r   z FormStyleQueryExpansion.__init__r   r	   r'   r   rL   c                 C  sZ   |j r| j|| |j|ddS | j|| |j|dd}|dur+| |jd | S dS )r   r   r   rO   NrN   r   r   r   r   r   r     s    z#FormStyleQueryExpansion._expand_varr   r   r   r   r   rz   r   r     r   r   c                      r   )
FormStyleQueryContinuationzf
    Form-Style Query Continuation {&var}.

    https://tools.ietf.org/html/rfc6570#section-3.2.9
    r   r#   r   r   r   c                   r   r   r   r   rz   r   r   r     r   z#FormStyleQueryContinuation.__init__r   r   r   r   rz   r   r     r   r   c                      s4   e Zd ZdZdZdZd fddZdddZ  ZS )CommaExpansionzn
    Label Expansion with Comma-Prefix {,var}.

    Non-standard extension to support partial expansions.
    rO   r#   r   r   r   c                   r   r   r   r   rz   r   r   r     r   zCommaExpansion.__init__r   r	   r'   r   rL   c                 C  r   r   r   r   r   r   r   r     r   zCommaExpansion._expand_varr   r   	r   r   r   r   r   r   r   r   r|   r   r   rz   r   r     r   r   c                      s4   e Zd ZdZdZdZd fdd	ZdddZ  ZS )ReservedCommaExpansionzr
    Reserved Expansion with comma prefix {,+var}.

    Non-standard extension to support partial expansions.
    r   rO   r#   r   r   r   c                   r   r   r   r   rz   r   r   r     r   zReservedCommaExpansion.__init__r   r	   r'   r   rL   c                 C  r   r   r   r   r   r   r   r     r   z"ReservedCommaExpansion._expand_varr   r   r   r   r   rz   r   r     r   r   )r   
__future__r   rb   typingr   r   r   charsetr   r   r	   collections.abcr
   r   	Exceptionr   r    rx   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s,    q_<