U
    as$                     @   sN  d dl Z 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d4ddZedeeeejejejfZdd Zd5ddZd6ddZd7ddZd8ddZd9ddZdd Zddddg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$d0d1 Z%d2d3 Z&e& Z'dS ):    N)Decimalquote)RemovedInDjango40Warning)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__ /home/adriano.carvalho/ftp/files/BrinquedotecaVirtual/brinquedotecavirtual/venv/lib/python3.8/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   s   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_strsencodingstrings_onlyerrorsr   r   r   	smart_str   s    
r    c                 C   s
   t | tS )zDetermine if the object instance is of a protected type.

    Objects of protected types are preserved as-is when passed to
    force_str(strings_only=True).
    )r   _PROTECTED_TYPES)r   r   r   r   is_protected_type'   s    r"   c              
   C   s~   t t| tr| S |r"t| r"| S z$t| tr<t| ||} nt| } W n2 tk
rx } zt| f|j W 5 d}~X Y nX | S )z
    Similar to smart_str(), 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   0   s    
"r   c                 C   s   t | tr| S t| |||S )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_bytesF   s    
r)   c                 C   s\   t | tr*|dkr| S | d|||S |r:t| r:| S t | trLt| 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(   R   s    

r(   c                 C   s   t jdtdd t| |||S )Nz3smart_text() is deprecated in favor of smart_str().   
stacklevel)warningswarnr   r    r   r   r   r   
smart_textf   s     r2   c                 C   s   t jdtdd t| |||S )Nz3force_text() is deprecated in favor of force_str().r-   r.   )r0   r1   r   r   r   r   r   r   
force_textn   s     r3   c                 C   s*   | dk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_uriv   s
    
r7   -   .   _   ~   A   [   a   {   c                 C   s4   i | ],}|D ]"}d D ]}||   t|fqqqS ))z%02xz%02X)r+   r%   ).0Zascii_rangecharfmtr   r   r   
<dictcomp>   s     
 rC   0123456789ABCDEFabcdefc                 C   s.   i | ]&}t D ]}||  t|| qqS r   )_hexdigr+   r%   fromhex)r@   abr   r   r   rC      s
     
    c                 C   s   | dkr| S t | } | d}t|dkr0| }nz|d g}|j}t}|dd D ]N}|dd }||kr|||dd   ||dd  qP|d || qPd|}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-       )r(   splitlenappend
_hextobytejoinrepercent_broken_unicoder*   )uribitsr6   partsrO   Z	hextobyteitemhexr   r   r   
uri_to_iri   s$    




rX   c                 C   s   t | ddS )zh
    Escape the unsafe characters from the path portion of a Uniform Resource
    Identifier (URI).
    z/:@&+$,-_.!~*'()r4   r   pathr   r   r   escape_uri_path   s    r[   c                 C   s   |  ddS )z:Return the Punycode of the given domain if it's non-ASCII.idnaascii)r+   r*   )domainr   r   r   punycode   s    r_   c              
   C   sv   z|    W n^ tk
rj } z@t| |j|j dd}| d|j |  | |jd  } W 5 d}~X Y q X | S q dS )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.
    s   /#%[]=:;$&()+,!?*@'~r4   N)r*   r&   r   startendr+   )rZ   r'   Z	repercentr   r   r   rR      s    6rR   c                 C   s    | dk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/~!*()'r4   )r   replacerY   r   r   r   filepath_to_uri   s    re   c                  C   s<   zt  d pd} t|  W n tk
r6   d} Y nX | S )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.
    rK   r]   )localegetdefaultlocalecodecslookup	Exception)r   r   r   r   get_system_encoding  s    
rk   )r   Fr   )r   Fr   )r   Fr   )r   Fr   )r   Fr   )r   Fr   )(rh   datetimerf   r0   decimalr   urllib.parser   Zdjango.utils.deprecationr   Zdjango.utils.functionalr   r&   r   r    r   intfloatdatetimer!   r"   r   r)   r(   r2   r3   r7   rangeZ_ascii_rangesrP   rE   updaterX   r[   r_   rR   re   rk   ZDEFAULT_LOCALE_ENCODINGr   r   r   r   <module>   sN   	
      	




"

$