
    Yh+                     2   d dl Z 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	 e j                  dk\  rd dlZd Znd dlZd Ze j                  d	k\  rej                  Zn G d
 dej"                        Z G d de      ZdZd Zdad Zd ZddZd Zd Zy)    N   )__version_verifier_modules__)ffiplatform)VerificationError)   r   c                  <    t         j                  j                  d d  S N)	importlib	machineryEXTENSION_SUFFIXES     ^/var/www/django-portfolio.reubendavern.link/venv/lib/python3.12/site-packages/cffi/verifier.py_extension_suffixesr      s    ""55a88r   c                      t        j                         D  cg c]  \  } }}|t         j                  k(  r|  c}}} S c c}}} w r	   )impget_suffixesC_EXTENSION)suffix_types      r   r   r      sA    .1.>.>.@ , ,?61d3??*  , 	, ,s    >r   c                        e Zd Z fdZ xZS )NativeIOc                 n    t        |t              r|j                  d      }t        t        |   |       y )Nascii)
isinstanceunicodeencodesuperr   write)selfs	__class__s     r   r!   zNativeIO.write   s*    !W%HHW%(D'*r   )__name__
__module____qualname__r!   __classcell__)r$   s   @r   r   r      s    	+ 	+r   r   c                   f    e Zd Z	 	 	 ddZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd ZddZd Zd Zy)VerifierNc                    |j                   j                  r"t        d|j                   j                        || _        || _        |st        j                  |      }t        ||      } ||       | _        | j                  j                  |       |	| _
        | j                  ||
      | _        |r|rt        d      dj                  dt        j                   d d z  t"        |g|j$                  z         }t        j                   dk\  r|j'                  d      }t)        t+        j,                  |dd d         d	z        }|j/                  d
      j1                  d      }t)        t+        j,                  |dd d         d	z        }|j/                  d      j1                  d      }d|d| j                  j2                  ||}t5               d   }|xs
 t7               | _        t:        j<                  j                  | j8                  ||z         | _        t:        j<                  j                  | j8                  ||z         | _         || _!        d| _"        d| _#        y )NzIfeature not supported with ffi.verify(), but only with ffi.set_source(): z)can't specify both 'modulename' and 'tag' z%d.%d   r   zutf-8r   l    0xLr   0_cffi_r   F)$_parser_uses_new_featurer   ffipreambler   flatten_locate_engine_class_venginepatch_extension_kwdsflagsmake_relative_tokwds	TypeErrorjoinsysversion_infor   _cdefsourcesr   hexbinasciicrc32lstriprstrip
_class_key_get_so_suffixes_caller_dir_pycachetmpdirospathsourcefilenamemodulefilenameext_package_has_source_has_module)r"   r4   r5   rJ   
modulenamerO   tagforce_generic_enginesource_extensionr:   relative_tor<   flattened_kwdsvengine_classkeyk1k2r   s                     r   __init__zVerifier.__init__    s    ;;((#/2{{/L/LOP P  (006N,S2FG%d+**40
))$<	 KLL++w)9)9"1)==;'9 "../ 0C 4'jj)X^^C1I.;<B4'',BX^^C1I.;<B3&&s+B.14==3K3K.0"6J!#A&5 3 5 ggll4;;
EU8UV ggll4;;
V8KL&  r   c                     | j                   j                  5  | j                  r|t        d      | j	                  |       ddd       y# 1 sw Y   yxY w)zkWrite the C source code.  It is produced in 'self.sourcefilename',
        which can be tweaked beforehand.Nzsource code already written)r4   _lockrP   r   _write_sourcer"   files     r   write_sourcezVerifier.write_sourceI   sO     XX^^ 	%DL'13 3t$		% 	% 	%s   +AAc                     | j                   j                  5  | j                  rt        d      | j                  s| j                          | j                          ddd       y# 1 sw Y   yxY w)zWrite the C source code (if not done already) and compile it.
        This produces a dynamic link library in 'self.modulefilename'.zmodule already compiledN)r4   r^   rQ   r   rP   r_   _compile_moduler"   s    r   compile_modulezVerifier.compile_moduleR   sZ     XX^^ 	#'(ABB##""$  "	# 	# 	#s   AA$$A-c                 "   | j                   j                  5  | j                  sH| j                          | j                  s,| j                  s| j                          | j                          | j                         cddd       S # 1 sw Y   yxY w)a"  Get a C module from this Verifier instance.
        Returns an instance of a FFILibrary class that behaves like the
        objects returned by ffi.dlopen(), but that delegates all
        operations to the C module.  If necessary, the C code is written
        and compiled first.
        N)r4   r^   rQ   _locate_modulerP   r_   rd   _load_libraryre   s    r   load_libraryzVerifier.load_library\   so     XX^^ 	(####%''++**,((*%%'	( 	( 	(s   A$BBc                     t         j                  j                  | j                        }|j	                  dd      d   }|j                  d      rt        t        d      r|d d }|S )N.r   r   _dgettotalrefcount)rK   rL   basenamerN   splitendswithhasattrr?   )r"   rp   s     r   get_module_namezVerifier.get_module_namel   s]    77##D$7$78 >>#q)!, T"ws4F'G}Hr   c                 H   | j                   s;| j                  j                  5  | j                   s| j                          d d d        t	        j
                  | j                        }| j                         }t	        j                  ||fi | j                  S # 1 sw Y   YxY wr	   )
rP   r4   r^   r_   r   maybe_relative_pathrM   rt   get_extensionr<   )r"   
sourcenamemodnames      r   rw   zVerifier.get_extensionw   s     )''&&() !44T5H5HI
&&(((WJ		JJ) )s   BB!c                 .    | j                   j                  S r	   )r8   _gen_python_modulere   s    r   generates_python_modulez Verifier.generates_python_module   s    }}///r   c                    |rt         j                  j                  |      rt         j                  j                  |      }|j                         }t        j
                  D ]c  }||v s||   }t        |t        t        f      st        d|d      |D cg c]"  }t         j                  j                  ||      $ }}|||<   e |S c c}w )Nz	keyword 'z' should be a list or tuple)rK   rL   dirnamecopyr   LIST_OF_FILE_NAMESr   listtupler=   r>   )r"   r<   rV   r~   rY   lstfns          r   r;   zVerifier.make_relative_to   s    277??;7ggook2G99;D"55 $$;s)C%cD%=9'+.)1 2 2?BC277<<4CCC #DI$  Ds   'C	c                    t         j                  j                  | j                        sr| j                  r'	 t        | j                  d d dg      }|j                  }nd }| j                  j                  | j                         |t                     }|y || _        | j                  j                          d| _        y # t        $ r Y y w xY w)N__doc__T)rK   rL   isfilerN   rO   
__import__ImportError__path__r8   find_modulert   rH   collect_typesrQ   )r"   pkgrL   filenames       r   rh   zVerifier._locate_module   s    ww~~d112$T%5%5tTI;OC ||}}001E1E1G1A1CEH"*D##% # s   B> >	C
	C
c                     || j                   _        	 | j                   j                          | j                   `y # | j                   `w xY wr	   )r8   _fwrite_source_to_fr`   s     r   _write_source_tozVerifier._write_source_to   s8    	!MM++-  s	   : Ac                    || j                  |       y t               }| j                  |       |j                         }t        j                  j                  | j                        r4t        | j                  d      5 }|j                         |k(   }d d d        nd}rEt        | j                         t        | j                  d      5 }|j                  |       d d d        d| _        y # 1 sw Y   XxY w# 1 sw Y   xY w)NrTw)r   r   getvaluerK   rL   existsrM   openread_ensure_dirr!   rP   )r"   ra   fsource_datafpneeds_writtens         r   r_   zVerifier._write_source   s    !!$' 
A!!!$**,K ww~~d112$--s3 Cr)+k)A$BMC C !% D//0$--s3 *rHH[)*  $DC C* *s   ?C.C:.C7:Dc                 ~   t         j                  j                  | j                        }t	        j
                  || j                               }	 t	        j                  || j                        }|s5t        | j                         t        j                  || j                         d| _        y # t        $ r d}Y Lw xY w)NFT)rK   rL   r~   rM   r   compilerw   samefilerN   OSErrorr   shutilmoverQ   )r"   rJ   outputfilenamesames       r   rd   zVerifier._compile_module   s    !4!45$,,VT5G5G5IJ	''8K8KLD ++,KK(;(;<  	D	s    B. .B<;B<c                     | j                   sJ | j                  %| j                  j                  | j                        S | j                  j                         S r	   )rQ   r:   r8   rj   re   s    r   ri   zVerifier._load_library   sG    ::!==--djj99==--//r   )NNN F.cNNr	   )r%   r&   r'   r\   rb   rf   rj   rt   rw   r|   r;   rh   r   r_   rd   ri   r   r   r   r*   r*      sN    >B@E@D'!R%#( 	K0  &!$2 0r   r*   Fc                     t         rd}|s*dt        j                  v rd}n	 dd l}| j
                  |urd}|rddlm} |j                  S ddlm	} |j                  S # t        $ r d}Y Cw xY w)NT__pypy__r   ?r   )vengine_gen)vengine_cpy)_FORCE_GENERIC_ENGINEr?   builtin_module_names_cffi_backendr   _backendr   r   VGenericEnginer   VCPythonEngine)r4   rT   r   r   r   s        r   r7   r7      su    #111#' $$ ||=0'+$!)))!)))  $ #$s   A A)(A)c                  f   t         rt         S t        j                  j                  d      } | r| S t	        j
                  d      j                  j                  }t        j                  j                  t        j                  j                  t        j                  j                  |      d            S )NCFFI_TMPDIRr-   __pycache__)_TMPDIRrK   environgetr?   	_getframef_codeco_filenamerL   abspathr>   r~   )resultr   s     r   rI   rI      st    ZZ^^M*F}}Q&&22H77??277<<(A(* + +r   c                     | a y)z:Set the temporary directory to use instead of __pycache__.N)r   )r~   s    r   
set_tmpdirr      s	     Gr   c                 n   | xs
 t               } 	 t        j                  |       }|rd}nt	               d   j                         }|D ]  }|j                         j                  d      s#|j                         j                  |      s |j                         j                  d      sb	 t        j                  t        j                  j                  | |              t        j                  j                  | d      g}|D ]  }	 t        j                  |      D ]h  }t        j                  j                  ||      }t        j                  j                  |      r|j                  |       Tt        j                  |       j  y# t        $ r Y yw xY w# t        $ r Y ]w xY w# t        $ r Y w xY w)z}Clean up the temporary directory by removing all files in it
    called `_cffi_*.{c,so}` as well as the `build` subdirectory.Nr   r   r1   build)rI   rK   listdirr   rH   lower
startswithrr   unlinkrL   r>   isdirappend)rJ   keep_sofilelistr   r   	clean_dirdirs          r   cleanup_tmpdirr     sj    ,*,F::f% !#A&,,. 88:  *
##F+rxxz/B/B4/H		"'',,vr23	 fg./I 		jjo "WW\\#r*77==$$$R(IIbM"	      		s6   F	 *3FB F(		FF	F%$F%(	F43F4c                  T    t               } | st        j                  dk(  rdg} | S dg} | S )Nwin32z.pydz.so)r   r?   platform)suffixess    r   rH   rH   $  s5    "$H<<7"xH O wHOr   c                     t         j                  j                  |       }|r6t         j                  j                  |      st        j                  |       y y y r	   )rK   rL   r~   r   makedirs)r   r~   s     r   r   r   /  s9    ggooh'Grww}}W-
G .wr   )NF)r?   rK   rC   r   ior   r   r   errorr   r@   importlib.machineryr
   r   r   StringIOr   BytesIOobjectr*   r   r7   r   rI   r   r   rH   r   r   r   r   <module>r      s    % $ $ *  $v9 ,
 t{{H+2:: +z0v z0|  *, +
>	r   