o
    lh                     @  s   d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZ er<ddlmZ ddlmZ G d	d
 d
eZG dd deZG dd dZdS )z=Process URI templates per http://tools.ietf.org/html/rfc6570.    )annotationsN)TYPE_CHECKING   )CommaExpansion	ExpansionFormStyleQueryContinuationFormStyleQueryExpansionFragmentExpansionLabelExpansionLiteralPathExpansionPathStyleExpansionReservedCommaExpansionReservedExpansionSimpleExpansion)Iterable)Variablec                   @  .   e Zd ZU dZded< dddZddd	Zd
S )ExpansionReservedErrorz9Exception thrown for reserved but unsupported expansions.str	expansionreturnNonec                 C  
   || _ d S Nr   selfr    r   l/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/uri_template/uritemplate.py__init__      
zExpansionReservedError.__init__c                 C  
   d| j  S )Convert to string.zUnsupported expansion: r   r   r   r   r   __str__      
zExpansionReservedError.__str__Nr   r   r   r   r   r   __name__
__module____qualname____doc____annotations__r    r%   r   r   r   r   r      
   
 
r   c                   @  r   )ExpansionInvalidErrorz(Exception thrown for unknown expansions.r   r   r   r   c                 C  r   r   r   r   r   r   r   r    %   r!   zExpansionInvalidError.__init__c                 C  r"   )r#   zBad expansion: r   r$   r   r   r   r%   (   r&   zExpansionInvalidError.__str__Nr'   r(   r)   r   r   r   r   r0       r/   r0   c                   @  sv   e Zd ZU dZded< ddd	ZedddZedddZdddZ	d ddZ
ed!ddZdddZdddZdS )"URITemplatez
    URI Template object.

    Constructor may raise ExpansionReservedError, ExpansionInvalidError, or VariableInvalidError.
    zlist[Expansion]
expansionstemplater   r   r   c                 C  s  g | _ td|}|D ]}|rd|d krd|d kr|dd }td|r0| j t| qd|d kr?| j t| qd	|d krN| j t| qd
|d kr]| j t| qd|d krl| j t	| qd|d kr{| j t
| qd|d kr| j t| qd|d kr| j t| qd|d krdt|k rd|d kr| j t| q| j t| q|d dv rt|t|d|vrd|vr| j t| qt|qd S )Nz(\{[^\}]*\}){r   }r   z*^([a-zA-Z0-9_]|%[0-9a-fA-F][0-9a-fA-F]).*$+#./;?&,   z=!@|)r2   resplitmatchappendr   r   r	   r
   r   r   r   r   lenr   r   r   r0   r   )r   r3   partspartr   r   r   r   r    6   sD   zURITemplate.__init__Iterable[Variable]c                 C  s.   i }| j D ]}|jD ]}|||j< q
q| S )zGet all variables in template.r2   	variablesnamevaluesr   varsr   varr   r   r   rI   \   s   

zURITemplate.variablesIterable[str]c                 C  s8   i }| j D ]}|jD ]}|||j< q
qdd | D S )z'Get names of all variables in template.c                 S  s   g | ]}|j qS r   )rJ   ).0rN   r   r   r   
<listcomp>l   s    z.URITemplate.variable_names.<locals>.<listcomp>rH   rL   r   r   r   variable_namese   s   

zURITemplate.variable_namesc                   s(    fdd| j D }ddd |D S )z
        Expand the template.

        May raise ExpansionFailed if a composite value is passed to a variable with a prefix modifier.
        c                      g | ]}|  qS r   )expandrP   r   kwargsr   r   rQ   t       z&URITemplate.expand.<locals>.<listcomp> c                 S  s   g | ]}|d ur|qS r   r   rU   r   r   r   rQ   u   s    )r2   joinr   rW   expandedr   rV   r   rT   n   s   zURITemplate.expandc                   s"    fdd| j D }td|S )z
        Expand the template, preserving expansions for missing variables.

        May raise ExpansionFailed if a composite value is passed to a variable with a prefix modifier.
        c                   rS   r   )partialrU   rV   r   r   rQ   }   rX   z'URITemplate.partial.<locals>.<listcomp>rY   )r2   r1   rZ   r[   r   rV   r   r]   w   s   zURITemplate.partialboolc                 C  s   t | |  kS )z(Determine if template is fully expanded.)r   rT   r$   r   r   r   r\      s   zURITemplate.expandedc                 C  s   d dd | jD S )-Convert to string, returns original template.rY   c                 S  s   g | ]}t |qS r   r   rU   r   r   r   rQ      s    z'URITemplate.__str__.<locals>.<listcomp>)rZ   r2   r$   r   r   r   r%      s   zURITemplate.__str__c                 C  s   t | S )r_   r`   r$   r   r   r   __repr__   s   zURITemplate.__repr__N)r3   r   r   r   )r   rG   )r   rO   r(   )r   r1   )r   r^   )r*   r+   r,   r-   r.   r    propertyrI   rR   rT   r]   r\   r%   ra   r   r   r   r   r1   -   s   
 
&

		
r1   )r-   
__future__r   r@   typingr   r2   r   r   r   r   r	   r
   r   r   r   r   r   r   collections.abcr   variabler   	Exceptionr   r0   r1   r   r   r   r   <module>   s    8