ó
^†êWc           @   sà  d  Z  d d l m Z d d l m Z d d l m Z y d d l m Z Wn e k
 rc e	 Z n Xd 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	 Z i d
 d 6d d 6d d 6Z e ƒ  Z i d d 6d d 6d f i d d 6d d 6d f f Z e d( ƒ Z e
 j d ƒ Z e
 j d ƒ Z e d d) ƒ Z d „  Z d „  Z d d  „ Z! d! „  Z" d" „  Z# d# „  Z$ d$ „  Z% d% „  Z& d& „  Z' e( d' k rÜd d l) Z) d d l* Z* e* j* e! e) j+ d ƒ ƒ n  d S(*   s2   
Tools for converting old- to new-style metadata.
iÿÿÿÿ(   t
   namedtuplei   (   t   read_pkg_info(   t   OrderedDefaultDict(   t   OrderedDictN(   t   __version__s   2.0t   classifierst
   classifiert   providest   provides_distt   extrast   provides_extrat   author_emailt   emailt   authort   namet   maintainer_emailt
   maintainert   platformt	   home_paget   licensesF   ^(?P<package>.*?)(;\s*(?P<condition>.*?)(extra == '(?P<extra>.*?)')?)$s   [ -,]+t   MayRequiresKeyt	   conditiont   extrac         c   s?   t  ƒ  } x/ |  D]' } | | k r | j | ƒ | Vq q Wd S(   s<   
    Yield unique values in iterable, preserving order.
    N(   t   sett   add(   t   iterablet   seent   value(    (    sa   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/metadata.pyt   unique-   s
    	c         C   s¬  t  t ƒ } x­ t | j | ƒ ƒ D]– } t j | ƒ } | r† | j ƒ  } | d } | d } | d }	 | j d ƒ r˜ | d  } q˜ n d \ } } | }	 t	 | | ƒ } | | j
 |	 ƒ q" W| r¨g  |  d <d „  }
 x~ t | j ƒ  d |
 ƒD]d \ } } t d	 | f f ƒ } | j r(| j | d <n  | j rA| j | d
 <n  |  d j
 | ƒ qî Wd |  k rog  |  d <n  |  d j g  | j ƒ  D] } | j r†| j ^ q†ƒ n  d S(   sE   
    Place the runtime requirements from pkg_info into metadata.
    R   R   t   packages    and iûÿÿÿt   run_requiresc         S   s&   |  \ } } | j  d  k r d S| j  S(   Nt    (   R   t   None(   t   itemt   keyR   (    (    sa   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/metadata.pyt   sort_keyN   s    R"   t   requirest   environmentR	   N(   NN(   R   t   listt   sortedt   get_allt   EXTRA_REt   searcht	   groupdictt   endswithR    R   t   appendt   itemsR   R   R   t   extendt   keys(   t   metadatat   pkg_infoR"   t   may_requiresR   t   extra_matchR+   R   R   R   R#   t   may_requirement(    (    sa   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/metadata.pyt   handle_requires8   s6    



	%		c         C   sE  t  d „  ƒ } d t d | d <y t t |  ƒ } WnP t k
 r‡ t |  d ƒ . } t j j ƒ  j	 | j
 ƒ  j d ƒ ƒ } Wd QXn Xd } | d rµ t | d ƒ | d	 <| d =n  | d
 rÕ t | ƒ } | d
 =n< | j ƒ  } t | t ƒ r| j d ƒ } n  | r| } n  | r$| | d <n  xbt t d „  | j ƒ  Dƒ ƒ ƒ D]>} | j d d ƒ } | t k rqqGn  | t k r˜| j | ƒ d k r˜qGn  | t t ƒ k rÄ| j | ƒ | t | <qG| d k rãt | | | ƒ qG| d k r%d | k rg  | d <n  | d j | j | ƒ ƒ qG| d k rQi | | d 6| d d d <qG| d k rwt j | | ƒ | d <qG| | | | <qGWt | d <d | k r¼t t  | d ƒ ƒ | d <n  | r;xv d* D]k \ }	 }
 yK t! | |
 ƒ } t | t" ƒ rt t# | ƒ ƒ } i | d 6g | |	 <n  WqÉt$ k
 r3qÉXqÉWn  g  } x~ t% D]v \ } } t& ƒ  } x> t | ƒ D]0 } | | | k rj| j' | | ƒ | | <qjqjW| rH| | d <| j( | ƒ qHqHW| rÝ| | d d d <n  yë t t) j* j+ t) j* j, |  ƒ d ƒ d  ƒ  } t- j. j/ | j
 ƒ  ƒ } Wd QXt& ƒ  } xy t | j0 ƒ  ƒ D]e \ } } t& ƒ  | | <xI t t1 t2 | j3 ƒ  ƒ ƒ D], } | j d! d" ƒ \ } } | | | | <q|WqGW| rÇ| | d d# <n  Wn t4 k
 rÛn Xd# | d k rAxR d+ d, f D]A \ } } | | d d# k rù| d d# | | d d( | <qùqùWn  | S(-   s  
    Convert PKG-INFO to a prototype Metadata 2.0 (PEP 426) dict.

    The description is included under the key ['description'] rather than
    being written to a separate file.

    path: path to PKG-INFO file
    distribution: optional distutils Distribution()
    c           S   s   t  d „  ƒ S(   Nc           S   s
   t  t ƒ S(   N(   R   R   (    (    (    sa   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/metadata.pyt   <lambda>m   s    (   R   (    (    (    sa   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/metadata.pyR7   m   s    s   bdist_wheel (t   )t	   generatort   rbs   utf-8Nt   Summaryt   summaryt   Descriptiont   descriptionc         s   s   |  ] } | j  ƒ  Vq d  S(   N(   t   lower(   t   .0t   k(    (    sa   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/metadata.pys	   <genexpr>Š   s    t   -t   _t   UNKNOWNt   requires_distR
   R	   R   t   Homet
   extensionss   python.detailst   project_urlst   keywordst   metadata_versiont   test_requirest   tests_requireR$   t   rolet   contactss   entry_points.txtt   rs    = i   s   python.exportst   console_scriptst   wrap_consolet   gui_scriptst   wrap_guis   python.commands(   RK   RL   (   (   RK   RL   (   s   console_scriptsRQ   (   s   gui_scriptsRS   (5   R   t   wheel_versiont   unicodeR   t	   NameErrort   openR   t   parsert   Parsert   parsestrt   readt   decodeR    t   pkginfo_unicodet   dedent_descriptiont   get_payloadt
   isinstancet   bytesR'   R   R0   t   replacet   SKIP_FIELDSt   UNKNOWN_FIELDSt   gett   PLURAL_FIELDSR(   R6   R/   t   KEYWORDS_REt   splitt   METADATA_VERSIONR   t   getattrR&   t   convert_requirementst   AttributeErrort   CONTACT_FIELDSR   t   popR-   t   ost   patht   joint   dirnamet   pkg_resourcest
   EntryPointt	   parse_mapR.   t   mapt   strt   valuest   IOError(   Rp   t   distributionR1   R2   t   pkg_info_fileR>   t   payloadR"   t   low_keyR$   t   attrt   requirementst   new_requirementsRN   t   contact_typeRM   t   contactt   ep_filet   ep_mapt   exportst   groupR.   R!   R   t   exportt	   ep_scriptt   wrap_script(    (    sa   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/metadata.pyt   pkginfo_to_dictb   s¦    1



	)! 
	
-	"(c         C   sL   g  } x( |  j  D] \ } } | j | | ƒ q W| s; d Sd d j | ƒ S(   sB   Compose the version predicates for requirement in PEP 345 fashion.R   s    (%s)t   ,(   t   specsR-   Rq   (   t   requirementRE   t   opt   ver(    (    sa   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/metadata.pyt   requires_to_requires_distÝ   s    c         c   sh   xa |  D]Y } t  j j | ƒ } t | ƒ } d j | j ƒ } | rP d | } n  | j | | Vq Wd S(   s=   Yield Requires-Dist: strings for parsed requirements strings.R‹   s   [%s]N(   Rs   t   Requirementt   parseR   Rq   R	   t   project_name(   R   t   reqt   parsed_requirementt   specR	   (    (    sa   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/metadata.pyRk   æ   s    c         c   sÑ   xÊ |  j  ƒ  D]¼ \ } } d } | r[ d | k r[ | j d d ƒ \ } } t j | ƒ } n  | r d | f V| r | d 7} n  | d | 7} n  | r£ d | } n  x# t | ƒ D] } d | | f Vq° Wq Wd	 S(
   s,  
    Convert requirements from a setup()-style dictionary to ('Requires-Dist', 'requirement')
    and ('Provides-Extra', 'extra') tuples.

    extras_require is a dictionary of {extra: [requirements]} as passed to setup(),
    using the empty extra {'': [requirements]} to hold install_requires.
    R   t   :i   s   Provides-Extras    and s   extra == '%s's   ; s   Requires-DistN(   R.   Rh   Rs   t
   safe_extraRk   (   t   extras_requireR   t   dependsR   t   new_req(    (    sa   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/metadata.pyt   generate_requirementsð   s    c   
      C   s÷   t  | ƒ } | j d d ƒ t j j |  d ƒ } t j j | ƒ rÆ t | ƒ  } | j ƒ  } Wd QXx_ t t	 j
 | ƒ d d „  ƒD]< \ } } x- t i | | 6ƒ D] } | d | | d <q£ Wqƒ Wn  | d	 }	 |	 ró | j t | ƒ ƒ | d	 =n  | S(
   sn   
    Convert .egg-info directory with PKG-INFO to the Metadata 1.3 aka
    old-draft Metadata 2.0 format.
    s   Metadata-Versions   2.0s   requires.txtNR"   c         S   s   |  d p d S(   Ni    R   (    (   t   x(    (    sa   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/metadata.pyR7     s    i   i    R=   (   R   t   replace_headerRo   Rp   Rq   t   existsRW   R[   R'   Rs   t   split_sectionsRœ   t   set_payloadR^   (
   t   egg_info_patht   pkginfo_pathR2   t   requires_patht   requires_fileR$   R   t   reqsR!   R>   (    (    sa   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/metadata.pyt   pkginfo_to_metadata  s    

c         C   s•   |  | } | j  ƒ  } t | t ƒ s‘ t |  d ƒ s> t | ƒ SxP |  j ƒ  D]? } | d j  ƒ  | k rK | d j d d ƒ j d ƒ } PqK qK Wn  | S(   s<   Hack to coax Unicode out of an email Message() - Python 3.3+t	   raw_itemsi    i   t   asciit   surrogateescapes   utf-8(   R?   R`   Rw   t   hasattrR¨   t   encodeR\   (   R2   t   fieldt   textR!   (    (    sa   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/metadata.pyR]     s    

	c         C   s£   |  d } t  } t | t ƒ s7 t } t |  d ƒ } n  | j ƒ  } d j | d j ƒ  t j	 d j | d ƒ ƒ d f ƒ } | rŸ | j
 d ƒ j d d ƒ } n  | S(   s@   
    Dedent and convert pkg_info['Description'] to Unicode.
    R=   s   
i    i   t   utf8R©   Rª   (   t   FalseR`   Rw   t   TrueR]   t
   splitlinesRq   t   lstript   textwrapt   dedentR¬   R\   (   R2   R>   t
   surrogatest   description_linest   description_dedent(    (    sa   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/metadata.pyR^   /  s    
	t   __main__(   s   authors   author_emails   platforms	   home_pages   license(   s	   conditions   extra(,   t   __doc__t   collectionsR    t   pkginfoR   t   utilR   R   t   ImportErrort   dictt   ret   os.pathRo   R´   Rs   t   email.parserR   R   R   RT   Ri   Rf   R   Rc   Rm   Rd   t   compileR)   Rg   R   R   R6   R    RŠ   R   Rk   Rœ   R§   R]   R^   t   __name__t   syst   pprintt   argv(    (    (    sa   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/metadata.pyt   <module>   sN   


				*{			
				