3
¦ fL ã @ s„ d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl Z d dl
Z
d dlZdd„ Zdd„ Z
dd„ Zdd „ Zd
d„ ZdS )é Nc C s˜ t jdd�} | jddd� | jdddd tjjd
� | jƒ }d}yttf t |ƒŽƒ W n4 t
k
rˆ } ztdj|ƒƒ d
}W Y d d }~X nX tj
d
ƒ d S )Nz,Recreate wheel of package with given RECORD.)ZdescriptionÚrecord_pathzPath to RECORD file)Úhelpz-oz--output-dirz>Dir where to place the wheel, defaults to current working dir.Úoutdir)r ÚdestÚdefaultr z
Failed: {}é )ÚargparseÚArgumentParserÚadd_argumentÚosÚpathÚcurdirÚ
parse_argsÚprintÚrewheel_from_recordÚvarsÚ
BaseExceptionÚformatÚsysÚexit)ÚparserÚnsZretcodeÚe© r ú?/opt/alt/python36/lib64/python3.6/ensurepip/rewheel/__init__.pyÚrun
s r c sÈ g }t jtjtjgƒ}dd„ |D ƒ}xž| D ]–}d}xd|D ]\‰tjjˆ|ƒdjtj ƒ ‰ ‡fdd„tj
ˆƒD ƒ}‡ fdd„|D ƒ}t|ƒdkr8|d }q8W |dk r¶|jtjj|d ƒƒ q*|jdƒ q*W |S )
z±Return list of paths to RECORD files for system-installed projects.
If a project is not installed, the resulting list contains None instead
of a path to its RECORD
c S s g | ]}t jj|ƒr|‘qS r )r r Úexists)Ú.0Úspr r r ú
( s z'find_system_records..Nz-[^\{0}]+\.dist-infoc s g | ]}t jjˆ |ƒ‘qS r )r r Újoin)r Úp)r r r r . s c s g | ]}t jˆ |ƒr|‘qS r )ÚreÚmatch)r Úc)Údist_info_rer r r 0 s r r ZRECORD)
ÚsiteÚgetsitepackagesr Úbase_prefixÚbase_exec_prefixr r r r ÚsepÚlistdirÚlenÚappend)ZprojectsZrecordsZsys_sitepackZprojectr Z
candidatesZfilteredr )r% r r Úfind_system_records s
r. c C sä t jjt jj| ƒƒ}| t|ƒd… jt jjƒ}t||ƒ\}}t| ƒ}t jj||d ƒ}t j
|dt jd�}tj
ƒ } tj| ƒ}
x:|D ]2\}}}
|jt jj||ƒ|d� |
j|||
gƒ q€W |
j|ddgƒ |j|| jƒ ƒ |jƒ |jS )zcRecreates a whee of package with given record_path and returns path
to the newly created wheel.Nz.whlÚw)ÚmodeZcompression)ZarcnameÚ )r r Údirnamer, Ústripr* Úget_records_to_packÚget_wheel_namer ÚzipfileZZipFileZZIP_DEFLATEDÚioÚStringIOÚcsvÚwriterÚwriteZwriterowZwritestrÚgetvalueÚcloseÚfilename)r r Úsite_dirÚrecord_relpathÚto_writeÚto_omitZnew_wheel_nameZnew_wheel_pathZ new_wheelZ
new_recordr: ÚfZsha_hashÚsizer r r r : s
r c C s t jjt jj| ƒdƒ}tj|dd��}tjjƒ j |j
ƒ ƒ}W dQ R X t jjt jj| ƒdƒ}tj|dd��}tjjƒ j |j
ƒ ƒ}W dQ R X |jdƒ}|jdƒ}d} g }
x&|jd ƒD ]}|
j
|jd
ƒd ƒ q°W dj|
ƒ}
|jd ƒjd
ƒd
d… \}}
td||| |
||
gƒ}d
jt|ƒƒS )z.Return proper name of the wheel, without .whl.ZWHEELzutf-8)ÚencodingNZMETADATAÚNameZVersionr1 ZTagú-r Ú.r é )r r r r2 ÚcodecsÚopenÚemailr ZParserZparsestrÚreadÚgetZget_allr- ÚsplitÚfilterÚlist)r Zwheel_info_pathZwheel_info_fileZ
wheel_infoZ
metadata_pathZ
metadata_fileZmetadataZdistributionÚversionZ build_tagZlang_tagÚtZabi_tagZplat_tagZto_joinr r r r5 V s
r5 c
C s t jj| |ƒ}tj|dd��}|jƒ }W dQ R X t jj|ƒjt jjƒ}|dt dƒ … d }g }g }x’|j
ƒ D ]†}|jdƒ} t | ƒdkrnt jj| d ƒsÜ| d j
d ƒsÜ| d jd
ƒsÜ| d jdƒsÜ| d |ksÜ| d j
|ƒrè|j| ƒ qô|j| ƒ qnqnW ||fS )a Accepts path of sitedir and path of RECORD file relative to it.
Returns two lists:
- list of files that can be written to new RECORD straight away
- list of files that shouldn't be written or need some processing
(pyc and pyo files, scripts)
zutf-8)rE Nz dist-infoÚdataú,rI r z..z.pycz.pyo)r r r rJ rK rM r2 r3 r* r, Ú
splitlinesrO ÚisabsÚ
startswithÚendswithr- )
r? r@ Zrecord_file_pathZrecord_fileZrecord_contentsZdata_dirrA rB ÚlZsplr r r r4 n s"
r4 )r rJ r9 Zemail.parserrL r r7 r" r&