o
    j                     @   s   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 edZG dd de jZG dd	 d	e jZG d
d de jZG dd dee jZG dd dee jZdedee j fddZe e dS )    N)AnyOptionalTuple   )	IDNAErroralabeldecodeencodeulabelu   [.。．｡]c                	   @   sP   e Zd ZdZddededeeef fddZddededeeef fdd	Z	d
S )Codecaf  Stateless IDNA 2008 codec.

    Implements the :class:`codecs.Codec` protocol so that the whole-domain
    encoder (:func:`idna.encode`) and decoder (:func:`idna.decode`) are
    accessible through the standard codec machinery as ``"idna2008"``.

    Only the ``"strict"`` error handler is supported; any other handler
    raises :exc:`~idna.IDNAError`.
    strictdataerrorsreturnc                 C   .   |dkrt d||sdS t|t|fS )Nr   Unsupported error handling "{}"    r   )r   formatr	   lenselfr   r    r   P/var/www/html/fyndo/pharma/fyndo/venv/lib/python3.10/site-packages/idna/codec.pyr	      
   zCodec.encodec                 C   r   )Nr   r    r   )r   r   r   r   r   r   r   r   r      r   zCodec.decodeN)r   )
__name__
__module____qualname____doc__strr   bytesintr	   r   r   r   r   r   r   
   s     
$	r   c                
   @   s2   e Zd ZdZdedededeeef fddZ	dS )	IncrementalEncodera  Incremental IDNA 2008 encoder.

    Buffers a partial trailing label across calls until either the next
    label separator is seen or ``final=True``, so that streamed input is
    encoded one whole label at a time. Any of the four Unicode label
    separators (``U+002E``, ``U+3002``, ``U+FF0E``, ``U+FF61``) ends a
    label; the result always uses ``U+002E`` as the separator.

    Only the ``"strict"`` error handler is supported.
    r   r   finalr   c           
      C   s   |dkrt d||sdS t|}d}|r+|d s"d}|d= n	|s+|d= |r+d}g }d}|D ]}|t| |r@|d7 }|t|7 }q1d|| }	|t|7 }|	|fS )	Nr   r   r   r      .r   r   )r   r   _unicode_dots_resplitappendr   r   join)
r   r   r   r%   labelstrailing_dotresultsizelabelresult_bytesr   r   r   _buffer_encode4   s0   
z!IncrementalEncoder._buffer_encodeN)
r   r   r   r    r!   boolr   r"   r#   r2   r   r   r   r   r$   (   s    &r$   c                
   @   s2   e Zd ZdZdedededeeef fddZ	dS )	IncrementalDecodera  Incremental IDNA 2008 decoder.

    Buffers a partial trailing label across calls until either the next
    label separator is seen or ``final=True``, so that streamed input is
    decoded one whole label at a time.

    Only the ``"strict"`` error handler is supported.
    r   r   r%   r   c           
      C   s   |dkrt d||sdS t|tst|d}t|}d}|r5|d s,d}|d= n	|s5|d= |r5d}g }d}|D ]}|t| |rJ|d	7 }|t|7 }q;d	|| }	|t|7 }|	|fS )
Nr   r   r   asciir   r&   .r   r   )
r   r   
isinstancer!   r(   r)   r*   r
   r   r+   )
r   r   r   r%   r,   r-   r.   r/   r0   
result_strr   r   r   _buffer_decode_   s4   


z!IncrementalDecoder._buffer_decodeN)
r   r   r   r    r   r!   r3   r   r#   r9   r   r   r   r   r4   U   s    &	r4   c                   @      e Zd ZdS )StreamWriterNr   r   r   r   r   r   r   r;          r;   c                   @   r:   )StreamReaderNr<   r   r   r   r   r>      r=   r>   namer   c              	   C   s,   | dkrdS t j| t jt jttttdS )a  Codec search function registered with :mod:`codecs`.

    Returns a :class:`codecs.CodecInfo` for the ``"idna2008"`` codec name
    so that ``str.encode("idna2008")`` and ``bytes.decode("idna2008")``
    invoke the IDNA 2008 codec defined in this module.

    :param name: The codec name being looked up.
    :returns: A :class:`codecs.CodecInfo` instance if ``name`` is
        ``"idna2008"``, otherwise ``None``.
    idna2008N)r?   r	   r   incrementalencoderincrementaldecoderstreamwriterstreamreader)	codecs	CodecInfor   r	   r   r$   r4   r;   r>   )r?   r   r   r   search_function   s   rG   )rE   retypingr   r   r   corer   r   r   r	   r
   compiler(   r   BufferedIncrementalEncoderr$   BufferedIncrementalDecoderr4   r;   r>   r!   rF   rG   registerr   r   r   r   <module>   s    
--