o
    üÞhŒX  ã                   @  s:  d dl mZ d dlZd dlmZ d dlmZ ddlmZm	Z	m
Z
mZ ddlmZmZmZmZ ddlmZ dd	lmZmZ dd
lmZmZmZmZmZmZmZ e d¡Ze  ¡ Z!e! "e #d¡¡ 									d2d3d$d%„Z$									d2d4d(d)„Z%									d2d5d,d-„Z&									d6d7d0d1„Z'dS )8é    )ÚannotationsN)ÚPathLike)ÚBinaryIOé   )Úcoherence_ratioÚencoding_languagesÚmb_encoding_languagesÚmerge_coherence_ratios)ÚIANA_SUPPORTEDÚTOO_BIG_SEQUENCEÚTOO_SMALL_SEQUENCEÚTRACE)Ú
mess_ratio)ÚCharsetMatchÚCharsetMatches)Úany_specified_encodingÚcut_sequence_chunksÚ	iana_nameÚidentify_sig_or_bomÚis_cp_similarÚis_multi_byte_encodingÚshould_strip_sig_or_bomÚcharset_normalizerz)%(asctime)s | %(levelname)s | %(message)sé   é   çš™™™™™É?TFçš™™™™™¹?Ú	sequencesúbytes | bytearrayÚstepsÚintÚ
chunk_sizeÚ	thresholdÚfloatÚcp_isolationúlist[str] | NoneÚcp_exclusionÚpreemptive_behaviourÚboolÚexplainÚlanguage_thresholdÚenable_fallbackÚreturnr   c
           2      C  sœ	  t | ttfƒstd t| ƒ¡ƒ‚|rtj}
t t	¡ t 
t¡ t| ƒ}|dkrGt d¡ |r;t t	¡ t 
|
p9tj¡ tt| dddg dƒgƒS |dur]t td	d
 |¡¡ dd„ |D ƒ}ng }|durut tdd
 |¡¡ dd„ |D ƒ}ng }||| krŠt td|||¡ d}|}|dkrš|| |k ršt|| ƒ}t| ƒtk }t| ƒtk}|r²t td |¡¡ n|r½t td |¡¡ g }|rÅt| ƒnd}|dur×| |¡ t td|¡ tƒ }g }g }d}d}d}tƒ }tƒ }t| ƒ\}}|du�r| |¡ t tdt|ƒ|¡ | d¡ d|v�r| d¡ |t D �]7}|�r$||v�r$�q|�r.||v �r.�q||v �r5�q| |¡ d}||k}|�oFt|ƒ}|dv �rX|�sXt td|¡ �q|dv �ri|�sit td|¡ �qzt|ƒ}W n t t!f�yƒ   t td|¡ Y �qw z9|�r©|du �r©t"|du �r›| dtdƒ… n	| t|ƒtdƒ… |d� nt"|du �r±| n| t|ƒd… |d�}W n+ t#t$f�yè } zt |t$ƒ�sØt td|t"|ƒ¡ | |¡ W Y d}~�qd}~ww d} |D ]}!t%||!ƒ�rùd}  n�qí| �rt td||!¡ �qt&|�sdnt|ƒ|t|| ƒƒ}"|�o&|du�o&t|ƒ|k }#|#�r1t td |¡ tt|"ƒd! ƒ}$t'|$d"ƒ}$d}%d}&g }'g }(zLt(| ||"||||||ƒ	D ]=})|' |)¡ |( t)|)||du �ordt|ƒ  k�opd"kn  ƒ¡ |(d# |k�r€|%d7 }%|%|$k�s�|�r�|du �r� n�qSW n! t#�y³ } zt td$|t"|ƒ¡ |$}%d}&W Y d}~nd}~ww |&�sð|�rð|�sðz| td%ƒd… j*|d&d'� W n# t#�yï } zt td(|t"|ƒ¡ | |¡ W Y d}~�qd}~ww |(�rût+|(ƒt|(ƒ nd}*|*|k�s|%|$k�rJ| |¡ t td)||%t,|*d* d+d,�¡ |	�rH|dd|d-d.fv �rH|&�sHt| |||g ||d/�}+||k�r>|+}n
|dk�rF|+}n|+}�qt td0|t,|*d* d+d,�¡ |�s`t-|ƒ},nt.|ƒ},|,�rst td1 |t"|,ƒ¡¡ g }-|dk�r“|'D ]})t/|)||,�r‰d2 |,¡ndƒ}.|- |.¡ �q|t0|-ƒ}/|/�r¤t td3 |/|¡¡ t| ||*||/|du �s·||ddfv �r¹|nd|d/�}0| |0¡ ||ddfv �rõ|*d4k �rõ|*dk�rðt d5|0j1¡ |�rét t	¡ t 
|
¡ t|0gƒ  S | |0¡ t|ƒ�r-|du �s||v �r-d|v �r-d|v �r-| 2¡ }1t d5|1j1¡ |�r&t t	¡ t 
|
¡ t|1gƒ  S ||k�rNt d6|¡ |�rEt t	¡ t 
|
¡ t|| gƒ  S �qt|ƒdk�r¨|�s`|�s`|�rft td7¡ |�rvt d8|j1¡ | |¡ n2|�r~|du �s�|�r‹|�r‹|j3|j3k�s�|du�r›t d9¡ | |¡ n|�r¨t d:¡ | |¡ |�rºt d;| 2¡ j1t|ƒd ¡ nt d<¡ |�rÌt t	¡ t 
|
¡ |S )=af  
    Given a raw bytes sequence, return the best possibles charset usable to render str objects.
    If there is no results, it is a strong indicator that the source is binary/not text.
    By default, the process will extract 5 blocks of 512o each to assess the mess and coherence of a given sequence.
    And will give up a particular code page after 20% of measured mess. Those criteria are customizable at will.

    The preemptive behavior DOES NOT replace the traditional detection workflow, it prioritize a particular code page
    but never take it for granted. Can improve the performance.

    You may want to focus your attention to some code page or/and not others, use cp_isolation and cp_exclusion for that
    purpose.

    This function will strip the SIG in the payload/sequence every time except on UTF-16, UTF-32.
    By default the library does not setup any handler other than the NullHandler, if you choose to set the 'explain'
    toggle to True it will alter the logger configuration to add a StreamHandler that is suitable for debugging.
    Custom logging format and handler can be set manually.
    z3Expected object of type bytes or bytearray, got: {}r   z<Encoding detection on empty bytes, assuming utf_8 intention.Úutf_8g        FÚ Nz`cp_isolation is set. use this flag for debugging purpose. limited list of encoding allowed : %s.z, c                 S  ó   g | ]}t |d ƒ‘qS ©F©r   ©Ú.0Úcp© r5   úV/var/www/html/premium_crap/venv/lib/python3.10/site-packages/charset_normalizer/api.pyÚ
<listcomp>[   ó    zfrom_bytes.<locals>.<listcomp>zacp_exclusion is set. use this flag for debugging purpose. limited list of encoding excluded : %s.c                 S  r/   r0   r1   r2   r5   r5   r6   r7   f   r8   z^override steps (%i) and chunk_size (%i) as content does not fit (%i byte(s) given) parameters.r   z>Trying to detect encoding from a tiny portion of ({}) byte(s).zIUsing lazy str decoding because the payload is quite large, ({}) byte(s).z@Detected declarative mark in sequence. Priority +1 given for %s.zIDetected a SIG or BOM mark on first %i byte(s). Priority +1 given for %s.Úascii>   Úutf_16Úutf_32z\Encoding %s won't be tested as-is because it require a BOM. Will try some sub-encoder LE/BE.>   Úutf_7zREncoding %s won't be tested as-is because detection is unreliable without BOM/SIG.z2Encoding %s does not provide an IncrementalDecoderg    €„A)Úencodingz9Code page %s does not fit given bytes sequence at ALL. %sTzW%s is deemed too similar to code page %s and was consider unsuited already. Continuing!zpCode page %s is a multi byte encoding table and it appear that at least one character was encoded using n-bytes.é   é   éÿÿÿÿzaLazyStr Loading: After MD chunk decode, code page %s does not fit given bytes sequence at ALL. %sg     jè@Ústrict)Úerrorsz^LazyStr Loading: After final lookup, code page %s does not fit given bytes sequence at ALL. %szc%s was excluded because of initial chaos probing. Gave up %i time(s). Computed mean chaos is %f %%.éd   é   )Úndigitsr:   r;   )Úpreemptive_declarationz=%s passed initial chaos probing. Mean measured chaos is %f %%z&{} should target any language(s) of {}ú,z We detected language {} using {}r   z.Encoding detection: %s is most likely the one.zoEncoding detection: %s is most likely the one as we detected a BOM or SIG within the beginning of the sequence.zONothing got out of the detection process. Using ASCII/UTF-8/Specified fallback.z7Encoding detection: %s will be used as a fallback matchz:Encoding detection: utf_8 will be used as a fallback matchz:Encoding detection: ascii will be used as a fallback matchz]Encoding detection: Found %s as plausible (best-candidate) for content. With %i alternatives.z=Encoding detection: Unable to determine any suitable charset.)4Ú
isinstanceÚ	bytearrayÚbytesÚ	TypeErrorÚformatÚtypeÚloggerÚlevelÚ
addHandlerÚexplain_handlerÚsetLevelr   ÚlenÚdebugÚremoveHandlerÚloggingÚWARNINGr   r   ÚlogÚjoinr    r   r   r   ÚappendÚsetr   r
   Úaddr   r   ÚModuleNotFoundErrorÚImportErrorÚstrÚUnicodeDecodeErrorÚLookupErrorr   ÚrangeÚmaxr   r   ÚdecodeÚsumÚroundr   r   r   r	   r=   ÚbestÚfingerprint)2r   r   r!   r"   r$   r&   r'   r)   r*   r+   Úprevious_logger_levelÚlengthÚis_too_small_sequenceÚis_too_large_sequenceÚprioritized_encodingsÚspecified_encodingÚtestedÚtested_but_hard_failureÚtested_but_soft_failureÚfallback_asciiÚfallback_u8Úfallback_specifiedÚresultsÚearly_stop_resultsÚsig_encodingÚsig_payloadÚencoding_ianaÚdecoded_payloadÚbom_or_sig_availableÚstrip_sig_or_bomÚis_multi_byte_decoderÚeÚsimilar_soft_failure_testÚencoding_soft_failedÚr_Úmulti_byte_bonusÚmax_chunk_gave_upÚearly_stop_countÚlazy_str_hard_failureÚ	md_chunksÚ	md_ratiosÚchunkÚmean_mess_ratioÚfallback_entryÚtarget_languagesÚ	cd_ratiosÚchunk_languagesÚcd_ratios_mergedÚcurrent_matchÚprobable_resultr5   r5   r6   Ú
from_bytes!   s$  ÿÿ



üüûÿþÿþÿ
ý

ü




ÿýýýú
ÿú	
ÿú€ü
€÷þü
ýÿ
ýü
÷
&ýÿ
ÿ
€ÿü€öÿþýü
€ø

ú
ÿÿþù
	
ü
ÿþ
ýÿþ
ýò


þ


ÿ

þ


ý

÷þþÿ
þý




ý


r‘   Úfpr   c
           
      C  s   t |  ¡ |||||||||	ƒ
S )z†
    Same thing than the function from_bytes but using a file pointer that is already ready.
    Will not close the file pointer.
    )r‘   Úread)
r’   r   r!   r"   r$   r&   r'   r)   r*   r+   r5   r5   r6   Úfrom_fp!  s   ör”   Úpathústr | bytes | PathLikec
                 C  sH   t | dƒ�}
t|
|||||||||	ƒ
W  d  ƒ S 1 sw   Y  dS )z•
    Same thing than the function from_bytes but with one extra step. Opening and reading given file path in binary mode.
    Can raise IOError.
    ÚrbN)Úopenr”   )r•   r   r!   r"   r$   r&   r'   r)   r*   r+   r’   r5   r5   r6   Ú	from_path?  s   ö$ÿr™   Úfp_or_path_or_payloadú!PathLike | str | BinaryIO | bytesc
                 C  s‚   t | ttfƒrt| |||||||||	d�
}
|
 S t | ttfƒr0t| |||||||||	d�
}
|
 S t| |||||||||	d�
}
|
 S )a)  
    Detect if the given input (file, bytes, or path) points to a binary file. aka. not a string.
    Based on the same main heuristic algorithms and default kwargs at the sole exception that fallbacks match
    are disabled to be stricter around ASCII-compatible but unlikely to be a string.
    )	r   r!   r"   r$   r&   r'   r)   r*   r+   )rH   r_   r   r™   rJ   rI   r‘   r”   )rš   r   r!   r"   r$   r&   r'   r)   r*   r+   Úguessesr5   r5   r6   Ú	is_binary^  s\   ö-ßþþöóör�   )	r   r   r   NNTFr   T)r   r   r   r    r!   r    r"   r#   r$   r%   r&   r%   r'   r(   r)   r(   r*   r#   r+   r(   r,   r   )r’   r   r   r    r!   r    r"   r#   r$   r%   r&   r%   r'   r(   r)   r(   r*   r#   r+   r(   r,   r   )r•   r–   r   r    r!   r    r"   r#   r$   r%   r&   r%   r'   r(   r)   r(   r*   r#   r+   r(   r,   r   )	r   r   r   NNTFr   F)rš   r›   r   r    r!   r    r"   r#   r$   r%   r&   r%   r'   r(   r)   r(   r*   r#   r+   r(   r,   r(   )(Ú
__future__r   rV   Úosr   Útypingr   Úcdr   r   r   r	   Úconstantr
   r   r   r   Úmdr   Úmodelsr   r   Úutilsr   r   r   r   r   r   r   Ú	getLoggerrN   ÚStreamHandlerrQ   ÚsetFormatterÚ	Formatterr‘   r”   r™   r�   r5   r5   r5   r6   Ú<module>   st    $

ÿö    ö ö!ö