%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /snap/core/17212/usr/share/dh-python/dhpython/__pycache__/
Upload File :
Create Path :
Current File : //snap/core/17212/usr/share/dh-python/dhpython/__pycache__/tools.cpython-35.pyc



�U](-�@s�ddlZddlZddlZddlmZddlmZddlmZddlmZddl	m
Z
mZmZm
Z
mZmZddlmZmZejd�Zejd	�Zejd
�Zdd�Zd
d�Zdd�Zdd�Zddd�Zdd�Zdd�Zddd�Zdd�Z dddddd�Z!Gd d!�d!�Z"d"d#�Z#d$d%�Z$dd&l%m&Z&dd'l'm(Z(m)Z)m*Z*ejd(e*ej+�Z,ejd)e*ej+�Z-dS)*�N)�datetime)�glob)�dumps)�rmtree)�exists�getsize�isdir�islink�join�split)�Popen�PIPEZdhpythonz/(.*?)(-py\d\.\d(?:-[^.]*)?)?(\.egg-info|\.pth)$zNEEDED.*libpython(\d\.\d)cCso|jd�}|jd�}x,|rL|d|dkrL|d=|d=q!Wdjdgt|�d|�S)z~Return relative path.

    >>> relpath('/usr/share/python-foo/foo.py', '/usr/bin/foo', )
    '../share/python-foo/foo.py'
    �/rz..�)rr
�len)�target�link�t�l�r�&/usr/share/dh-python/dhpython/tools.py�relpath%s
rcCstjt||�|�S)zCreate relative symlink.)�os�symlinkr)rrrrr�relative_symlink2srcCs�t|�rUt|�d}x6tj|�D]%}tt||�t||��q,Wt|�r�t|t|�d�}ttj|�|�tj	|�ntj
||�dS)zCMove file to dstdir. Works with symlinks (including relative ones).rN���r)rrr�listdir�	move_filer
r	r�readlink�remove�rename)�fpath�dstdirZdname�fnZdstpathrrrr7s#rc
Cs�tj|�j}xttj|�D]c\}}}xQ|D]I}t||�}||�r8t|t||��}	tj||	�q8Wq"WdS)z�Move files (preserving path) that match given pattern.

    move_matching_files('foo/bar/', 'foo/baz/', 'spam/.*\.so$')
    will move foo/bar/a/b/c/spam/file.so to foo/baz/a/b/c/spam/file.so
    N)�re�compile�searchr�walkr
r�renames)
�srcZdst�pattern�match�root�dirs�	filenamesr#Zspath�dpathrrr�move_matching_filesFs
r0c&Cs3ytj|�}Wn<tk
rQ}ztjd||�dSWYdd}~XnX|r}|jdkr}d|_t|�}|r/tjd|�y)t|d��}|j	�}WdQRXWn&t
k
r�tjd|�dSYnXt|d	��8}|jd
|j
d��|j|dd��WdQRXd
S)zmNormalize file's shebang.

    :param replacement: new shebang command (path to interpreter and options)
    zfix_shebang (%s): %sNz	/usr/bin/z/usr/binzreplacing shebang in %s�rbzcannot open %sF�wbz#! %s
zutf-8rT)�InterpreterZ	from_file�	Exception�log�debug�path�repr�info�open�	readlines�IOError�error�write�encode�
writelines)r!Zreplacement�interpreter�err�fpZfcontentrrr�fix_shebangUs(	
	rDcCsdd|}t|dtdd�}tjt|jj�dd��}|r`t|j�d�SdS)	zhReturn libpython version file is linked to or None.

    :rtype: tuple
    :returns: Python version
    zreadelf -Wd '%s'�stdout�shellT�encodingzutf-8rN)	rr
�SHAREDLIB_REr&�strrE�read�Version�groups)r!�cmd�processr+rrr�so2pyverss

$rOcCsGtj|�}|rC|jd�dk	rCdj|jdd��S|S)aRemove Python version and platform name from Egg files/dirs.

    >>> clean_egg_name('python_pipeline-0.1.3_py3k-py3.1.egg-info')
    'python_pipeline-0.1.3_py3k.egg-info'
    >>> clean_egg_name('Foo-1.2-py2.7-linux-x86_64.egg-info')
    'Foo-1.2.egg-info'
    �N�r�)�
EGGnPTH_REr+�groupr
)�namer+rrr�clean_egg_name�srVcCspt|pg�}xW|D]O}t|ddd��1}x'|D]}|r>|j|j��q>WWdQRXqW|S)z#Parse namespace_packages.txt files.�rrGzutf-8N)�setr:�add�strip)Zfpaths�other�resultr!rC�linerrr�parse_ns�s

"r^c
Cs�t|t�st|�}t�}x�|D]�}x�|D]x}t|j||�|jd��}t|d�}t|�s�q8t|�dkr8tjd|�|j	|�Pq8Wq+W||}x�|D]�}xv|D]n}t|j||�|jd��}	t|	d�}t|�r�t
j|�t
j|	�s�t
j
|	�q�Wtd|d|jd��}	t|	d�}t|�r�t
j|�t
j|	�s�t
j
|	�q�W|S)z8Remove empty __init__.py files for requested namespaces.�.z__init__.pyrz)file not empty, cannot share %s namespaceZdebianzusr/share/pyshared)�
isinstancerXr
�sitedirrrrr5ZwarningrYrrr�rmdir)
rA�packageZ
namespaces�versionsZkeep�ns�versionr!r\r/rrr�	remove_ns�s:	

$
	


$

rgTc
Cscd|d|d|i}d}|dkr-n�|dkrR|jdtdt�n�|r�t|t�r�d}t|d	d
d�}|jdjtj�j	���|jd
j|��|j
�|jd|d|�tjd|�t
||��c}|j�\}}	|o|j�td|jd|o?t|d�d|	oTt|	d��SWdQRXdS)a<Execute external shell commad.

    :param cdw: currennt working directory
    :param env: environment
    :param log_output:
        * opened log file or path to this file, or
        * None if output should be included in the returned dict, or
        * False if output should be redirectored to stdout/stderr
    rF�cwd�envFNrE�stderrT�arGzutf-8z
# command executed on {}z
$ {}
zinvoking: %s�
returncode)�updater
r`rIr:r>�formatrZnowZ	isoformat�flushr5r6rZcommunicate�close�dictrl)
ZcommandrhriZ
log_outputrF�argsrprNrErjrrr�execute�s*
"
rsc@s(eZdZdd�Zdd�ZdS)�memoizecCs||_i|_dS)N)�func�cache)�selfrurrr�__init__�s	zmemoize.__init__cOsEt||f�}||jkr:|j||�|j|<|j|S)N)rrvru)rwrr�kwargs�keyrrr�__call__�szmemoize.__call__N)�__name__�
__module__�__qualname__rxr{rrrrrt�srtcCsd|}t|�sdS|j}t||�}x�t|dd�D]�}|sE|jd�rdqEtj|�}|s�td|��|j�}|dr�|dj	dd	�|d<|t||d
�@}|s�t
jd||�qEt|d�}	|	std
|d��x�|	D]�}
|
j
d�}
|dr\t|dt|
�d�}n(|
jd�r~|
dd�}n|
}x{|D]s}t|j||�|�}
t|
�d}t|�s�tj|�t|
�r�tj|
�tj|
|
�q�WqWqEWdS)zDInstall local files listed in pkg.pyinstall files as public modules.z./debian/%s.pyinstallNrGzutf-8�#zunrecognized line: %s�moduler_r�vrangez.%s.pyinstall: no matching versions for line %sr*zmissing file(s): %sz/.rzdebian/�r)r�impl�get_requested_versionsr:�
startswith�
INSTALL_REr+�
ValueError�	groupdict�replacer5r6r�lstripr
rrar�makedirsrr)rArcr��srcfpathr�rdr]�details�myvers�filesr!ZdstnamerfZdstfpathr"rrr�	pyinstall�sJ
	
	


 


r�cCsod|}t|�sdS|j}t||�}x6t|dd�D]"}|sE|jd�rdqEtj|�}|s�td||f��|j�}|t||d�@}|s�t	j
d||�x�|D]�}	|j||	�}
|
j|j
||	��x]|
D]U}t|d	|d
�}x4|D],}
t|
�rNt|
�q/tj|
�q/Wq
Wq�WqEWdS)z2Remove public modules listed in pkg.pyremove file.z./debian/%s.pyremoveNrGzutf-8rzunrecognized line: %s: %sr�z-%s.pyremove: no matching versions for line %srr*)rr�r�r:r��	REMOVE_REr+r�r�r5r6Zold_sitedirs�appendrarrrrr)rArcr�r�r�rdr]r�r�rfZ	site_dirsZsdirr�r!rrr�pyremoves2
		




r�)r3)rKr��
RANGE_PATTERNz�
    (?P<pattern>.+?)  # file pattern
    (?:\s+  # optional Python module name:
    (?P<module>[A-Za-z][A-Za-z0-9_.]*)?
    )?
    \s*  # optional version range:
    (?P<vrange>%s)?$
z^
    (?P<pattern>.+?)  # file pattern
    \s*  # optional version range:
    (?P<vrange>%s)?$
).Zloggingrr$rr�picklerZshutilr�os.pathrrrr	r
r�
subprocessrr
Z	getLoggerr5r%rSrHrrrr0rDrOrVr^rgrsrtr�r�Zdhpython.interpreterr3Zdhpython.versionrKr�r��VERBOSEr�r�rrrr�<module>s<.
&"+

Zerion Mini Shell 1.0