o
    uvXjJ#  ã                   @   s@  d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 G dd„ deƒZejZd-dd„ZedƒeeeejejejfZdd„ Zd-dd„Zd-dd„Zd-dd„ZeZeZde_de_dd„ Zg d¢eddƒeddƒgZdd„ eD ƒZd Z e !d!d„ e d"d… D ƒ¡ d#d$„ Z"d%d&„ Z#d'd(„ Z$d)d*„ Z%d+d,„ Z&e&ƒ Z'dS ).é    N)ÚDecimal©Úquote)Úsix)ÚPromisec                       s(   e Zd Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚDjangoUnicodeDecodeErrorc                    s   || _ tƒ j|Ž  d S )N)ÚobjÚsuperÚ__init__)Úselfr   Úargs©Ú	__class__© úR/var/www/html/myproject/venv/lib/python3.10/site-packages/django/utils/encoding.pyr
      s   z!DjangoUnicodeDecodeError.__init__c                    s   dt ƒ  ¡ | jt| jƒf S )Nz%s. You passed in %r (%s))r	   Ú__str__r   Útype)r   r   r   r   r      s   z DjangoUnicodeDecodeError.__str__)Ú__name__Ú
__module__Ú__qualname__r
   r   Ú__classcell__r   r   r   r   r      s    r   úutf-8FÚstrictc                 C   ó   t | tƒr| S t| |||ƒS )z©
    Return a string representing 's'. Treat bytestrings using the 'encoding'
    codec.

    If strings_only is True, don't convert (some) non-string-like objects.
    )Ú
isinstancer   Ú
force_text©ÚsÚencodingÚstrings_onlyÚerrorsr   r   r   Ú
smart_text   s   
r!   c                 C   s
   t | tƒS )z£Determine if the object instance is of a protected type.

    Objects of protected types are preserved as-is when passed to
    force_text(strings_only=True).
    )r   Ú_PROTECTED_TYPES)r   r   r   r   Úis_protected_type*   s   
r#   c              
   C   sx   t t| ƒtƒr	| S |rt| ƒr| S zt| tƒr t| ||ƒ} W | S t| ƒ} W | S  ty; } z	t| g|j¢R Ž ‚d}~ww )zÆ
    Similar to smart_text, except that lazy instances are resolved to
    strings, rather than kept as lazy objects.

    If strings_only is True, don't convert (some) non-string-like objects.
    N)	Ú
issubclassr   Ústrr#   r   ÚbytesÚUnicodeDecodeErrorr   r   )r   r   r   r    Úer   r   r   r   3   s   

ýþ€ÿr   c                 C   r   )z�
    Return a bytestring version of 's', encoded as specified in 'encoding'.

    If strings_only is True, don't convert (some) non-string-like objects.
    )r   r   Úforce_bytesr   r   r   r   Úsmart_bytesI   s   
r*   c                 C   s\   t | tƒr|dkr| S |  d|¡ ||¡S |rt| ƒr| S t | tƒr&t| ƒS t| ƒ ||¡S )zÇ
    Similar to smart_bytes, except that lazy instances are resolved to
    strings, rather than kept as lazy objects.

    If strings_only is True, don't convert (some) non-string-like objects.
    r   )r   r&   ÚdecodeÚencoder#   Ú
memoryviewr%   r   r   r   r   r)   U   s   

r)   zw
Apply smart_text in Python 3 and smart_bytes in Python 2.

This is suitable for writing to sys.stdout (for instance).
z;
Apply force_text in Python 3 and force_bytes in Python 2.
c                 C   s*   | du r| S t | tƒrt| ƒ} t| dd�S )uö  
    Convert an Internationalized Resource Identifier (IRI) portion to a URI
    portion that is suitable for inclusion in a URL.

    This is the algorithm from section 3.1 of RFC 3987, slightly simplified
    since the input is assumed to be a string rather than an arbitrary byte
    stream.

    Take an IRI (string or UTF-8 bytes, e.g. '/I â™¥ Django/' or
    b'/I Ã¢Â™Â¥ Django/') and return a string containing the encoded
    result with ASCII chars only (e.g. '/I%20%E2%99%A5%20Django/').
    Nz/#%[]=:;$&()+,!?*@'~©Úsafe)r   r   r%   r   )Úirir   r   r   Ú
iri_to_uriw   s
   
r1   )é-   é.   é_   é~   éA   é[   éa   é{   c                 C   s4   i | ]}|D ]}d D ]}||   ¡ t|fƒ“q
qqS ))z%02xz%02X)r,   r&   )Ú.0Úascii_rangeÚcharÚfmtr   r   r   Ú
<dictcomp>š   s    ýüý
ÿr>   Ú0123456789ABCDEFabcdefc                 C   s.   i | ]}t D ]}||  ¡ t || ¡“qqS r   )Ú_hexdigr,   r&   Úfromhex)r:   ÚaÚbr   r   r   r>   £   s    þÿÿé   c                 C   s¶   | du r| S t | ƒ} |  d¡}t|ƒdkr| }n=|d g}|j}t}|dd… D ]'}|dd… }||v rG|||dd…  ƒ ||dd… ƒ q(|dƒ ||ƒ q(d |¡}t|ƒ ¡ S )uL  
    Convert a Uniform Resource Identifier(URI) into an Internationalized
    Resource Identifier(IRI).

    This is the algorithm from section 3.2 of RFC 3987, excluding step 4.

    Take an URI in ASCII bytes (e.g. '/I%20%E2%99%A5%20Django/') and return
    a string containing the encoded result (e.g. '/I%20â™¥%20Django/').
    Nó   %é   r   é   ó    )r)   ÚsplitÚlenÚappendÚ
_hextobyteÚjoinÚrepercent_broken_unicoder+   )ÚuriÚbitsr0   ÚpartsrK   Ú	hextobyteÚitemÚhexr   r   r   Ú
uri_to_iri©   s$   




rU   c                 C   s   t | dd�S )zh
    Escape the unsafe characters from the path portion of a Uniform Resource
    Identifier (URI).
    z/:@&+$,-_.!~*'()r.   r   ©Úpathr   r   r   Úescape_uri_pathÍ   s   rX   c              
   C   st   	 z|   ¡  W | S  ty8 } z$t| |j|j… dd�}| d|j… t|ƒ | |jd…  } W Y d}~nd}~ww q)z¼
    As per section 3.2 of RFC 3987, step three of converting a URI into an IRI,
    repercent-encode any octet produced that is not part of a strictly legal
    UTF-8 octet sequence.
    Ts   /#%[]=:;$&()+,!?*@'~r.   N)r+   r'   r   ÚstartÚendr)   )rW   r(   Ú	repercentr   r   r   rN   Þ   s   
ú0€üýrN   c                 C   s    | du r| S t |  dd¡dd�S )aA  Convert a file system path to a URI portion that is suitable for
    inclusion in a URL.

    Encode certain chars that would normally be recognized as special chars
    for URIs. Do not encode the ' character, as it is a valid character
    within URIs. See the encodeURIComponent() JavaScript function for details.
    Nú\ú/z/~!*()'r.   )r   ÚreplacerV   r   r   r   Úfilepath_to_urið   s   r_   c                  C   s:   zt  ¡ d pd} t | ¡ W | S  ty   d} Y | S w )z´
    The encoding of the default system locale. Fallback to 'ascii' if the
    #encoding is unsupported by Python or could not be determined. See tickets
    #10335 and #5846.
    rF   Úascii)ÚlocaleÚgetdefaultlocaleÚcodecsÚlookupÚ	Exception)r   r   r   r   Úget_system_encodingÿ   s   þþrf   )r   Fr   )(rc   Údatetimera   Údecimalr   Úurllib.parser   Údjango.utilsr   Údjango.utils.functionalr   r'   r   Úpython_2_unicode_compatibler!   r   ÚintÚfloatÚdateÚtimer"   r#   r   r*   r)   Ú	smart_strÚ	force_strÚ__doc__r1   ÚrangeÚ_ascii_rangesrL   r@   ÚupdaterU   rX   rN   r_   rf   ÚDEFAULT_LOCALE_ENCODINGr   r   r   r   Ú<module>   sF    

ÿ
	

"þ

þ$
