o
    ¹i_  ã                   @   s@   d Z ddlmZ ddlmZ G dd„ deƒZG dd„ deƒZd	S )
zVariable class for URITemplate.é    )ÚOptionalé   )ÚCharsetc                   @   s:   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 )	ÚVariableInvalidErrorz'Exception thrown for invalid variables.ÚvariableÚreturnNc                 C   s
   || _ d S )N©r   )Úselfr   © r
   úP/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/uri_template/variable.pyÚ__init__   s   
zVariableInvalidError.__init__c                 C   s
   d| j  S )úConvert to string.zBad variable: r   ©r	   r
   r
   r   Ú__str__   s   
zVariableInvalidError.__str__)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__r   r   r
   r
   r
   r   r      s
   
 r   c                   @   s^   e Zd ZU dZeed< eed< eed< eed< ee ed< dedd	fd
d„Z	defdd„Z
d	S )ÚVariablezS
    A template variable.

    https://tools.ietf.org/html/rfc6570#section-2.3
    ÚnameÚ
max_lengthÚexplodeÚarrayÚdefaultÚvar_specr   Nc                 C   s  d| _ d| _d| _d| _d | _|dd… tjvrt|ƒ‚d|v r)| dd¡\}| _d|v rl| dd¡\}}dt	|ƒk rdt	|ƒdk rd|D ]}|tj
vrRt|d | ƒ‚qCt|ƒ| _| jsct|d | ƒ‚n,t|d | ƒ‚d|d	 kr||d d	… }d
| _nd|dd … kr|d d… }d
| _d
| _d}|t	|ƒk r|| }d|krÍ|d t	|ƒk rÍ||d  tjv rÍ||d  tjv rÍ|  j |||d … 7  _ |d7 }n-|tjv rÚ|  j |7  _ n t|| jrædt| jƒ nd | jrïd ƒ‚| jröd ƒ‚d ƒ‚|d7 }|t	|ƒk s™d S d S )NÚ r   Fr   ú=ú:é   Ú*éÿÿÿÿTú[]éþÿÿÿú%é   é   )r   r   r   r   r   r   Ú	VAR_STARTr   ÚsplitÚlenÚDIGITÚintÚ	HEX_DIGITÚVAR_CHARr   )r	   r   r   ÚdigitÚindexÚ	codepointr
   r
   r   r   "   s`   
ÿ
ÿ

ÿÿÿózVariable.__init__c                 C   sZ   | j | jrdt| jƒ nd | jr| jsdnd | jrdnd | jdur*d| j  S d S )r   r   r   r!   r#   Nr   )r   r   r   r   r   r   r   r
   r
   r   r   R   s   ÿÿþþzVariable.__str__)r   r   r   r   r   r   r,   Úboolr   r   r   r
   r
   r
   r   r      s   
 0r   N)	r   Útypingr   Úcharsetr   Ú	Exceptionr   Úobjectr   r
   r
   r
   r   Ú<module>   s
    