JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrU Qabc@sdZddlmZddlmZddlmZddlm Z ddlZddlZddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&ddl'm(Z(ddl)m*Z*ddlm+Z+ddlm,Z,ddZ-GdddZ.Gddde.eZ/GdddeZGdddeZ0ddZ1ddZ2d d!Z3d"d#Z4d$d%Z5d&d'Z6d(d)Z7d*d+Z8d5d-d.Z9d/d0Z:d1d2Z;Gd3d4d4e,Z|j|jkr>|j|_t|j|_ d|j_dS)Nz%s==%sz%s===%sz2Invalid distribution name or version syntax: %s-%srrP .egg-info-)!r:rQr?rRr isinstancerr>ZVersionlistr ValueError distutilserrorsZDistutilsOptionErrorrPr7Z package_dirgetr#curdirZensure_dirnamerrIr$joincheck_broken_egg_infometadataZ _patched_distkeylowerZ_versionZ_parsed_version)r9Zparsed_versionZ is_versionspecdirsZpdr2r2r3finalize_optionss>           zegg_info.finalize_optionsFcCsL|r||||n4tj|rH|dkr>|s>td||dS||dS)aWrite `data` to `filename` or delete if empty If `data` is non-empty, this routine is the same as ``write_file()``. If `data` is empty but not ``None``, this is the same as calling ``delete_file(filename)`. If `data` is ``None``, then this is a no-op unless `filename` exists, in which case a warning is issued about the orphaned file (if `force` is false), or deleted (if `force` is true). Nz$%s not set in setup(), but %s exists) write_filer#r$existsrwarn delete_file)r9whatrZdataforcer2r2r3write_or_delete_files   zegg_info.write_or_delete_filecCsDtd||tjr|d}|js@t|d}|||dS)zWrite `data` to `filename` (if not a dry run) after announcing it `what` is used in a log message to identify what is being written to the file. zwriting %s to %sutf-8wbN) rinforZPY3encodedry_runopenwriteclose)r9rqrZrrfr2r2r3rms   zegg_info.write_filecCs td||jst|dS)z8Delete `filename` (if not a dry run) after announcing itz deleting %sN)rrwryr#unlink)r9rZr2r2r3rps zegg_info.delete_filecCs||jt|jd|jj}tdD]4}|j|d|}|||j tj |j|j q*tj |jd}tj |r| ||dS)Nzegg_info.writers) installerznative_libs.txt)ZmkpathrIr#utimer7Zfetch_build_eggrZrequireZresolver:r$rernrp find_sources)r9repwriternlr2r2r3runs     z egg_info.runcCs4tj|jd}t|j}||_||j|_dS)z"Generate SOURCES.txt manifest filez SOURCES.txtN) r#r$rerImanifest_makerr7manifestrfilelist)r9Zmanifest_filenameZmmr2r2r3r*s  zegg_info.find_sourcescCsT|jd}|jtjkr&tj|j|}tj|rPtd||j |j |_ ||_ dS)Nr\aB------------------------------------------------------------------------------ Note: Your current .egg-info directory has a '-' in its name; this will not work correctly with "setup.py develop". Please rename %s to %s to correct this problem. ------------------------------------------------------------------------------) rQrPr#rdr$rernrrorIrS)r9Zbeir2r2r3rf2s   zegg_info.check_broken_egg_infoN)F)rErFrG descriptionZ user_optionsZboolean_optionsZ negative_optrTrHrUsetterr[rlrtrmrprrrfr2r2r2r3rIs.    1 rIc@s|eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZdS)rcCs ||\}}}}|dkrR|dd||D]}||s2td|q2n|dkr|dd||D]}||srtd|qrn|dkr|d d||D]}||std |qnJ|d kr|d d||D]}||std |qn|dkr`|d|d|f|D]"}| ||s:td||q:n|dkr|d|d|f|D]"}| ||std||qnp|dkr|d|| |std|n>|dkr|d|| |std|n t d|dS)Nincludezinclude  z%warning: no files found matching '%s'excludezexclude z9warning: no previously-included files found matching '%s'zglobal-includezglobal-include z>warning: no files found matching '%s' anywhere in distributionzglobal-excludezglobal-exclude zRwarning: no previously-included files matching '%s' found anywhere in distributionzrecursive-includezrecursive-include %s %sz:warning: no files found matching '%s' under directory '%s'zrecursive-excludezrecursive-exclude %s %szNwarning: no previously-included files matching '%s' found under directory '%s'graftzgraft z+warning: no directories found matching '%s'prunezprune z6no previously-included directories found matching '%s'z'this cannot happen: invalid action '%s')Z_parse_template_line debug_printrerrrorglobal_includeglobal_excluderecursive_includerecursive_excluderrr)r9lineactionZpatternsdirZ dir_patternpatternr2r2r3process_template_lineEs|                  zFileList.process_template_linecCsRd}tt|jdddD]2}||j|r|d|j||j|=d}q|S)z Remove all files from the file list that match the predicate. Return True if any matching files were removed Frz removing T)ranger)filesr)r9Z predicatefoundr/r2r2r3 _remove_filesszFileList._remove_filescCs$ddt|D}||t|S)z#Include files that match 'pattern'.cSsg|]}tj|s|qSr2r#r$isdir.0r}r2r2r3 s z$FileList.include..rextendboolr9rrr2r2r3rs zFileList.includecCst|}||jS)z#Exclude files that match 'pattern'.)r4rmatchr9rrr2r2r3rszFileList.excludecCs8tj|d|}ddt|ddD}||t|S)zN Include all files anywhere in 'dir/' that match the pattern. rcSsg|]}tj|s|qSr2rrr2r2r3rs z.FileList.recursive_include..T) recursive)r#r$rerrr)r9rrZ full_patternrr2r2r3rs zFileList.recursive_includecCs ttj|d|}||jS)zM Exclude any file anywhere in 'dir/' that match the pattern. rr4r#r$rerr)r9rrrr2r2r3rszFileList.recursive_excludecCs$ddt|D}||t|S)zInclude all files from 'dir/'.cSs"g|]}tj|D]}|qqSr2)rarfindall)rZ match_diritemr2r2r3rsz"FileList.graft..r)r9rrr2r2r3rs  zFileList.graftcCsttj|d}||jS)zFilter out files from 'dir/'.rr)r9rrr2r2r3rszFileList.prunecsJ|jdkr|ttjd|fdd|jD}||t|S)z Include all files anywhere in the current directory that match the pattern. This is very inefficient on large file trees. Nrcsg|]}|r|qSr2rrrr2r3rs z+FileList.global_include..)Zallfilesrr4r#r$rerrrr2rr3rs   zFileList.global_includecCsttjd|}||jS)zD Exclude all files anywhere that match the pattern. rrrr2r2r3rszFileList.global_excludecCs8|dr|dd}t|}||r4|j|dS)N r)r<r _safe_pathrappend)r9rr$r2r2r3rs    zFileList.appendcCs|jt|j|dSr6)rrfilterr)r9pathsr2r2r3rszFileList.extendcCstt|j|j|_dS)z Replace self.files with only safe paths Because some owners of FileList manipulate the underlying ``files`` attribute directly, this method must be called to repair those paths. N)r_rrrr8r2r2r3_repairszFileList._repairc Csd}t|}|dkr(td|dSt|d}|dkrNt||ddSz"tj|shtj|rnWdSWn&tk rt||t YnXdS)Nz!'%s' not %s encodable -- skippingz''%s' in unexpected encoding -- skippingFruT) unicode_utilsfilesys_decoderroZ try_encoder#r$rnUnicodeEncodeErrorsysgetfilesystemencoding)r9r$Zenc_warnZu_pathZ utf8_pathr2r2r3rs   zFileList._safe_pathN)rErFrGrrrrrrrrrrrrrrr2r2r2r3rBsI     rc@s\eZdZdZddZddZddZdd Zd d Zd d Z e ddZ ddZ ddZ dS)rz MANIFEST.incCsd|_d|_d|_d|_dS)Nr)Z use_defaultsrZ manifest_onlyZforce_manifestr8r2r2r3rT sz!manifest_maker.initialize_optionscCsdSr6r2r8r2r2r3rlszmanifest_maker.finalize_optionscCsdt|_tj|js||tj|jr<| | |j |j |dSr6) rrr#r$rnrwrite_manifest add_defaultstemplateZ read_templateprune_file_listsortZremove_duplicatesr8r2r2r3rs  zmanifest_maker.runcCst|}|tjdS)N/)rrreplacer#r%)r9r$r2r2r3_manifest_normalizes z"manifest_maker._manifest_normalizecsBjfddjjD}dj}tj|f|dS)zo Write the file list in 'self.filelist' to the manifest file named by 'self.manifest'. csg|]}|qSr2)rrr8r2r3r*sz1manifest_maker.write_manifest..zwriting manifest file '%s'N)rrrrZexecuterm)r9rmsgr2r8r3r"s  zmanifest_maker.write_manifestcCs||st||dSr6)_should_suppress_warningr ro)r9rr2r2r3ro.s zmanifest_maker.warncCs td|S)z; suppress missing-file warnings from sdist zstandard file .*not found)r&r)rr2r2r3r2sz'manifest_maker._should_suppress_warningcCst|||j|j|j|jtt}|rJ|j |nt j |jr`| t j drx|jd|d}|j|jdS)Nzsetup.pyrI)r rZ check_licenserrrrr_r rr#r$rnZ read_manifestget_finalized_commandrrI)r9ZrcfilesZei_cmdr2r2r3r9s     zmanifest_maker.add_defaultscCsZ|d}|j}|j|j|j|ttj }|jj d|d|dddS)Nbuildz(^|z)(RCS|CVS|\.svn)r)Zis_regex) rr7Z get_fullnamerrZ build_baser&r'r#r%Zexclude_pattern)r9rZbase_dirr%r2r2r3rLs    zmanifest_maker.prune_file_listN)rErFrGrrTrlrrrro staticmethodrrrr2r2r2r3rs   rc Cs8d|}|d}t|d}||W5QRXdS)z{Create a file with the specified name and write 'contents' (a sequence of strings without line terminators) to it.  rurvN)rerxrzr{)rZcontentsr}r2r2r3rmVs   rmc Cs|td||jsx|jj}|j|j|_}|j|j|_}z| |j W5|||_|_Xt |jdd}t |j |dS)Nz writing %sZzip_safe)rrwryr7rgrRr>rQr:write_pkg_inforIgetattrr Zwrite_safety_flag)cmdbasenamerZrgZoldverZoldnameZsafer2r2r3rcs rcCstj|rtddS)NzsWARNING: 'depends.txt' is not used by setuptools 0.6! Use the install_requires/extras_require setup() args instead.)r#r$rnrrorrrZr2r2r3warn_depends_obsoletevs rcCs,t|pd}dd}t||}||dS)Nr2cSs|dS)Nrr2)rr2r2r3z%_write_requirements..)rr writelines)streamZreqslinesZ append_crr2r2r3_write_requirements~s  rcCsj|j}t}t||j|jp"i}t|D]&}|djft t|||q,| d|| dS)Nz [{extra}] Z requirements) r7rStringIOrZinstall_requiresextras_requiresortedr{formatvarsrtgetvalue)rrrZZdistrrrZextrar2r2r3write_requirementss   rcCs,t}t||jj|d||dS)Nzsetup-requirements)iorrr7Zsetup_requiresrtr)rrrZrrr2r2r3write_setup_requirementssrcCs:tdd|jD}|d|dt|ddS)NcSsg|]}|dddqS).rr)r")rkr2r2r3rsz(write_toplevel_names..ztop-level namesr)rYfromkeysr7Ziter_distribution_namesrmrer)rrrZZpkgsr2r2r3write_toplevel_namess rcCst|||ddS)NT) write_argrr2r2r3 overwrite_argsrFcCsHtj|d}t|j|d}|dk r4d|d}|||||dS)Nrr)r#r$splitextrr7rert)rrrZrsargnamerVr2r2r3rs rcCs|jj}t|tjs|dkr"|}nn|dk rg}t|D]J\}}t|tjsrt||}d tt t | }| d||fq:d |}|d||ddS)Nrz [%s] %s rz entry pointsT)r7Z entry_pointsr^rZ string_typesritemsrZ parse_grouprerstrvaluesrrt)rrrZrrrZsectionrr2r2r3 write_entriess   rc Csjtdttjdrftd>}|D]2}t d|}|r(t | dW5QRSq(W5QRXdS)zd Get a -r### off of PKG-INFO Version in case this is an sdist of a subversion revision. z$get_pkg_info_revision is deprecated.zPKG-INFOzVersion:.*-r(\d+)\s*$rr) warningsroEggInfoDeprecationWarningr#r$rnrrzr&rintgroup)r}rrr2r2r3get_pkg_info_revisions    *rc@seZdZdZdS)rzqClass for warning about deprecations in eggInfo in setupTools. Not ignored by default, unlike DeprecationWarning.N)rErFrG__doc__r2r2r2r3rsr)F)=rZdistutils.filelistrZ _FileListZdistutils.errorsrZdistutils.utilrrarr#r&rrrrBrWZsetuptools.externrZsetuptools.extern.six.movesrZ setuptoolsrZsetuptools.command.sdistr r Zsetuptools.command.setoptr Zsetuptools.commandr Z pkg_resourcesr rrrrrrrZsetuptools.unicode_utilsrZsetuptools.globrrrr4r5rIrrmrrrrrrrrrrrr2r2r2r3sX           (    S2EP