
(hc                 @   s  d  Z  d d l m Z d d l m Z d d l m Z d d l m	 Z	 d d l Z d d l Z d d l
 Z
 d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l m Z d d l m Z d d	 l m Z d d
 l m Z d d l m Z d d l m Z d d l m Z d d l m Z m  Z  m! Z! m" Z" m# Z# m$ Z$ m% Z% m& Z& d d l' j( Z( d d l) m* Z* d d l m+ Z+ d d l m, Z, d d   Z- Gd d   d  Z. Gd d   d e. e  Z/ Gd d   d e  Z Gd d   d e  Z0 d d   Z1 d d   Z2 d  d!   Z3 d" d#   Z4 d$ d%   Z5 d& d'   Z6 d( d)   Z7 d* d+   Z8 d, d- d.  Z9 d/ d0   Z: d1 d2   Z; Gd3 d4   d4 e,  Z< d S)5zUsetuptools.command.egg_info

Create a distribution's .egg-info directory and contents    )FileList)DistutilsInternalError)convert_path)logN)six)map)Command)sdist)walk_revctrl)edit_config)	bdist_egg)parse_requirements	safe_nameparse_versionsafe_versionyield_lines
EntryPointiter_entry_pointsto_filename)glob)	packaging)SetuptoolsDeprecationWarningc             C   sz  d } |  j  t j j  } t j t j  } d | f } xt |  D]\ } } | t |  d k } | d k r | r | d 7} qG | d | | f 7} qG d } t |  }	 x| |	 k  r>| | }
 |
 d k r | | d 7} nJ|
 d	 k r | | 7} n1|
 d
 k r| d } | |	 k  r<| | d k r<| d } | |	 k  rb| | d k rb| d } x* | |	 k  r| | d k r| d } qeW| |	 k r| t j |
  7} q1| | d |  } d } | d d k rd } | d d  } | t j |  7} | d | f 7} | } n | t j |
  7} | d 7} q W| sG | | 7} qG W| d 7} t j | d t j	 t j
 BS)z
    Translate a file path glob like '*.txt' in to a regular expression.
    This differs from fnmatch.translate which allows wildcards to match
    directory separators. It also knows about '**/' which matches any number of
    directories.
     z[^%s]   z**z.*z
(?:%s+%s)*r   *?[!]^Nz[%s]z\Zflags)splitospathsepreescape	enumeratelencompile	MULTILINEDOTALL)r   patchunksr$   Z
valid_charcchunk
last_chunkiZ	chunk_lencharZinner_iinnerZ
char_class r4   A/tmp/pip-build-kmztzv_d/setuptools/setuptools/command/egg_info.pytranslate_pattern%   sV    



	
r6   c               @   sR   e  Z d  Z d Z d Z e d d    Z d d   Z d d   Z e e  Z	 d S)
InfoCommonNc             C   s   t  |  j j    S)N)r   distributionget_name)selfr4   r4   r5   name|   s    zInfoCommon.namec             C   sE   |  j  j   } |  j r4 | j |  j  r4 t |  St | |  j  S)N)r8   get_versionvtagsendswithr   )r:   versionr4   r4   r5   tagged_version   s    
zInfoCommon.tagged_versionc             C   s<   d } |  j  r | |  j  7} |  j r8 | t j d  7} | S)Nr   z-%Y%m%d)	tag_buildtag_datetimestrftime)r:   r?   r4   r4   r5   tags   s    		zInfoCommon.tags)
__name__
__module____qualname__rA   rB   propertyr;   r@   rE   r=   r4   r4   r4   r5   r7   x   s   r7   c               @   s   e  Z d  Z d Z d% d& d' d( g Z d g Z d d i Z d d   Z e d d    Z	 e	 j
 d d    Z	 d d   Z d d   Z d d d  Z d d   Z d d   Z d d   Z d  d!   Z d" d#   Z d$ S))egg_infoz+create a distribution's .egg-info directory	egg-base=eLdirectory containing .egg-info directories (default: top of the source tree)tag-dated0Add date stamp (e.g. 20050528) to version number
tag-build=b-Specify explicit tag to add to version numberno-dateD"Don't include date stamp [default]c             C   s1   d  |  _  d  |  _ d  |  _ d  |  _ d |  _ d  S)NF)egg_baseegg_namerJ   egg_versionbroken_egg_info)r:   r4   r4   r5   initialize_options   s
    				zegg_info.initialize_optionsc             C   s   d  S)Nr4   )r:   r4   r4   r5   tag_svn_revision   s    zegg_info.tag_svn_revisionc             C   s   d  S)Nr4   )r:   valuer4   r4   r5   r\      s    c             C   s@   t  j   } |  j   | d <d | d <t | t d |   d S)z
        Materialize the value of date into the
        build tag. Install build keys in a deterministic order
        to avoid arbitrary reordering on subsequent builds.
        rA   r   rB   rJ   N)collectionsOrderedDictrE   r   dict)r:   filenamerJ   r4   r4   r5   save_version_info   s    
zegg_info.save_version_infoc             C   s  |  j  |  _ |  j   |  _ t |  j  } yK t | t j j  } | rN d n d } t	 t
 | |  j |  j f   WnJ t k
 r } z* t j j d |  j |  j f  |  WYd  d  } ~ Xn X|  j d  k r |  j j } | p i  j d t j  |  _ |  j d  t |  j  d |  _ |  j t j k rNt j j |  j |  j  |  _ d |  j k rg|  j   |  j |  j j _ |  j j } | d  k	 r| j |  j j   k r|  j | _ t |  j  | _  d  |  j _ d  S)Nz%s==%sz%s===%sz2Invalid distribution name or version syntax: %s-%sr   rW   z	.egg-info-)!r;   rX   r@   rY   r   
isinstancer   r?   Versionlistr   
ValueError	distutilserrorsDistutilsOptionErrorrW   r8   package_dirgetr"   curdirensure_dirnamer   rJ   r#   joincheck_broken_egg_infometadataZ_patched_distkeylower_version_parsed_version)r:   parsed_versionZ
is_versionspecrL   dirspdr4   r4   r5   finalize_options   s8    !	
$zegg_info.finalize_optionsFc             C   si   | r |  j  | | |  nI t j j |  re | d k rX | rX t j d | |  d S|  j |  d S)a  Write `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#   existsr   warndelete_file)r:   whatra   dataforcer4   r4   r5   write_or_delete_file   s    	zegg_info.write_or_delete_filec             C   s^   t  j d | |  t j s+ | j d  } |  j sZ t | d  } | j |  | j   d S)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.
        zwriting %s to %szutf-8wbN)	r   infor   PY2encodedry_runopenwriteclose)r:   r   ra   r   fr4   r4   r5   r{     s    		zegg_info.write_filec             C   s*   t  j d |  |  j s& t j |  d S)z8Delete `filename` (if not a dry run) after announcing itzdeleting %sN)r   r   r   r"   unlink)r:   ra   r4   r4   r5   r~     s    	zegg_info.delete_filec             C   s   |  j  |  j  t j |  j d   |  j j } xX t d  D]J } | j d |  | j   } | |  | j	 t j
 j |  j | j	   q< Wt j
 j |  j d  } t j
 j |  r |  j |  |  j   d  S)Nzegg_info.writers	installerznative_libs.txt)mkpathrJ   r"   utimer8   Zfetch_build_eggr   requireresolver;   r#   ro   r|   r~   find_sources)r:   r   epwriternlr4   r4   r5   run  s    ,zegg_info.runc             C   sJ   t  j j |  j d  } t |  j  } | | _ | j   | j |  _ d S)z"Generate SOURCES.txt manifest filezSOURCES.txtN)	r"   r#   ro   rJ   manifest_makerr8   manifestr   filelist)r:   Zmanifest_filenamemmr4   r4   r5   r   +  s
    	
zegg_info.find_sourcesc             C   s   |  j  d } |  j t j k r7 t j j |  j |  } t j j |  r t j d d d d d | |  j	  |  j	 |  _
 | |  _	 d  S)Nz	.egg-inforc   N   z
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.
)rX   rW   r"   rm   r#   ro   r|   r   r}   rJ   rZ   )r:   Zbeir4   r4   r5   rp   3  s    zegg_info.check_broken_egg_infoN)rK   rL   rM   )rN   rO   rP   )rQ   rR   rS   )rT   rU   rV   )rF   rG   rH   descriptionuser_optionsboolean_optionsnegative_optr[   rI   r\   setterrb   rz   r   r{   r~   r   r   rp   r4   r4   r4   r5   rJ      s$   		
1rJ   c               @   s   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d S)r   c             C   s  |  j  |  \ } } } } | d k rt |  j d d j |   x| D]% } |  j |  sH t j d |  qH Wnc| d k r |  j d d j |   x:| D]% } |  j |  s t j d |  q Wn
| d k r&|  j d	 d j |   x| D]% } |  j |  s t j d
 |  q Wn| d k r|  j d d j |   x| D]% } |  j |  sSt j d |  qSWnX| d k r|  j d | d j |  f  x)| D]+ } |  j	 | |  st j d | |  qWn | d k rI|  j d | d j |  f  x | D]+ } |  j
 | |  st j d | |  qWn | d k r|  j d |  |  j |  st j d |  nO | d k r|  j d |  |  j |  st j d |  n t d |   d  S)Nincludezinclude  z%warning: no files found matching '%s'excludezexclude z9warning: no previously-included files found matching '%s'zglobal-includezglobal-include z>warning: no files found matching '%s' anywhere in distributionzglobal-excludezglobal-exclude zRwarning: no previously-included files matching '%s' found anywhere in distributionzrecursive-includezrecursive-include %s %sz:warning: no files found matching '%s' under directory '%s'zrecursive-excludezrecursive-exclude %s %szNwarning: no previously-included files matching '%s' found under directory '%s'graftzgraft z+warning: no directories found matching '%s'prunezprune z6no previously-included directories found matching '%s'z'this cannot happen: invalid action '%s')Z_parse_template_linedebug_printro   r   r   r}   r   global_includeglobal_excluderecursive_includerecursive_excluder   r   r   )r:   lineactionpatternsdirZdir_patternpatternr4   r4   r5   process_template_lineF  sd    								
	
zFileList.process_template_linec             C   so   d } xb t  t |  j  d d d  D]A } | |  j |  r& |  j d |  j |  |  j | =d } q& W| S)z
        Remove all files from the file list that match the predicate.
        Return True if any matching files were removed
        Fr   z
 removing Tr   )ranger(   filesr   )r:   	predicatefoundr1   r4   r4   r5   _remove_files  s    &

zFileList._remove_filesc             C   s0   d d   t  |  D } |  j |  t |  S)z#Include files that match 'pattern'.c             S   s(   g  |  ] } t  j j |  s |  q Sr4   )r"   r#   isdir).0r   r4   r4   r5   
<listcomp>  s   	 z$FileList.include.<locals>.<listcomp>)r   extendbool)r:   r   r   r4   r4   r5   r     s    zFileList.includec             C   s   t  |  } |  j | j  S)z#Exclude files that match 'pattern'.)r6   r   match)r:   r   r   r4   r4   r5   r     s    zFileList.excludec             C   sN   t  j j | d |  } d d   t | d d D } |  j |  t |  S)zN
        Include all files anywhere in 'dir/' that match the pattern.
        z**c             S   s(   g  |  ] } t  j j |  s |  q Sr4   )r"   r#   r   )r   r   r4   r4   r5   r     s   	 z.FileList.recursive_include.<locals>.<listcomp>	recursiveT)r"   r#   ro   r   r   r   )r:   r   r   Zfull_patternr   r4   r4   r5   r     s    zFileList.recursive_includec             C   s.   t  t j j | d |   } |  j | j  S)zM
        Exclude any file anywhere in 'dir/' that match the pattern.
        z**)r6   r"   r#   ro   r   r   )r:   r   r   r   r4   r4   r5   r     s    zFileList.recursive_excludec             C   s0   d d   t  |  D } |  j |  t |  S)zInclude all files from 'dir/'.c             S   s/   g  |  ]% } t  j j |  D] } |  q q Sr4   )rh   r   findall)r   Z	match_diritemr4   r4   r5   r     s   	z"FileList.graft.<locals>.<listcomp>)r   r   r   )r:   r   r   r4   r4   r5   r     s    	zFileList.graftc             C   s+   t  t j j | d   } |  j | j  S)zFilter out files from 'dir/'.z**)r6   r"   r#   ro   r   r   )r:   r   r   r4   r4   r5   r     s    zFileList.prunec                sg   |  j  d k r |  j   t t j j d |       f d d   |  j  D } |  j |  t |  S)z
        Include all files anywhere in the current directory that match the
        pattern. This is very inefficient on large file trees.
        Nz**c                s%   g  |  ] }   j  |  r |  q Sr4   )r   )r   r   )r   r4   r5   r     s   	 z+FileList.global_include.<locals>.<listcomp>)allfilesr   r6   r"   r#   ro   r   r   )r:   r   r   r4   )r   r5   r     s    
zFileList.global_includec             C   s+   t  t j j d |   } |  j | j  S)zD
        Exclude all files anywhere that match the pattern.
        z**)r6   r"   r#   ro   r   r   )r:   r   r   r4   r4   r5   r     s    zFileList.global_excludec             C   sN   | j  d  r | d  d  } t |  } |  j |  rJ |  j j |  d  S)Nr   r   )r>   r   
_safe_pathr   append)r:   r   r#   r4   r4   r5   r     s
    zFileList.appendc             C   s    |  j  j t |  j |   d  S)N)r   r   filterr   )r:   pathsr4   r4   r5   r     s    zFileList.extendc             C   s"   t  t |  j |  j   |  _ d S)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)rf   r   r   r   )r:   r4   r4   r5   _repair  s    zFileList._repairc             C   s   d } t  j |  } | d  k r6 t j d |  d St  j | d  } | d  k rk t j | | d  d Sy, t j j |  s t j j |  r d SWn+ t k
 r t j | | t	 j
    Yn Xd  S)Nz!'%s' not %s encodable -- skippingz''%s' in unexpected encoding -- skippingFzutf-8T)unicode_utilsfilesys_decoder   r}   Z
try_encoder"   r#   r|   UnicodeEncodeErrorsysgetfilesystemencoding)r:   r#   Zenc_warnZu_pathZ	utf8_pathr4   r4   r5   r     s    $zFileList._safe_pathN)rF   rG   rH   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r4   r4   r4   r5   r   C  s   I


r   c               @   s   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 e
 d d    Z d d   Z d d   Z d S)r   zMANIFEST.inc             C   s(   d |  _  d |  _ d |  _ d |  _ d  S)Nr   )Zuse_defaultsr   Zmanifest_onlyZforce_manifest)r:   r4   r4   r5   r[   
  s    			z!manifest_maker.initialize_optionsc             C   s   d  S)Nr4   )r:   r4   r4   r5   rz     s    zmanifest_maker.finalize_optionsc             C   s   t    |  _ t j j |  j  s+ |  j   |  j   t j j |  j  rT |  j	   |  j
   |  j j   |  j j   |  j   d  S)N)r   r   r"   r#   r|   r   write_manifestadd_defaultstemplateZread_templateprune_file_listsortZremove_duplicates)r:   r4   r4   r5   r     s    



zmanifest_maker.runc             C   s"   t  j |  } | j t j d  S)N/)r   r   replacer"   r$   )r:   r#   r4   r4   r5   _manifest_normalize  s    z"manifest_maker._manifest_normalizec                sY     j  j     f d d     j  j D } d   j }   j t   j | f |  d S)zo
        Write the file list in 'self.filelist' to the manifest file
        named by 'self.manifest'.
        c                s   g  |  ] }   j  |   q Sr4   )r   )r   r   )r:   r4   r5   r   +  s   	 z1manifest_maker.write_manifest.<locals>.<listcomp>zwriting manifest file '%s'N)r   r   r   r   executer{   )r:   r   msgr4   )r:   r5   r   #  s    zmanifest_maker.write_manifestc             C   s#   |  j  |  s t j |  |  d  S)N)_should_suppress_warningr	   r}   )r:   r   r4   r4   r5   r}   /  s    zmanifest_maker.warnc             C   s   t  j d |   S)z;
        suppress missing-file warnings from sdist
        zstandard file .*not found)r%   r   )r   r4   r4   r5   r   3  s    z'manifest_maker._should_suppress_warningc             C   s   t  j |   |  j   |  j j |  j  |  j j |  j  t t    } | re |  j j	 |  n t
 j j |  j  r |  j   t
 j j d  r |  j j d  |  j d  } |  j j | j  d  S)Nzsetup.pyrJ   )r	   r   Zcheck_licenser   r   r   r   rf   r
   r   r"   r#   r|   Zread_manifestget_finalized_commandr   rJ   )r:   ZrcfilesZei_cmdr4   r4   r5   r   :  s    

zmanifest_maker.add_defaultsc             C   sy   |  j  d  } |  j j   } |  j j | j  |  j j |  t j t j	  } |  j j
 d | d | d d d  S)Nbuildz(^|z)(RCS|CVS|\.svn)Zis_regexr   )r   r8   get_fullnamer   r   
build_baser%   r&   r"   r$   Zexclude_pattern)r:   r   base_dirr$   r4   r4   r5   r   M  s    zmanifest_maker.prune_file_listN)rF   rG   rH   r   r[   rz   r   r   r   r}   staticmethodr   r   r   r4   r4   r4   r5   r     s   r   c          	   C   sH   d j  |  } | j d  } t |  d   } | j |  Wd QRXd S)z{Create a file with the specified name and write 'contents' (a
    sequence of strings without line terminators) to it.
    
zutf-8r   N)ro   r   r   r   )ra   contentsr   r4   r4   r5   r{   W  s    r{   c             C   s   t  j d |  |  j s |  j j } |  j | j | _ } |  j | j | _ } z | j	 |  j
  Wd  | | | _ | _ Xt |  j d d   } t j |  j
 |  d  S)Nz
writing %sZzip_safe)r   r   r   r8   rq   rY   r?   rX   r;   write_pkg_inforJ   getattrr   Zwrite_safety_flag)cmdbasenamera   rq   ZoldverZoldnamesafer4   r4   r5   r   d  s    	r   c             C   s#   t  j j |  r t j d  d  S)NzsWARNING: 'depends.txt' is not used by setuptools 0.6!
Use the install_requires/extras_require setup() args instead.)r"   r#   r|   r   r}   )r   r   ra   r4   r4   r5   warn_depends_obsoletew  s    r   c             C   s>   t  | p f   } d d   } t | |  } |  j |  d  S)Nc             S   s   |  d S)Nr   r4   )r   r4   r4   r5   	append_cr  s    z&_write_requirements.<locals>.append_cr)r   r   
writelines)streamreqslinesr   r4   r4   r5   _write_requirements  s    r   c             C   s   |  j  } t j   } t | | j  | j p1 i  } x> t |  D]0 } | j d j t	      t | | |  qA W|  j
 d | | j    d  S)Nz
[{extra}]
requirements)r8   r   StringIOr   Zinstall_requiresextras_requiresortedr   formatvarsr   getvalue)r   r   ra   distr   r   extrar4   r4   r5   write_requirements  s    	r   c             C   s<   t  j   } t | |  j j  |  j d | | j    d  S)Nzsetup-requirements)ior   r   r8   Zsetup_requiresr   r   )r   r   ra   r   r4   r4   r5   write_setup_requirements  s    r   c             C   sO   t  j d d   |  j j   D  } |  j d | d j t |   d  d  S)Nc             S   s&   g  |  ] } | j  d  d  d  q S).r   r   )r!   )r   kr4   r4   r5   r     s   	z(write_toplevel_names.<locals>.<listcomp>ztop-level namesr   )r`   fromkeysr8   Ziter_distribution_namesr{   ro   r   )r   r   ra   pkgsr4   r4   r5   write_toplevel_names  s    	r   c             C   s   t  |  | | d  d  S)NT)	write_arg)r   r   ra   r4   r4   r5   overwrite_arg  s    r   Fc             C   sd   t  j j |  d } t |  j | d   } | d  k	 rJ d j |  d } |  j | | | |  d  S)Nr   r   )r"   r#   splitextr   r8   ro   r   )r   r   ra   r   Zargnamer]   r4   r4   r5   r     s
    r   c             C   s   |  j  j } t | t j  s* | d  k r3 | } n | d  k	 r g  } x t | j    D]k \ } } t | t j  s t j | |  } d j	 t t
 t | j      } | j d | | f  qX Wd j	 |  } |  j d | | d  d  S)Nr   z	[%s]
%s

r   zentry pointsT)r8   entry_pointsrd   r   string_typesr   itemsr   parse_groupro   r   strvaluesr   r   )r   r   ra   r   r   sectionr   r4   r4   r5   write_entries  s    	$r  c              C   s{   t  j d t  t j j d  rw t j d  C }  x9 |  D]1 } t j	 d |  } | r; t
 | j d   Sq; WWd QRXd S)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.zPKG-INFOzVersion:.*-r(\d+)\s*$r   Nr   )warningsr}   EggInfoDeprecationWarningr"   r#   r|   r   r   r%   r   intgroup)r   r   r   r4   r4   r5   get_pkg_info_revision  s    
r  c               @   s   e  Z d  Z d Z d S)r  z?Deprecated behavior warning for EggInfo, bypassing suppression.N)rF   rG   rH   __doc__r4   r4   r4   r5   r    s   r  )=r  distutils.filelistr   Z	_FileListZdistutils.errorsr   distutils.utilr   rh   r   r"   r%   r   r   r  rC   r^   Zsetuptools.externr   Zsetuptools.extern.six.movesr   
setuptoolsr   Zsetuptools.command.sdistr	   r
   Zsetuptools.command.setoptr   Zsetuptools.commandr   pkg_resourcesr   r   r   r   r   r   r   r   Zsetuptools.unicode_utilsr   Zsetuptools.globr   r   r   r6   r7   rJ   r   r{   r   r   r   r   r   r   r   r   r  r  r  r4   r4   r4   r5   <module>   sT   :SP	
