o
    ¹is  ã                   @   s    d Z ddlZddlZddlmZmZ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 ddlm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.é    N)ÚDictÚIterableÚListé   )ÚCommaExpansionÚ	ExpansionÚFormStyleQueryContinuationÚFormStyleQueryExpansionÚFragmentExpansionÚLabelExpansionÚLiteralÚPathExpansionÚPathStyleExpansionÚReservedCommaExpansionÚReservedExpansionÚSimpleExpansion)ÚVariablec                   @   ó:   e Zd ZU dZeed< deddfdd„Zdefdd„ZdS )	ÚExpansionReservedErrorz9Exception thrown for reserved but unsupported expansions.Ú	expansionÚreturnNc                 C   ó
   || _ d S ©N©r   ©Úselfr   © r   úS/var/www/edux/Edux_v2/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__©Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__r   r#   r   r   r   r   r      ó
   
 r   c                   @   r   )	ÚExpansionInvalidErrorz(Exception thrown for unknown expansions.r   r   Nc                 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__r%   r   r   r   r   r-      r,   r-   c                   @   s¢   e Zd ZU dZee ed< deddfdd„Ze	de
e fdd	„ƒZe	de
e fd
d„ƒZdefdd„Zddd„Ze	defdd„ƒZdefdd„Zdefdd„ZdS )ÚURITemplatez
    URI Template object.

    Constructor may raise ExpansionReservedError, ExpansionInvalidError, or VariableInvalidError.
    Ú
expansionsÚtemplater   Nc                 C   sÆ  g | _ t d|¡}|D ]Õ}|ràd|d krËd|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r½dt|ƒk r´d|d kr´| j  t|ƒ¡ q| j  t|ƒ¡ q|d dv rÇt|ƒ‚t|ƒ‚d|vrÜd|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=!@|)r/   ÚreÚsplitÚmatchÚappendr   r   r
   r   r   r   r	   r   Úlenr   r   r   r-   r   )r   r0   ÚpartsÚpartr   r   r   r   r   2   sD   àÿzURITemplate.__init__c                 C   s2   t  ¡ }| jD ]}|jD ]}|||j< qq| ¡ S )zGet all variables in template.©ÚcollectionsÚOrderedDictr/   Ú	variablesÚnameÚvalues©r   Úvarsr   Úvarr   r   r   rG   X   s   

ÿzURITemplate.variablesc                 C   s<   t  ¡ }| 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   )rH   )Ú.0rL   r   r   r   Ú
<listcomp>h   s    z.URITemplate.variable_names.<locals>.<listcomp>rD   rJ   r   r   r   Úvariable_namesa   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©rM   r   ©Úkwargsr   r   rN   p   ó    z&URITemplate.expand.<locals>.<listcomp>Ú c                 S   s   g | ]}|d ur|‘qS r   r   rR   r   r   r   rN   q   s    )r/   Újoin©r   rT   Úexpandedr   rS   r   rQ   j   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                    rP   r   )ÚpartialrR   rS   r   r   rN   y   rU   z'URITemplate.partial.<locals>.<listcomp>rV   )r/   r.   rW   rX   r   rS   r   rZ   s   s   zURITemplate.partialc                 C   s   t | ƒ|  ¡ kS )z(Determine if template is fully expanded.)r*   rQ   r"   r   r   r   rY   |   s   zURITemplate.expandedc                 C   s   d  dd„ | jD ƒ¡S )ú-Convert to string, returns original template.rV   c                 S   s   g | ]}t |ƒ‘qS r   ©r*   rR   r   r   r   rN   ƒ   s    z'URITemplate.__str__.<locals>.<listcomp>)rW   r/   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__)r   r.   )r&   r'   r(   r)   r   r   r+   r*   r   Úpropertyr   r   rG   rO   rQ   rZ   ÚboolrY   r#   r]   r   r   r   r   r.   )   s   
 &
		r.   )r)   rE   r=   Útypingr   r   r   r/   r   r   r   r	   r
   r   r   r   r   r   r   r   Úvariabler   Ú	Exceptionr   r-   Úobjectr.   r   r   r   r   Ú<module>   s    8