HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/env/lib/python3.10/site-packages/cffi/__pycache__/verifier.cpython-310.pyc
o

%we�+�@s�ddlZddlZddlZddlZddlZddlmZddlmZddlm	Z	ej
dkr4ddlZdd�Z
nddlZd	d�Z
ej
d
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�F/home/arjun/projects/env/lib/python3.10/site-packages/cffi/verifier.py�_extension_suffixessr
cCsdd�t��D�S)NcSs g|]\}}}|tjkr|�qSr)�imp�C_EXTENSION)�.0�suffix�_�typerrr�
<listcomp>s
�z'_extension_suffixes.<locals>.<listcomp>)r�get_suffixesrrrrr
s�rcseZdZ�fdd�Z�ZS)�NativeIOcs(t|t�r
|�d�}tt|��|�dS)N�ascii)�
isinstance�unicode�encode�superr�write)�self�s��	__class__rrrs

zNativeIO.write)�__name__�
__module__�__qualname__r�
__classcell__rrr rrsrc@s�eZdZ			ddd�Zd dd�Zd	d
�Zdd�Zd
d�Zdd�Zdd�Z	dd�Z
dd�Zdd�Zd dd�Z
dd�Zdd�ZdS)!�VerifierN�F�.ccKsx|jjr
td|jjf��||_||_|st�|�}t||�}
|
|�|_|j�	|�|	|_
|�||
�|_|r=|r<t
d��nSd�dtjdd�t||g|j�}tjdkrZ|�d�}tt�|ddd��d	@�}|�d
��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�
_class_key�_get_so_suffixes�_caller_dir_pycache�tmpdir�os�path�sourcefilename�modulefilename�ext_package�_has_source�_has_module)rr0r1rF�
modulenamerK�tag�force_generic_engine�source_extensionr6�relative_tor8�flattened_kwds�
vengine_class�key�k1�k2rrrr�__init__ sR��


���


�

zVerifier.__init__cCsN|jj�|jr|durtd��|�|�Wd�dS1s wYdS)zkWrite the C source code.  It is produced in 'self.sourcefilename',
        which can be tweaked beforehand.Nzsource code already written)r0�_lockrLr�
_write_source�r�filerrr�write_sourceIs
�"�zVerifier.write_sourcecCsR|jj�|jrtd��|js|��|��Wd�dS1s"wYdS)z�Write the C source code (if not done already) and compile it.
        This produces a dynamic link library in 'self.modulefilename'.zmodule already compiledN)r0rYrMrrLrZ�_compile_module�rrrr�compile_moduleRs

"�zVerifier.compile_modulecCs^|jj�!|js|��|js|js|��|��|��Wd�S1s(wYdS)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)r0rYrM�_locate_modulerLrZr^�
_load_libraryr_rrr�load_library\s
$�zVerifier.load_librarycCsBtj�|j�}|�dd�d}|�d�rttd�r|dd�}|S)N�.rr�_d�gettotalrefcount���)rGrH�basenamerJ�split�endswith�hasattrr;)rrhrrr�get_module_namels
zVerifier.get_module_namecCsf|js|jj�|js|��Wd�n1swYt�|j�}|��}tj||fi|j	��Sr)
rLr0rYrZr�maybe_relative_pathrIrl�
get_extensionr8)r�
sourcename�modnamerrrrnws
��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>)
rGrHru�copyr�LIST_OF_FILE_NAMESr�list�tupler9)rr8rRrU�lstrrtrr7�s
��zVerifier.make_relative_tocCs�tj�|j�s:|jr$zt|jdddg�}Wn
tyYdSw|j}nd}|j�	|�
�|t��}|dur7dS||_|j��d|_
dS)N�__doc__T)rGrH�isfilerJrK�
__import__�ImportError�__path__r4�find_modulerlrD�
collect_typesrM)r�pkgrH�filenamerrrra�s"��

zVerifier._locate_modulecCs(||j_z|j��W|j`dS|j`wr)r4�_f�write_source_to_fr[rrr�_write_source_to�szVerifier._write_source_tocCs�|dur|�|�dSt�}|�|�|��}tj�|j�r<t|jd��}|��|k}Wd�n1s6wYnd}|r`t	|j�t|jd��
}|�
|�Wd�n1s[wYd|_dS)N�rT�w)r�r�getvaluerGrH�existsrI�open�read�_ensure_dirrrL)rr\�f�source_data�fp�
needs_writtenrrrrZ�s"
��
�
zVerifier._write_sourcecCsntj�|j�}t�||���}z	t�||j�}Wnt	y#d}Ynw|s2t
|j�t�||j�d|_
dS)NFT)rGrHrurIr�compilern�samefilerJ�OSErrorr��shutil�moverM)rrF�outputfilename�samerrrr^�s�

zVerifier._compile_modulecCs,|jsJ�|jdur|j�|j�S|j��Sr)rMr6r4rcr_rrrrb�s


zVerifier._load_library)NNNr'Fr(NNr)r"r#r$rXr]r`rcrlrnrrr7rar�rZr^rbrrrrr&s"
�
)	
	

r&FcCsvtrd}|s'dtjvrd}nzddl}Wntyd}Ynw|j|ur'd}|r2ddlm}|jSddlm	}|j
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"
�
r3cCsHtrtStj�d�}|r|St�d�jj}tj�	tj�
tj�|�d��S)N�CFFI_TMPDIRr*�__pycache__)�_TMPDIRrG�environ�getr;�	_getframe�f_code�co_filenamerH�abspathr:ru)�resultr�rrrrE�s�rEcCs|adS)z:Set the temporary directory to use instead of __pycache__.N)r�rtrrr�
set_tmpdirsr�c	Cs|pt�}zt�|�}Wn
tyYdSw|rd}nt�d��}|D]-}|���d�rR|���|�s<|���d�rRzt�tj	�
||��Wq%tyQYq%wq%tj	�
|d�g}|D]-}z"t�|�D]}tj	�
||�}tj	�|�rz|�|�qet�|�qeWq]ty�Yq]wdS)z}Clean up the temporary directory by removing all files in it
    called `_cffi_*.{c,so}` as well as the `build` subdirectory.Nr(r�_cffi_�build)
rErG�listdirr�rD�lower�
startswithrj�unlinkrHr:�isdir�append)rF�keep_so�filelistrrs�	clean_dir�dirrrr�cleanup_tmpdirsD
��������r�cCs(t�}|stjdkrdg}|Sdg}|S)N�win32z.pydz.so)r
r;�platform)�suffixesrrrrD$s
�rDcCs2tj�|�}|rtj�|�st�|�dSdSdSr)rGrHrur��makedirs)r�rurrrr�/s�r�)NF)r;rGr?r��ior'rr�errorrr<�importlib.machineryrr
r�StringIOr�BytesIO�objectr&r�r3r�rEr�r�rDr�rrrr�<module>s,(


?