o
    lhyC                     @  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   k/var/www/html/construction_image-detection-poc/venv/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   	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)r9   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+   )r9   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   rB   rC   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   rD   r=   r   r   r>   r'   rB   rC   rE   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arrayrA   rD   _encode_varr   	r   r   r>   rI   rK   rL   rB   rC   rE   r   r   r   _encode_dict_item[   s   
zExpansion._encode_dict_itemr6   r4   c	           	   	   C  sN   |j r|r|d t| d nd}| |d||||dS | |||||ddS )"Encode a list item for a variable.rQ   rR   r+   FrS   )rU   r   rV   	r   r   r>   r6   rK   rL   rB   rC   rE   r   r   r   _encode_list_itemf   s   zExpansion._encode_list_itemrP   r+   rO   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   )rX   ).0rI   rL   rE   rC   r>   rB   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\   rK   r   r   r   r^   w       Nc                   s(   g | ]\}} || qS r   )r[   )r\   r6   rK   )rL   rE   rC   r>   rB   r   r   r   r   r^   {   s    c                 S  r_   r   r   r`   r   r   r   r^   }   ra   )
isinstancer   rH   collectionsabcr   r1   keysjoinSequence	enumerater*   lower)	r   r   r>   r'   rL   rB   rC   rE   encoded_itemsr   r]   r   rV   n   s&   

zExpansion._encode_varvaluesMapping[str, Any]c                 C     dS )zExpand values.Nr   r   rk   r   r   r   expand      zExpansion.expandc                 C  rm   )zPerform partial expansion.r+   r   rn   r   r   r   partial   rp   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   )rB   r   rC   r   r'   r   r   r   )r   r	   r>   r   r'   r   rB   r   rC   r   rE   r*   r   r   r   r	   r>   r   rI   rJ   rK   r   rL   r   rB   r   rC   r   rE   r*   r   rM   r   r	   r>   r   r6   r4   rK   r   rL   r   rB   r   rC   r   rE   r*   r   rM   )rP   r+   rO   T)r   r	   r>   r   r'   r   rL   r   rB   r   rC   r   rE   r*   r   rM   rk   rl   r   rM   rk   rl   r   r   )r   r   r   r   r   propertyr#   r&   r9   r=   rA   rD   rH   rX   r[   rV   ro   rq   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__rk   rl   rM   c                 C  s   |  | jtjtj dS )zPerform exansion.T)r9   r'   r   r;   r@   rn   r   r   r   ro      s   zLiteral.expandc                 C  s   | j S )r   )r'   r   r   r   r   r      s   zLiteral.__str__)r'   r   r   r   rw   r   )	r   r   r   r   r   r   ro   r   __classcell__r   r   r|   r   rz      s   
 
rz   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+   rP   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)rP   rS   /;&c                 S     g | ]}t |qS r   r   r\   varr   r   r   r^          z0ExpressionExpansion.__init__.<locals>.<listcomp>rP   )r{   r   r   splitr   r   r#   r|   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   rM   c                 C  s   |  || |j|S )Expand a single variable.)rV   rA   r>   r   r   r'   r   r   r   _expand_var      zExpressionExpansion._expand_varrk   rl   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   getrI   defaultr   appendr   output_prefix
var_joinerrf   )r   rk   expanded_varsr   r'   expanded_varr   r   r   ro      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   {rP   c                 S  r   r   r   r   r   r   r   r^      r   z/ExpressionExpansion.partial.<locals>.<listcomp>r   }F)r   r   r>   r   r   r   rh   r1   r   r   r   rf   operatorpartial_operatorr   partial_joiner)r   rk   r   missing_varsresultr   r'   r   r5   rE   r6   expandedmissinglastr   r   r   rq      sX   


zExpressionExpansion.partialc                 C  s*   d| j  ddd | jD  | j d S )r   r   rP   c                 S  r   r   r   r   r   r   r   r^      r   z/ExpressionExpansion.__str__.<locals>.<listcomp>r   )r   rf   r   r   r   r   r   r   r      s   *zExpressionExpansion.__str__r#   r   r   r   rr   rs   r   r	   r'   r   r   rM   rw   rx   r   )r   r   r   r   r   r   r   r   r   r   r   r   ry   r#   r&   r   ro   rq   r   r~   r   r   r|   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   r{   r   r   r|   r   r   r   
     zSimpleExpansion.__init__r   )r   r   r   r   r   r~   r   r   r|   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   r|   r   r   r        zReservedExpansion.__init__r'   c                 C  s   |  |tjtj dS )r:   T)r9   r   r;   r@   r<   r   r   r   r=     r   z#ReservedExpansion._uri_encode_valuer   rt   )	r   r   r   r   r   r   r   r=   r~   r   r   r|   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   r|   r   r   r   *  r   zFragmentExpansion.__init__r   r   r   r   r   r   r   r   r~   r   r   r|   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
    rS   r#   r   r   r   c                   r   r   r   r   r|   r   r   r   ;  r   zLabelExpansion.__init__r   r	   r'   r   rM   c                 C  (   | j || |j||jrddS ddS r   rS   rP   rL   rV   rA   r>   rT   r   r   r   r   r   >  
   zLabelExpansion._expand_varr   r   r   r   r   r   r   r   r   r   r   r   r   r~   r   r   r|   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   r|   r   r   r   Q  r   zPathExpansion.__init__r   r	   r'   r   rM   c                 C  r   )r   r   rP   r   r   r   r   r   r   r   T  r   zPathExpansion._expand_varr   r   r   r   r   r|   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   r|   r   r   r   g  r   zPathStyleExpansion.__init__r   r	   r>   r'   r   rB   rC   rE   r*   c                   sN   |j r|r|r|d | d n|}n
|jr| |d|}t ||||||S )zEncode a string for a variable.rQ   rR   rS   )rU   rT   rD   r{   rH   rG   r|   r   r   rH   j  s   zPathStyleExpansion._encode_strrI   rJ   rK   rL   rM   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 )rN   rQ   rR   rS   r+   rP   F)rU   rA   rT   rD   rV   rW   r   r   r   rX   s  s   z$PathStyleExpansion._encode_dict_itemr6   r4   c	           	   	   C  s`   |j r|r|r|d | d n|}| |t|||||dS | ||||||jr,ddS ddS )rY   rQ   rR   FrO   rS   )rU   rV   r   rT   rZ   r   r   r   r[     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   rP   rO   rT   rV   rA   r>   r   r   r   r   r     s   zPathStyleExpansion._expand_varr   )r   r	   r>   r   r'   r   rB   r   rC   r   rE   r*   r   r   ru   rv   r   )r   r   r   r   r   r   r   r   r   r   rH   rX   r[   r   r~   r   r   r|   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   r|   r   r   r     r   z FormStyleQueryExpansion.__init__r   r	   r'   r   rM   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   rP   NrO   r   r   r   r   r   r     s    z#FormStyleQueryExpansion._expand_varr   r   r   r   r   r|   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   r|   r   r   r     r   z#FormStyleQueryContinuation.__init__r   r   r   r   r|   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.
    rP   r#   r   r   r   c                   r   r   r   r   r|   r   r   r     r   zCommaExpansion.__init__r   r	   r'   r   rM   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   r|   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   rP   r#   r   r   r   c                   r   r   r   r   r|   r   r   r     r   zReservedCommaExpansion.__init__r   r	   r'   r   rM   c                 C  r   r   r   r   r   r   r   r     r   z"ReservedCommaExpansion._expand_varr   r   r   r   r   r|   r   r     r   r   )r   
__future__r   rc   typingr   r   r   charsetr   r   r	   collections.abcr
   r   	Exceptionr   r    rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s,    q_<