/ lib / cffi / verifier.pyc
verifier.pyc
 1  o

 2  w��c(-�@s�ddlZddlZddlZddlZddlZddlmZddlmZddlm	Z	ej
 3  dkr4ddlZdd�Z
nddlZd	d�Z
ej
 4  d
 5  krEejZn	Gdd�dej�ZGd
d�de�ZdZdd�Zdadd�Zdd�Zddd�Zdd�Zdd�ZdS)�N�)�__version_verifier_modules__)�ffiplatform)�VerificationError)�rcCstjjdd�S�N)�	importlib�	machinery�EXTENSION_SUFFIXES�rr��C:\Users\Jacks.GUTTSPC\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\cffi\verifier.py�_extension_suffixessr
cCsdd�t��D�S)NcSs g|]\}}}|tjkr|�qSr)�imp�C_EXTENSION)�.0�suffix�_�typerrr�
 6  <listcomp>s
 7  �z'_extension_suffixes.<locals>.<listcomp>)r�get_suffixesrrrrr
s�rcseZdZ�fdd�Z�ZS)�NativeIOcs(t|t�r
 8  |�d�}tt|��|�dS)N�ascii)�
 9  isinstance�unicode�encode�superr�write)�self�s��	__class__rrrs
10  
11  zNativeIO.write)�__name__�
12  __module__�__qualname__r�
__classcell__rrr rrsrc@s�eZdZ			ddd�Zd dd�Zd	d
13  �Zdd�Zd
d�Zdd�Zdd�Z	dd�Z
14  dd�Zdd�Zd dd�Z
dd�Zdd�ZdS)!�VerifierN�F�.ccKsx|jjr
td|jjf��||_||_|st�|�}t||�}
|
|�|_|j�	|�|	|_
15  |�||
16  �|_|r=|r<t
d��nSd�dtjdd�t||g|j�}tjdkrZ|�d�}tt�|ddd��d	@�}|�d
17  ��d�}tt�|ddd��d	@�}|�d
��d�}d||jj||f}t�d}|p�t�|_tj�|j||�|_tj�|j||�|_ ||_!d|_"d|_#dS)NzKfeature not supported with ffi.verify(), but only with ffi.set_source(): %sz)can't specify both 'modulename' and 'tag'�z%d.%d�rzutf-8rl���0x�Lr�0z_cffi_%s_%s%s%sF)$�_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�
18  _class_key�_get_so_suffixes�_caller_dir_pycache�tmpdir�os�path�sourcefilename�modulefilename�ext_package�_has_source�_has_module)rr0r1rF�
19  modulenamerK�tag�force_generic_engine�source_extensionr6�relative_tor8Zflattened_kwdsZ
vengine_class�key�k1�k2rrrr�__init__ sR��
20  
21  
22  ���
23  
24  
25  �
26  
27  zVerifier.__init__cCsN|jj�|jr|durtd��|�|�Wd�dS1s wYdS)zkWrite the C source code.  It is produced in 'self.sourcefilename',
28          which can be tweaked beforehand.Nzsource code already written)r0�_lockrLr�
_write_source�r�filerrr�write_sourceIs
29  �"�zVerifier.write_sourcecCsR|jj�|jrtd��|js|��|��Wd�dS1s"wYdS)z�Write the C source code (if not done already) and compile it.
30          This produces a dynamic link library in 'self.modulefilename'.zmodule already compiledN)r0rWrMrrLrX�_compile_module�rrrr�compile_moduleRs
31  
32  "�zVerifier.compile_modulecCs^|jj�!|js|��|js|js|��|��|��Wd�S1s(wYdS)a"Get a C module from this Verifier instance.
33          Returns an instance of a FFILibrary class that behaves like the
34          objects returned by ffi.dlopen(), but that delegates all
35          operations to the C module.  If necessary, the C code is written
36          and compiled first.
37          N)r0rWrM�_locate_modulerLrXr\�
_load_libraryr]rrr�load_library\s
38  $�zVerifier.load_librarycCsBtj�|j�}|�dd�d}|�d�rttd�r|dd�}|S)N�.rr�_d�gettotalrefcount�����)rGrH�basenamerJ�split�endswith�hasattrr;)rrfrrr�get_module_namels
39  zVerifier.get_module_namecCsnt��|js"|jj�|js|��Wd�n1swYt�|j�}|��}tj	||fi|j
40  ��Sr)r�_hack_at_distutilsrLr0rWrX�maybe_relative_pathrIrj�
get_extensionr8)r�
41  sourcename�modnamerrrrmws
42  ��zVerifier.get_extensioncCs|jjSr)r4�_gen_python_moduler]rrr�generates_python_module�sz Verifier.generates_python_modulecsz|r;tj�|�r;tj�|��|��}tjD]%}||vr:||}t|ttf�s-t	d|f���fdd�|D�}|||<q|S)Nz&keyword '%s' should be a list or tuplecsg|]	}tj��|��qSr)rGrHr:)r�fn��dirnamerrr�sz-Verifier.make_relative_to.<locals>.<listcomp>)
43  rGrHrt�copyr�LIST_OF_FILE_NAMESr�list�tupler9)rr8rRrS�lstrrsrr7�s
44  ��zVerifier.make_relative_tocCs�tj�|j�s:|jr$zt|jdddg�}Wn
45  tyYdSw|j}nd}|j�	|�
46  �|t��}|dur7dS||_|j��d|_
dS)N�__doc__T)rGrH�isfilerJrK�
47  __import__�ImportError�__path__r4�find_modulerjrD�
collect_typesrM)r�pkgrH�filenamerrrr_�s"��
48  
49  zVerifier._locate_modulecCs(||j_z|j��W|j`dS|j`wr)r4�_f�write_source_to_frYrrr�_write_source_to�szVerifier._write_source_tocCs�|dur|�|�dSt�}|�|�|��}tj�|j�r<t|jd��}|��|k}Wd�n1s6wYnd}|r`t	|j�t|jd��
}|�
50  |�Wd�n1s[wYd|_dS)N�rT�w)r�r�getvaluerGrH�existsrI�open�read�_ensure_dirrrL)rrZ�fZsource_data�fpZ
needs_writtenrrrrX�s"
51  ��
52  �
53  zVerifier._write_sourcecCsntj�|j�}t�||���}z	t�||j�}Wnt	y#d}Ynw|s2t
54  |j�t�||j�d|_
dS)NFT)rGrHrtrIr�compilerm�samefilerJ�OSErrorr��shutil�moverM)rrF�outputfilename�samerrrr\�s�
55  
56  zVerifier._compile_modulecCs,|jsJ�|jdur|j�|j�S|j��Sr)rMr6r4rar]rrrr`�s
57  
58  
59  zVerifier._load_library)NNNr'Fr(NNr)r"r#r$rVr[r^rarjrmrqr7r_r�rXr\r`rrrrr&s"
6061  )	
62  
63  
64  
r&FcCsvtrd}|s'dtjvrd}nzddl}Wntyd}Ynw|j|ur'd}|r2ddlm}|jSddlm	}|j
65  S)NT�__pypy__r�?r)�vengine_gen)�vengine_cpy)�_FORCE_GENERIC_ENGINEr;�builtin_module_names�
_cffi_backendr}�_backendr'r��VGenericEnginer��VCPythonEngine)r0rPr�r�r�rrrr3�s"
66  �
67  r3cCsHtrtStj�d�}|r|St�d�jj}tj�	tj�
68  tj�|�d��S)NZCFFI_TMPDIRr*�__pycache__)�_TMPDIRrG�environ�getr;�	_getframe�f_code�co_filenamerH�abspathr:rt)�resultr�rrrrE�s�rEcCs|adS)z:Set the temporary directory to use instead of __pycache__.N)r�rsrrr�
69  set_tmpdirsr�c	Cs|pt�}zt�|�}Wn
70  tyYdSw|rd}nt�d��}|D]-}|���d�rR|���|�s<|���d�rRzt�tj	�
71  ||��Wq%tyQYq%wq%tj	�
72  |d�g}|D]-}z"t�|�D]}tj	�
73  ||�}tj	�|�rz|�|�qet�|�qeWq]ty�Yq]wdS)z}Clean up the temporary directory by removing all files in it
74      called `_cffi_*.{c,so}` as well as the `build` subdirectory.Nr(rZ_cffi_�build)
rErG�listdirr�rD�lower�
75  startswithrh�unlinkrHr:�isdir�append)rFZkeep_so�filelistrrrZ	clean_dir�dirrrr�cleanup_tmpdirsD
76  ��������r�cCs(t�}|stjdkrdg}|Sdg}|S)N�win32z.pydz.so)r
r;�platform)�suffixesrrrrD%s
77  �rDcCs2tj�|�}|rtj�|�st�|�dSdSdSr)rGrHrtr��makedirs)r�rtrrrr�0s�r�)NF)r;rGr?r��ior'rr�errorrr<�importlib.machineryrr
r�StringIOr�BytesIO�objectr&r�r3r�rEr�r�rDr�rrrr�<module>s,(
78  
79  
80  @
81  
82