ó ß[ bc@sµddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z d„Z d„Z d„Zd„Zd„ZdS(iÿÿÿÿNc Cs¯tjddƒ}|jdddƒ|jddddd d d tjjƒ|jƒ}d }ytt|ƒGHWn't k r}d j |ƒGHd}nXt j dƒdS(Nt descriptions,Recreate wheel of package with given RECORD.t record_paththelpsPath to RECORD files-os --output-dirs>Dir where to place the wheel, defaults to current working dir.tdesttoutdirtdefaultis Failed: {}i( targparsetArgumentParsert add_argumenttostpathtcurdirt parse_argstrewheel_from_recordtvarst BaseExceptiontformattsystexit(tparsertnstretcodete((s?/opt/alt/python27/lib64/python2.7/ensurepip/rewheel/__init__.pytrun s    c CsPg}tjtjtjgƒ}g|D]}tjj|ƒr(|^q(}xý|D]õ}d}x®|D]¦}tjj ||ƒdj tj ƒ}gtj |ƒD]}tjj ||ƒ^q¡}g|D]} t j|| ƒrÉ| ^qÉ} t| ƒdkrf| d}qfqfW|dk r;|jtjj |dƒƒqS|jdƒqSW|S(s±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 s-[^\{0}]+\.dist-infoiitRECORDN(tsitetgetsitepackagesRt base_prefixtbase_exec_prefixR R texiststNonetjoinRtseptlistdirtretmatchtlentappend( tprojectstrecordst sys_sitepacktsptprojectR t dist_info_retpt candidatestctfiltered((s?/opt/alt/python27/lib64/python2.7/ensurepip/rewheel/__init__.pytfind_system_recordss+  %1+ cCs?tjjtjj|ƒƒ}|t|ƒjtjjƒ}t||ƒ\}}t|ƒ}tjj||dƒ}t j |dddt j ƒ}t j ƒ} tj| ƒ} xO|D]G\} } } |jtjj|| ƒd| ƒ| j| | | gƒq·W| j|ddgƒ|j|| jƒƒ|jƒ|jS(scRecreates a whee of package with given record_path and returns path to the newly created wheel.s.whltmodetwt compressiontarcnamet(R R tdirnameR$tstripR tget_records_to_packtget_wheel_nameRtzipfiletZipFilet ZIP_DEFLATEDtiotStringIOtcsvtwritertwritetwriterowtwritestrtgetvaluetclosetfilename(RRtsite_dirtrecord_relpathtto_writetto_omittnew_wheel_nametnew_wheel_patht new_wheelt new_recordR@tftsha_hashtsize((s?/opt/alt/python27/lib64/python2.7/ensurepip/rewheel/__init__.pyR :s  " c Cs€tjjtjj|ƒdƒ}tj|ddƒ%}tjjƒj |j ƒƒ}WdQXtjjtjj|ƒdƒ}tj|ddƒ%}tjjƒj |j ƒƒ}WdQX|j dƒ}|j dƒ}d} g} x1|j d ƒD] } | j | jd ƒd ƒqôWd j| ƒ} |j d ƒjd ƒd d!\} } td||| | | | gƒ}d jt|ƒƒS(s.Return proper name of the wheel, without .whl.tWHEELtencodingsutf-8NtMETADATAtNametVersionR5tTagt-it.ii(R R RR6tcodecstopentemailRtParsertparsestrtreadtgettget_allR%tsplittfilterRtlist(Rtwheel_info_pathtwheel_info_filet wheel_infot metadata_patht metadata_filetmetadatat distributiontversiont build_tagtlang_tagtttabi_tagtplat_tagtto_join((s?/opt/alt/python27/lib64/python2.7/ensurepip/rewheel/__init__.pyR9Vs !$!$%!c CsUtjj||ƒ}tj|ddƒ}|jƒ}WdQXtjj|ƒjtjjƒ}|t dƒ d}g}g}xÇ|j ƒD]¹}|j dƒ} t | ƒdkrŽtjj | dƒs'| dj d ƒs'| djd ƒs'| djd ƒs'| d|ks'| dj |ƒr7|j| ƒqG|j| ƒqŽqŽW||fS( sAccepts 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) RSsutf-8Ns dist-infotdatat,iis..s.pycs.pyo(R R RRZR[R_R6R7R R$t splitlinesRbtisabst startswithtendswithR%( RGRHtrecord_file_patht record_filetrecord_contentstdata_dirRIRJtltspl((s?/opt/alt/python27/lib64/python2.7/ensurepip/rewheel/__init__.pyR8ns"!)&#(RRZR?t email.parserR\R R=R"Rt subprocessRR:RR0R R9R8(((s?/opt/alt/python27/lib64/python2.7/ensurepip/rewheel/__init__.pyts