
    !bt:                     "   S r SSKrSSKrSSKrSSKrSSKrSSKrSSKJrJrJ	r	J
r
JrJr  \r " S S\5      r " S S5      r0 rS rS9S
 jrS9S jrS9S jrSSKJr  \R2                  " 5       r\R                  rS rS rS r SSKJ r   S r!S r#\RH                  r$\\$l%        \/\$l&        \RN                  r'S\'l%        \/\'l&        \RP                  r(\\(l%        \/\(l&        \RR                  r)\\)l%        \/\)l&        \RT                  r+\\+l%        \\/\+l&        \\+l,        S r*\RZ                  r.\\.l%        \\
\	/\.l&        \\.l,        S r-\R^                  r/\\/l%        \\/\/l&        \\/l,        \R^                  r0\\0l%        \\/\0l&        \\0l,        S r/\Rb                  r2\\2l%        \\/\2l&        \\2l,        S r1\Rf                  r3\\3l%        \\/\3l&        \Rh                  r4\\4l%        \\/\4l&        \Rj                  r5\\5l%        \\/\5l&        S	r6\7" \S5      (       ad  \7" \S5      (       aV  Sr6\Rp                  r9\\9l%        \\\" \	5      /\9l&        \\9l,        \Rt                  r;\\;l%        \\\" \	5      /\;l&        \\;l,        S r8S r:S	r<\7" \S5      (       a  Sr<\Rz                  r=\\=l%        / \=l&        S  r>Sr?Sr@S!rAS"rBS#rCS$rDS%rES$rFS&rGS'rHS(rIS)rJS*rKS+rLS,rMS-rNS.rOS/rPS0rQS1rRS2rSS3rTS4rUSrVSrWS!rXS5rYS"rZS6r[S7r\S8 r]\]" \^" 5       5        g! \" a    S r! GNf = f):ai  
magic is a wrapper around the libmagic file identification library.

See README for more information.

Usage:

>>> import magic
>>> magic.from_file("testdata/test.pdf")
'PDF document, version 1.2'
>>> magic.from_file("testdata/test.pdf", mime=True)
'application/pdf'
>>> magic.from_buffer(open("testdata/test.pdf").read(1024))
'PDF document, version 1.2'
>>>

    N)c_char_pc_intc_size_tc_void_pbyrefPOINTERc                   (   ^  \ rS rSrU 4S jrSrU =r$ )MagicException    c                 8   > [         [        U ]  U5        Xl        g N)super	Exception__init__message)selfr   	__class__s     0/usr/lib/python3/dist-packages/magic/__init__.pyr   MagicException.__init__!   s    i'0    )r   )__name__
__module____qualname____firstlineno__r   __static_attributes____classcell__)r   s   @r   r
   r
       s     r   r
   c                   P    \ rS rSrSr  SS jrS rS rS rS r	S	 r
S
 rS rSrg)Magic&   z3
Magic is a wrapper around the libmagic C library.
Nc                    [         U l        U(       a  U =R                  [        -  sl        U(       a  U =R                  [        -  sl        U(       a  U =R                  [        -  sl        U(       a  U =R                  [
        -  sl        U(       a  U =R                  [        -  sl        U(       a  U =R                  [        -  sl        [        U R                  5      U l	        [        R                  " 5       U l        [        U R                  U5        U(       a$  [        (       a  [        5       S:  a  [!        S5      e["        (       a   U R%                  [&        S5        gg! [(         a
  n SnAgSnAff = f)a  
Create a new libmagic wrapper.

mime - if True, mimetypes are returned instead of textual descriptions
mime_encoding - if True, codec is returned
magic_file - use a mime database other than the system default
keep_going - don't stop at the first match, keep going
uncompress - Try to look inside compressed files.
raw - Do not try to decode "non-printable" chars.
extension - Print a slash-separated list of valid extensions for the file type found.
i  z<MAGIC_EXTENSION is not supported in this version of libmagic@   N)
MAGIC_NONEflagsMAGIC_MIME_TYPEMAGIC_MIME_ENCODINGMAGIC_CONTINUEMAGIC_COMPRESS	MAGIC_RAWMAGIC_EXTENSION
magic_opencookie	threadingLocklock
magic_load_has_versionversionNotImplementedError
_has_paramsetparamMAGIC_PARAM_NAME_MAXr
   )	r   mime
magic_filemime_encoding
keep_going
uncompressraw	extensiones	            r   r   Magic.__init__+   s      
JJ/)JJJ--JJJ.(JJJ.(JJJ)#JJJ/)J ,NN$	4;;
+ llgi#o%&dee :2B7  "  s   E% %
E94E9c                 T   U R                       [        U5      [        :X  a  [        [        :w  a  UR	                  SSS9n[        [        U R                  U5      5      sSSS5        $ ! [         a$  nU R                  U5      s SnAsSSS5        $ SnAff = f! , (       d  f       g= f)z 
Identify the contents of `buf`
utf-8replace)errorsN)
r.   typestrbytesencodemaybe_decodemagic_bufferr+   r
   _handle509Bug)r   bufr=   s      r   from_bufferMagic.from_buffer^   s     YY	-
 9#u**WY*?C#Lc$BC Y " -))!,, Y- Ys5   BAA((
B2BBBBB
B'c                 >   [        U5          S S S 5        U R                      [        [        U R                  U5      5      sS S S 5        $ ! , (       d  f       ND= f! [
         a$  nU R                  U5      s S nAsS S S 5        $ S nAff = f! , (       d  f       g = fr   )
_real_openr.   rG   r7   r+   r
   rI   )r   filenamer=   s      r   	from_fileMagic.from_filen   st    ! " YY-#Jt{{H$EF Y "! " -))!,,	 Y- Ys?   ABA
A
B'B7B8BBB
Bc                     U R                       [        [        U R                  U5      5      sS S S 5        $ ! [         a$  nU R                  U5      s S nAsS S S 5        $ S nAff = f! , (       d  f       g = fr   )r.   rG   magic_descriptorr+   r
   rI   )r   fdr=   s      r   from_descriptorMagic.from_descriptory   s[    YY-#$4T[["$EF Y " -))!,,	 Y- Ys2   A(7
A%A A%A( A%%A((
A6c                 R    UR                   c  U R                  [        -  (       a  gUe)Nzapplication/octet-stream)r   r#   r$   )r   r=   s     r   rI   Magic._handle509Bug   s!     99$**">-Gr   c                 .    [        U R                  X5      $ r   )magic_setparamr+   )r   paramvals      r   r4   Magic.setparam   s    dkk566r   c                 .    [        U R                  U5      $ r   )magic_getparamr+   )r   r[   s     r   getparamMagic.getparam   s    dkk511r   c                     [        U S5      (       a;  U R                  (       a)  [        (       a  [        U R                  5        S U l        g g g g )Nr+   )hasattrr+   magic_close)r   s    r   __del__Magic.__del__   s9     4""t{{{{$DK 8C{"r   )r+   r#   r.   )FNFFFFF)r   r   r   r   __doc__r   rK   rP   rU   rI   r4   r`   re   r    r   r   r   r   &   s:     CHJO1f- 	--72r   r   c                 Z    [         R                  U 5      nUc  [        U S9=n[         U '   U$ )N)r6   )
_instancesgetr   )r6   is     r   _get_magic_typerm      s.    tAy$$//JtHr   Fc                 :    [        U5      nUR                  U 5      $ )z"
Accepts a filename and returns the detected filetype.  Return
value is the mimetype if mime=True, otherwise a human readable
name.

>>> magic.from_file("testdata/test.pdf", mime=True)
'application/pdf'
)rm   rP   )rO   r6   ms      r   rP   rP      s     	A;;x  r   c                 :    [        U5      nUR                  U 5      $ )z
Accepts a binary string and returns the detected filetype.  Return
value is the mimetype if mime=True, otherwise a human readable
name.

>>> magic.from_buffer(open("testdata/test.pdf").read(1024))
'PDF document, version 1.2'
)rm   rK   )bufferr6   ro   s      r   rK   rK      s     	A==  r   c                 :    [        U5      nUR                  U 5      $ )z
Accepts a file descriptor and returns the detected filetype.  Return
value is the mimetype if mime=True, otherwise a human readable
name.

>>> f = open("testdata/test.pdf")
>>> magic.from_descriptor(f.fileno())
'PDF document, version 1.2'
)rm   rU   )rT   r6   ro   s      r   rU   rU      s     	AR  r      )loaderc                 >    U c  [        US   5      n[        U5      eU $ )Nr   magic_errorr
   resultfuncargserrs       r   errorcheck_nullr}      s%    ~$q'"S!!r   c                 D    U S:X  a  [        US   5      n[        U5      eU $ )Nr   rv   rx   s       r   errorcheck_negative_oner      s'    |$q'"S!!r   c                 F    [         [        :X  a  U $ U R                  SS5      $ )Nr@   backslashreplace)rD   rE   decode)ss    r   rG   rG      s"    
e| xx!344r   )PathLikec                 P    [        U [        5      (       a  U R                  5       $ U $ r   )
isinstancer   
__fspath__rO   s    r   unpathr      s#    h))&&((Or   c                     U $ r   rh   r   s    r   r   r      s    r   c                    U c  g [        U 5      n [        R                  S   S:*  =(       a    [        U [        5      =(       d-    [        R                  S   S:  =(       a    [        U [
        5      nU(       a  U R                  SS5      $ U $ )Nr         r@   surrogateescape)r   sysversion_infor   unicoderD   rF   )rO   
is_unicodes     r   coerce_filenamer      s    hH ""1%* /Hg.-""1%* ,Xs+  w(9::r   c                 ,    [        U [        U5      5      $ r   )_magic_filer   r+   rO   s     r   r7   r7   (      vx899r   c                 ,    [        X[        U5      5      $ r   )_magic_bufferlen)r+   rJ   s     r   rH   rH   2  s    c#h//r   c                     [        X5      $ r   )_magic_descriptor)r+   rT   s     r   rS   rS   A  s    V((r   c                 ,    [        U [        U5      5      $ r   )_magic_loadr   r   s     r   r/   r/   K  r   r   rZ   r_   Tc                 n    [         (       d  [        S5      e[        U5      n[        X[	        U5      5      $ )Nzmagic_setparam not implemented)r3   r2   r   _magic_setparamr   )r+   r[   r\   vs       r   rZ   rZ   i  s-    :!"BCCA6%(33r   c                     [         (       d  [        S5      e[        5       n[        X[	        U5      5        UR
                  $ )Nzmagic_getparam not implemented)r3   r2   r   _magic_getparamr   value)r+   r[   r\   s      r   r_   r_   p  s2    :!"BCC
*CF5:.99r   magic_versionc                  B    [         (       d  [        S5      e[        5       $ )Nzmagic_version not implemented)r0   r2   r   rh   r   r   r1   r1     s    <!"ABB?r   r            i   i   r   r!         i   i   i    i @  i   i   i   i   i   i   r         c                 v  ^
 SS K m
SS KnSSKJn  U
4S jn/ SQnU H  nU" UR                  U   5      X'   M     UR                  S5      n[        S/5      nUR                  R                  5        HE  u  pUR                  U5      (       d  M  X;   a  X;   a  M)  X   U	:w  a  [        SU-   5      eMA  XU'   MG     g )Nr   )compatc                    >^  U U4S jnU$ )Nc                  @   > TR                  S[        5        T" U 0 UD6$ )NzUsing compatibility mode with libmagic's python binding. See https://github.com/ahupp/python-magic/blob/master/COMPAT.md for details.)warnPendingDeprecationWarning)r{   kwargsfnwarningss     r   _3_add_compat.<locals>.deprecation_wrapper.<locals>._  s*    MM_)+
 t&v&&r   rh   )r   r   r   s   ` r   deprecation_wrapper(_add_compat.<locals>.deprecation_wrapper  s    	' r   )detect_from_filenamedetect_from_contentdetect_from_fobjopenz	^[A-Z_]+$
MAGIC_MIMEzinconsistent value for )
r   remagicr   __dict__compilesetitemsmatchr   )	to_moduler   r   r   r   fnameis_const_reallowed_inconsistentnamer   r   s             @r   _add_compatr     s    	
B .vu/EF	  **[)K~.,,.T"" /?e+#$=$DEE"'$ /r   )F)_rg   r   globctypesctypes.utilr,   loggingr   r   r   r   r   r   r   rN   r   r
   r   rj   rm   rP   rK   rU    rt   load_liblibmagicmagic_tr}   r   rG   osr   r   ImportErrorr   r*   restypeargtypesrd   rw   magic_errnor7   r   errcheckrH   r   rS   r   r/   r   magic_setflagsmagic_checkmagic_compiler3   rc   rZ   r   r_   r   r0   r   r1   r"   MAGIC_DEBUGMAGIC_SYMLINKr'   MAGIC_DEVICESr$   r%   r   r)   r&   MAGIC_CHECKMAGIC_PRESERVE_ATIMEr(   MAGIC_ERRORMAGIC_NO_CHECK_COMPRESSMAGIC_NO_CHECK_TARMAGIC_NO_CHECK_SOFTMAGIC_NO_CHECK_APPTYPEMAGIC_NO_CHECK_ELFMAGIC_NO_CHECK_ASCIIMAGIC_NO_CHECK_TROFFMAGIC_NO_CHECK_FORTRANMAGIC_NO_CHECK_TOKENSMAGIC_PARAM_INDIR_MAXr5   MAGIC_PARAM_ELF_PHNUM_MAXMAGIC_PARAM_ELF_SHNUM_MAXMAGIC_PARAM_ELF_NOTES_MAXMAGIC_PARAM_REGEX_MAXMAGIC_PARAM_BYTES_MAXr   globalsrh   r   r   <module>r      s  $       F F 
Y v vr 

!
!! ??
//5	*   

 g
 "" y "" y "" y !! * & : %%  !8X6 ( 0 ,, #  $e,  +  -- $  %u-  ,  ) !! * . : (( "E* "" * && !8, 

8%&&78=M+N+NJ--O#O '0ABO6O--O#O '0ABO6O4 
8_%%L**M!MM 
  
 	"   !    !          #(L GI y  s   	L 	LL