HOME


Mini Shell 1.0
DIR: /snap/core20/current/usr/share/python3/debpython/__pycache__/
Upload File :
Current File : //snap/core20/current/usr/share/python3/debpython/__pycache__/interpreter.cpython-38.pyc
U

�zk^�4�@sxddlZddlZddlZddlmZmZddlmZddlm	Z	e�
dej�Ze�
dej�Z
e�e�ZGdd�d�ZdS)	�N)�join�split)�execute)�Versionz�
    (?:\#!\s*){0,1}  # shebang prefix
    (?P<path>
        .*?/bin/.*?)?
    (?P<name>
        python|pypy)
    (?P<version>
        \d[\.\d]*)?
    (?P<debug>
        -dbg)?
    (?P<options>.*)
    a-
    (?P<name>.*?)
    (?:\.
        (?P<stableabi>abi\d+)
     |(?:\.
        (?P<soabi>
            (?P<impl>cpython|pypy)
            -
            (?P<ver>\d{2})
            (?P<flags>[a-z]*?)
        )
        (?:
            -(?P<multiarch>[^/]*?)
        )?
    ))?
    (?P<debug>_d)?
    \.so$c@s�eZdZdZdZdZdZdZdZiZ	d)dd�Z
dd	�Zd
d�Zdd
�Z
dd�Zedd��Zd*dd�Zd+dd�Zd,dd�Zd-dd�Zd.dd�Zd/dd�Zd0dd�Zd1d d!�Zd2d"d#�Zd3d$d%�Zd4d'd(�ZdS)5�InterpreterN�pythonF�cpython�cCs�t�}|d=|d=t|t�rF|��D]}	||	dkr$t||	�||	<q$nR|r�|�dd���rl|slt|�|d<n,|�|��	�D]\}	}
||	dkrz|
||	<qz|�	�D]\}	}
t
||	|
�q�dS)N�self�value�.��version)�locals�
isinstancer�keys�getattr�replace�isdigitr�parse�items�setattr)r
r�path�namer�debug�impl�optionsZparams�key�valr	r	�+/usr/share/python3/debpython/interpreter.py�__init__Es

zInterpreter.__init__cCs�|dkrJ|rJ|�d�r"d|jd<n|�d�r6d|jd<d|krbd|jd<n|d	krb|dk	rbt|�}|d
kr�|dkr�tt|�|j|<n
||j|<dS)Nrrrr�pypyz-dbgTrr)rrrr)�
startswith�__dict__rrr)r
rrr	r	r�__setattr__Zs


zInterpreter.__setattr__cCs8|jpd}||�|j�7}|jr4|dd�|j�7}|S)Nr
� )r�_vstrrrr)r
�resultr	r	r�__repr__js

zInterpreter.__repr__cCs|�|j�S)N)r&r)r
r	r	r�__str__qszInterpreter.__str__cCsF|jdkr|jS|r@t|�|jkr@|jr2d�|�S|jt|�S|jS)Nr!zpython{}-dbg)rr�strr�format�r
rr	r	rr&ts

zInterpreter._vstrcCs:t�|�}|siS|��}d|kr6t|d���|d<|S)a�Return dict with parsed shebang

        >>> sorted(Interpreter.parse('pypy').items())
        [('debug', None), ('name', 'pypy'), ('options', ()), ('path', None), ('version', None)]
        >>> sorted(Interpreter.parse('/usr/bin/python3.3-dbg').items())
        [('debug', '-dbg'), ('name', 'python'), ('options', ()), ('path', '/usr/bin/'), ('version', '3.3')]
        >>> sorted(Interpreter.parse('#! /usr/bin/pypy --foo').items())
        [('debug', None), ('name', 'pypy'), ('options', ('--foo',)), ('path', '/usr/bin/'), ('version', None)]
        >>> sorted(Interpreter.parse('#! /usr/bin/python3.2').items())
        [('debug', None), ('name', 'python'), ('options', ()), ('path', '/usr/bin/'), ('version', '3.2')]
        >>> sorted(Interpreter.parse('/usr/bin/python3.2-dbg --foo --bar').items())
        [('debug', '-dbg'), ('name', 'python'), ('options', ('--foo', '--bar')), ('path', '/usr/bin/'), ('version', '3.2')]
        r)�
SHEBANG_RE�search�	groupdict�tupler)Zshebangr'r	r	rr~s
zInterpreter.parsecCsnt|p
|j�}|jdkrd}n0|td�>r4d|}n|td�>rJd|}nd}|rZd|}|rjd	||f}|S)
a�Return path to site-packages directory.

        Note that returned path is not the final location of .py files

        >>> i = Interpreter('python')
        >>> i.sitedir(version='3.1')
        '/usr/lib/python3/dist-packages/'
        >>> i.sitedir(version='2.5')
        '/usr/lib/python2.5/site-packages/'
        >>> i.sitedir(version=Version('2.7'))
        '/usr/lib/python2.7/dist-packages/'
        >>> i.sitedir(version='3.1', gdb=True, package='python3-foo')
        'debian/python3-foo/usr/lib/debug/usr/lib/python3/dist-packages/'
        >>> i.sitedir(version=Version('3.2'))
        '/usr/lib/python3/dist-packages/'
        >>> Interpreter('pypy').sitedir(version='2.0')
        '/usr/lib/pypy/dist-packages/'
        r!z/usr/lib/pypy/dist-packages/�2.6z /usr/lib/python%s/site-packages/z3.0z /usr/lib/python%s/dist-packages/z/usr/lib/python3/dist-packages/z/usr/lib/debug%szdebian/%s%s)rrr)r
Zgdb�packagerrr	r	r�sitedir�s


zInterpreter.sitedircCsvt|p
|j�}d|jkrdnd}|td�kr4||St|�\}}|�d�sR|d7}t|dd|dd	�|�|�|f�S)
a�Given path to a .py file, return path to its .pyc/.pyo file.

        This function is inspired by Python 3.2's imp.cache_from_source.

        :param fpath: path to file name
        :param version: Python version

        >>> i = Interpreter('python')
        >>> i.cache_file('foo.py', Version('3.1'))
        'foo.pyc'
        >>> i.cache_file('bar/foo.py', '3.2')
        'bar/__pycache__/foo.cpython-32.pyc'
        z-O�o�c�3.1z.py�__pycache__z
%s.%s.py%sN���)rrrr�endswithr�	magic_tag)r
ZfpathrZ	last_char�fdir�fnamer	r	r�
cache_file�s
�zInterpreter.cache_filecCs~t|p
|j�}|�|�\}}|�dd�d}|rP|d�|�7}|rP|d�|�7}|jrt|jdkrt|td�>rt|d7}d	�|�S)
z5Return extension name with soname and multiarch tags.r�rz.{}z-{}r�3Z_dz{}.so)rr�_get_configrr+rr)r
rr�soabi�	multiarchr'r	r	r�ext_file�s
�zInterpreter.ext_filecCs<t|p
|j�}|jdkr(|td�>r(dS|�d|�}t|�S)zReturn magic number.rr?r
z"import imp; print(imp.get_magic()))rrr�_execute�eval)r
rr'r	r	r�magic_number�s
zInterpreter.magic_numbercCs4t|p
|j�}|jdkr(|td�>r(dS|�d|�S)z�Return Python magic tag (used in __pycache__ dir to tag files).

        >>> i = Interpreter('python')
        >>> i.magic_tag(version='3.2')
        'cpython-32'
        r�3.2r
z import imp; print(imp.get_tag()))rrrrDr,r	r	rr:�szInterpreter.magic_tagcCsJt|p
|j�}z|�|�\}}Wn$tk
rDtjddd�YdSX|S)zReturn multiarch tag.zcannot get multiarchT��exc_infor
�rrr@�	Exception�logr�r
rrArBr	r	rrB�szInterpreter.multiarchcCs4t|p
|j�}|jdkr0|td�?r0d�|j�SdS)NrrGzabi{})rrrr+�majorr,r	r	r�	stableabiszInterpreter.stableabicCsJt|p
|j�}z|�|�\}}Wn$tk
rDtjddd�YdSX|S)z�Return SOABI flag (used to in .so files).

        >>> i = Interpreter('python')
        >>> i.soabi(version=Version('3.3'))
        'cpython-33m'
        zcannot get soabiTrHr
rJrMr	r	rrA	szInterpreter.soabic	Cs�t|p
|j�}d|kr(|�dd�\}}nd}t�|�}|s>dS|��}|drRdSt||d�}|dr�d�|dd	|dd�|_|js�|d
s�d|dp�dkr�d
|_z|�	�\}}Wn$t
k
r�tjdd
d�YdSX|d}|jdk�r|jd?�r|�
d��r|dd�}|d�s&|�rbd�||d�p8|�}|d�sL|�rbd�||d�p^|�}|d7}||k�rxdSt||�S)a�Return extension file name if file can be renamed.

        >>> i = Interpreter('python')
        >>> i.check_extname('foo.so', version='3.3') # doctest: +ELLIPSIS
        'foo.cpython-33m-....so'
        >>> i.check_extname('foo.abi3.so', version='3.3')
        >>> i.check_extname('foo/bar/bazmodule.so', version='3.3') # doctest: +ELLIPSIS
        'foo/bar/baz.cpython-33m-....so'
        �/r>r
NrO)rZverz{}.{}rr�d�flagsTzcannot get soabi/multiarchrHrrrG�modulei����rArBz{}-{}z.so)rr�rsplit�
EXTFILE_REr.r/rr+rr@rKrLrr9r)	r
r<rr;�info�irArBr'r	r	r�
check_extnames>

$
zInterpreter.check_extnamecCs�t|p
|j�}|jdksB|jdkrH|d?r2|d>sB|d?sB|dkrHd}nd}|d7}|�||��d	�}ztjd
|d<Wntk
r�YnX|S)Nr!rr1r?r6zimport sysconfig as s;z%from distutils import sysconfig as s;zOprint("__SEP__".join(i or "" for i in s.get_config_vars("SOABI", "MULTIARCH")))Z__SEP__ZDEB_HOST_MULTIARCHr>)rrrrDr�os�environ�KeyError)r
r�cmdZ	conf_varsr	r	rr@Ks&����zInterpreter._get_configTcCs�t|p
|j�}d�|�|�|�dd��}|rD||jjkrD|jj|St|�}|ddkrzt�	|d�t
d�||d���|d��}t|�dkr�|d}|r�||jj|<|S)	Nz
{} -c '{}'�'�
returncoder�stderrz{} failed with status code {}�stdoutr>)
rrr+r&r�	__class__�_cacherrLrrK�
splitlines�len)r
Zcommandr�cache�outputr'r	r	rrD^szInterpreter._execute)NNNNNNN)FNN)N)N)N)N)N)N)N)N)N)NT)�__name__�
__module__�__qualname__rrrrrrrbr r$r(r)r&�staticmethodrr3r=rCrFr:rBrOrArXr@rDr	r	r	rr<s:�



&







1
r)ZloggingrY�re�os.pathrrZ	debpythonrZdebpython.versionr�compile�VERBOSEr-rUZ	getLoggerrgrLrr	r	r	r�<module>s��