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: //proc/self/root/usr/share/dh-python/dhpython/__pycache__/pydist.cpython-310.pyc
o

O�Ib�_�@s�ddlZddlZddlZddlZddlZddlmZddlmZm	Z	m
Z
ddlmZm
Z
edkrEddlZej�ej�e
ej�e�d���ddlmZmZmZmZmZddlmZmZdd	lmZdd
l m!Z!m"Z"e�#d�Z$e�%dej&�Z'e�%d
ej&�Z(e�%dej&�Z)e�%dej&�Z*ddddd�Z+dd�Z,edd��Z-		d9dd�Z.dd�Z/		d:dd�Z0		d:d d!�Z1d"d#�Z2d$d%�Z3d&d'�Z4e�%d(�Z5e�%d)�Z6d*d+�Z7d,d-�Z8d.d/�Z9d0d1�Z:edk�rFej;�<d2d3�Z=ej>d4d�D]ZZ?ej�@e?��rzeAd5�
e0e=e?�d6��Wq�eB�yZCz
e$�Dd7e?eC�WYdZC[Cq�dZC[CwwzeAe.e=e?��p(d8�Wq�eB�yEZCz
e$�Dd7e?eC�WYdZC[Cq�dZC[CwwdSdS);�N)�partial)�exists�isdir�join)�PIPE�Popen�__main__z..)�PKG_PREFIX_MAP�
PUBLIC_DIR_RE�PYDIST_DIRS�PYDIST_OVERRIDES_FNAMES�PYDIST_DPKG_SEARCH_TPLS)�ComplexEnvironmentMarker�parse_environment_marker)�memoize)�get_requested_versions�Version�dhpythona�
    (?P<name>[A-Za-z][A-Za-z0-9_.-]*)            # Python distribution name
    \s*
    (?P<vrange>(?:-?\d\.\d+(?:-(?:\d\.\d+)?)?)?) # version range
    \s*
    (?P<dependency>(?:[a-z][^;]*)?)              # Debian dependency
    (?:  # optional upstream version -> Debian version translator
        ;\s*
        (?P<standard>PEP386)?                    # PEP-386 mode
        \s*
        (?P<rules>(?:s|tr|y).*)?                 # translator rules
    )?
    a�
    (?P<name>[A-Za-z][A-Za-z0-9_.-]*)    # Python distribution name
    \s*
    (?P<enabled_extras>(?:\[[^\]]*\])?)  # ignored for now
    \s*
    \(?  # optional parenthesis
    (?:  # optional minimum/maximum version
        (?P<operator><=?|>=?|==|!=|~=)
        \s*
        (?P<version>(\w|[-.*])+)
        (?:  # optional interval minimum/maximum version
            \s*
            ,
            \s*
            (?P<operator2><=?|>=?|==|!=)
            \s*
            (?P<version2>(\w|[-.])+)
        )?
    )?
    \)?  # optional closing parenthesis
    \s*
    (?:;  # optional environment markers
        (?P<environment_marker>.+)
    )?
    zx
    ;
    \s*
    extra
    \s*
    ==
    \s*
    (?P<quote>['"])
    (?P<section>[a-zA-Z0-9-_.]+)
    (?P=quote)
    z�
    ^
    \[
    (?P<section>[a-zA-Z0-9-_.]+)?
    \s*
    (?::
        (?P<environment_marker>.+)
    )?
    \]
    \s*
    $
    �=�<<z>>�>=)�==�<�>�~=c	Cs�t|dd��5}|D])}|��}|�d�s|sq	t�|�s2t�d|�dd�d|�Wd�d	Sq	Wd�d
S1s>wYd
S)z Check if pydist file looks good.�utf-8��encoding�#z"invalid pydist data in file %s: %s�/����NFT)�open�strip�
startswith�	PYDIST_RE�match�log�error�rsplit)�fpath�fp�line�r-�'/usr/share/dh-python/dhpython/pydist.py�validateps"
���
�	�	r/c
	sTt�|�}t|�r
|g}ng}t�|��t��r'|��fdd�t���D��d�|�}t|�r5|�	|�i}|D]n}t
|dd��^}|D]S}|��}|�d�sQ|sRqDt
�|�}|satd||f��|��}t|d�}	t||d	�|d
<|d��|d<|dr�|d�d
�|d<ng|d<|�|	g��	|�qDWd�n1s�wYq9|S)z�Load iformation about installed Python distributions.

    :param impl: interpreter implementation, f.e. cpython2, cpython3, pypy
    :type impl: str
    c3s�|]}t�|�VqdS�N)r��.0�i��dnamer-r.�	<genexpr>�s�zload.<locals>.<genexpr>z%/usr/share/dh-python/dist/{}_fallbackrrrzinvalid pydist line: %s (in %s)�name�vrange�versions�
dependency�rules�;N)r�getrrr�extend�os�listdir�format�appendr"r#r$r%�search�	Exception�	groupdict�	safe_namer�split�
setdefault)
�impl�fname�to_check�fbname�resultr*r+r,�distr7r-r4r.�load~s@




���rOFcCs�|pi}t�d||�t|t�rt|�}t�d��|���\}}t	|�|}t
|�}t�|�}|s<t�d�t
d|��|��}d}	|dr]t||d|�}
|
durTdS|
durYnd	|
}	|d
}|�|���}|�r�|D�]W}|r{||�d|�vr{qm|ds�dS|d�d
�r�|d|	S|ddkr�|d�d�r�d|d<|d�dd�|d<|d�r2|ds�|d�r2|ddv�r2t|d�}
t|d|d|d�}d|d|
||	f}|d�r|ddv�rt|d�}t|d|d|d�}|d|d|||	f7}|S|ddk�r.d}tt|d�|d|d�}|d|d|||	f7}|S|�r�|d�r�|ddv�r�t|d�}
d|d|
|d|	f}|d�rw|ddv�rwt|d�}|d|d||d|	f7}|S|ddk�r�d}|d|d|t|d�|	f7}|S|d|v�r�d||dv�r�||dd�r�d�|d||dd|	�S|d|	St|\}}|�tt	|���}t�d|�tdd|fttd �}|��\}}|jd!k�r@t�}t|d"�}|�d#�D]#}|� ��s�q�|�d$d%�\}}|�rt�!||��s�q�|�"|��q�t#|�d%k�r0t�$d&|�n|�s:t�d'|�n
|�%�|	St�d(||�t&||�}t�d)|t	|�|t'|�dS)*Nz,trying to find dependency for %s (python=%s)z([^!><=~ \(\)\[;]+)(.*)z[please ask dh_python3 author to fix REQUIRES_RE or your upstream author to fix requires.txtzrequirement is not valid: %s��environment_markerFT� r7r9r:�)�operatorr�version�*r�0�standardr;)N�!=z%s (%s %s)%s�version2�	operator2z, %s (%s %s)%srz	{} ({}){}zinvoking dpkg -S %sz
/usr/bin/dpkgz-S)�stdout�stderrrr�
�:r z,more than one package name found for %s distz#dpkg -S did not find package for %sz'dpkg -S did not find package for %s: %sz�Cannot find package that provides %s. Please add package that provides it to Build-Depends or add "%s %s" line to %s or add proper dependency to Depends by hand and ignore this info.)(r'�debug�
isinstance�strr�re�compiler&�groupsrFrO�REQUIRES_RE�inforDrE�%check_environment_marker_restrictionsr=�lower�endswith�replace�
_translate_op�
_translate�_max_compatiblerAr
�	ci_regexprr�communicate�
returncode�setrGr#rC�add�lenr(�pop�sensible_pnamer)rI�reqrU�bdep�accept_upstream_versionsr7�rest�data�req_d�env_marker_alts�action�details�item�o�v�d�o2�v2�dpkg_query_tpl�regex_filter�
dpkg_query�processr\r]rMr,�pkg�path�pnamer-r-r.�guess_dependency�s��


�
��������$�
�


�r�cCsp|dkrt�d|�dSz	t|�\}}}Wnty%t�d|�YdSwdddt��fdd	d
�}||vrb||}|dvrZ|dkrF||vsN|d
krX||vrXt�d|||�dSdSt�d|�dS|dv�r�|}|�d�}	|dkrud}
n|dkr|d}
nt|	�}
d|vr�|	�	d�t|	�dkr�t�d|�dS|	�
�d�|	�}|dkr�|dkr�d}d}
n#|dkn|d
kr�|dkr�d}d}
nt�d|�dSt�d||�dSdd�|	D�}	t|	�|
kr�|	�d�|d 7}|	�
�}||
dd7<d�d!d"�|D��}|	�
�}||
dd8<d�d#d"�|D��}|d$k�r)|	gd%�k�r$dSd&�|�S|d'k�r3d&�|�S|d(k�rF|	gd%�k�rAdSd)�|�S|d*k�rY|	gd%�k�rTdSd)�|�S|d+v�rw|dk�sh|dk�rnd,�||�St�d-||�dS|d.k�r�|	d/d�}
|
dd7<d�d0d"�|
D��}
d,�||
�S|d
k�r�t�d1|�dSdS|d2k�r�dSt�d3|�dS)4z�Check wither we should include or skip a dependency based on its
    environment markers.

    Returns: True  - to keep a dependency
             False - to skip it
             str   - to append "| foo" to generated dependencies
    �cpython3z3Ignoring environment markers for non-Python 3.x: %sFz'Ignoring complex environment marker: %s)�cpython�pypy)�posix)zGNU/kFreeBSD�Linux)�CPython�PyPy)�gnukfreebsd8�gnukfreebsd9�
gnukfreebsd10�
gnukfreebsd11�
gnukfreebsd12�
gnukfreebsd13�linux)�implementation_name�os_name�platform_system�platform_machine�platform_python_implementation�sys_platform)rrYrrYz#Skipping requirement (%s != %s): %szESkipping requirement with unhandled environment marker comparison: %s)�python_version�python_full_version�implementation_version�.r��r��rVr z3Skipping requirement with intermediate wildcard: %sz=~zAIgnoring wildcard != requirement, not representable in Debian: %sTz.Skipping requirement with %s on a wildcard: %scSsg|]}t|��qSr-)�int�r2�xr-r-r.�
<listcomp>sz9check_environment_marker_restrictions.<locals>.<listcomp>rz.0cs��|]}t|�VqdSr0�rbr�r-r-r.r6���z8check_environment_marker_restrictions.<locals>.<genexpr>csr�r0r�r�r-r-r.r6�r�r)r�rrz| python3 (>> {})z<=rz| python3 (<< {})r)rz===z#| python3 (<< {}) | python3 (>> {})zPSkipping requirement with %s environment marker, cannot model in Debian deps: %srNcsr�r0r�r�r-r-r.r6�r�zMIgnoring != comparison in environment marker, cannot model in Debian deps: %s�extraz8Skipping requirement with unknown environment marker: %s)r'rgrr�platform�machiner`rGrt�indexrurrB�copyrA)rw�
marker_strrI�marker�op�value�supported_values�sv�env_ver�int_ver�
version_parts�next_ver�prev_ver�ceq_next_verr-r-r.rh,s����a��

�

��









��
�
�	
��rhc	sB|pg}|pg}|pg}t|�|�}d}|r)|��r)t|�d��dkr)|�d�}tt|||t|dd�d�}	gggd�}
d}}d�g}
t|ddd	���}|D]�}|�	�}|r[|�
d
�ra|
�|�qN|�
d�r�t�|�}|s|t
�d|�|
�|�t�}qN|�d
�}d�|�d�r�t||�d�|��|
�|�qN|r�||vr�d}n||vr�d}n||vr�d}n|
�|�qNd}d}�r�|	|d�}|r�t�t�r�d��fdd�|�d�D��}|r�|
|�|�d}qN|
�|�qNWd�n1s�wY|�r|�rt|ddd	��}|�dd�|
D��Wd�|
S1�swY|
S)Nr ryF�rIrUrxry��depends�
recommends�suggestsT�rrrr�[z+Skipping section %s, unable to parse header�sectionrQr�r�r��rw�, c3s �|]}|��d�VqdS)rRN)r#)r2�part��
env_actionr-r.r6�s
��
�zparse_pydep.<locals>.<genexpr>�,�wcss�|]}|dVqdS)r^Nr-r1r-r-r.r6�r�)r
r&rert�grouprr��getattrr"r#r$rB�REQ_SECTIONS_REr'rg�objectrhrarbrrG�
writelines)rIrJrx�options�depends_sec�recommends_sec�suggests_sec�
public_dir�ver�
guess_depsrM�modifiedr��	processedr+r,�m�
result_keyr:r-r�r.�parse_pydep�s�

��


�


�


���1
��r�c	Cs:|pg}|pg}|pg}t|�|�}d}|r)|��r)t|�d��dkr)|�d�}tt|||t|dd�d�}	gggd�}
d}t|ddd	��}t	�
|���}
Wd�n1sWwY|
�d
g�}|D]6}t
�|�}d}|r�|�d�}|r�||vr}d}n||vr�d
}n||vr�d}nqd|	|d�}|r�|
|�|�qd|
S)z3Extract dependencies from a dist-info/METADATA fileNr ryFr�r�r�rrz
Requires-Distr�r�r�r�r�)r
r&rertr�rr�r�r"�email�message_from_string�read�get_all�EXTRA_RErCrB)rIrJrxr�r�r�r�r�r�r�rMr�r+�metadata�requiresrwr�r�r:r-r-r.�parse_requires_distsH

���


�r�cCst�d��d|���S)zEmulate distribute's safe_name.z[^A-Za-z0-9.]+�_)rcrd�subri�r7r-r-r.rF)srFcCs:t|��dd�}|�d�r|dd�}d�t||���S)z(Guess Debian package name from Egg name.r��-zpython-�Nz{}-{})rFrkr$rAr	ri)rI�egg_namer-r-r.rv.s
rvcCsd�dd�|��D��S)z'Return case insensitive dpkg -S regexp.rPcss,�|]}|��rd|��|fn|VqdS)z[%s%s]N)�isalpha�upperr1r-r-r.r68s�*zci_regexp.<locals>.<genexpr>)rrir�r-r-r.ro6sroz[-.]?(alpha|beta|rc|dev|a|b|c)z\$(\d+)cCst�d|�S)zdConvert Perl RE patterns used in uscan to Python's

    >>> print(_pl2py('foo$3'))
    foo\g<3>
    z\\g<\1>)�GROUP_REr�)�patternr-r-r.�_pl2py?sr�cCsBt|�}d|_d|_|jdurd|_t|d�Sd|_t|d�S)akReturn the maximum version compatible with `version` in PEP440 terms,
    used by ~= requires version specifiers.

    https://www.python.org/dev/peps/pep-0440/#compatible-release

    >>> _max_compatible('2.2')
    '3'
    >>> _max_compatible('1.4.5')
    '1.5'
    >>> _max_compatible('1.3.alpha4')
    '2'
    >>> _max_compatible('2.1.3.post5')
    '2.2'

    Nr )r�serial�releaselevel�microrb�minor)rUr�r-r-r.rnHs
rnc	Cs|D]s}|�d�r-|�d�rdnd}||dd��||�}|�t�|d|d��}q|�d�ro|dd��|d�}t�|d�}d}|dd�rc|d}d|vrVd}d	|vrct�|dtj�}|�t	|d�||�}qt
�d
|�q|dkr�t�d|�}|S)
a>Translate Python version into Debian one.

    >>> _translate('1.C2betac', ['s/c//gi'], None)
    '1.2beta'
    >>> _translate('5-fooa1.2beta3-fooD',
    ...     ['s/^/1:/', 's/-foo//g', 's:([A-Z]):+$1:'], 'PEP386')
    '1:5~a1.2~beta3+D'
    >>> _translate('x.y.x.z', ['tr/xy/ab/', 'y,z,Z,'], None)
    'a.b.a.Z'
    )�tr�yr�r r�Nr�s�gr3zunknown rule ignored: %s�PEP386z~\g<1>)
r$rG�	translaterb�	maketransrcrd�Ir�r�r'�warn�
PRE_VER_RE)	rUr;rX�rule�pos�tmpr��count�flagsr-r-r.rmbs(

rmcCst�||�S)z�Translate Python version operator into Debian one.

    >>> _translate_op('==')
    '='
    >>> _translate_op('<')
    '<<'
    >>> _translate_op('<=')
    '<='
    )�DEB_VERS_OPSr=)rTr-r-r.rl�s
rl�IMPLr�r r�r�z%s: cannot guess (%s)rP)NNF)NNNNN)Er��loggingr�r?rc�	functoolsr�os.pathrrr�
subprocessrr�__name__�sysr�rB�abspath�dirname�__file__rr	r
rrr
�dhpython.markersrr�dhpython.toolsr�dhpython.versionrr�	getLoggerr'rd�VERBOSEr%rfr�r�rr/rOr�rhr�r�rFrvrorr�r�rnrmrl�environr=rI�argvr3�isfile�printrD�errr(r-r-r-r.�<module>s�"
�
�
��
�
*
�
�J
�(

	%

�����