ó
%}Xc           @@ sú   d  d l  m Z m 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 m Z d  d l m Z d  d l m Z e e d „ Z d	 „  Z e d
 „ Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   i    (   t   absolute_importt   unicode_literalsN(   t   defaultdict(   t   partial(   t   DistutilsOptionErrort   DistutilsFileError(   t   import_module(   t   string_typesc   	      C@ sù   d d l  m } m } t j j |  ƒ }  t j j |  ƒ sM t d |  ƒ ‚ n  t j ƒ  } t j	 t j j
 |  ƒ ƒ zl | ƒ  } | r | j ƒ  n g  } |  | k r² | j |  ƒ n  | j | d | ƒt | | j d | ƒ} Wd t j	 | ƒ Xt | ƒ S(   u,  Read given configuration file and returns options from it as a dict.

    :param str|unicode filepath: Path to configuration file
        to get options from.

    :param bool find_others: Whether to search for other configuration files
        which could be on in various places.

    :param bool ignore_option_errors: Whether to silently ignore
        options, values of which could not be resolved (e.g. due to exceptions
        in directives such as file:, attr:, etc.).
        If False exceptions are propagated as expected.

    :rtype: dict
    i    (   t   Distributiont   _Distributionu%   Configuration file %s does not exist.t	   filenamest   ignore_option_errorsN(   t   setuptools.distR   R	   t   ost   patht   abspatht   isfileR   t   getcwdt   chdirt   dirnamet   find_config_filest   appendt   parse_config_filest   parse_configurationt   command_optionst   configuration_to_dict(	   t   filepatht   find_othersR   R   R	   t   current_directoryt   distR
   t   handlers(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   read_configuration   s$    	c         C@ s’   t  t ƒ } x |  D]w } | j } | j } x\ | j D]Q } t | d | d ƒ } | d k ro t | | ƒ } n	 | ƒ  } | | | | <q5 Wq W| S(   u»   Returns configuration data gathered by given handlers as a dict.

    :param list[ConfigHandler] handlers: Handlers list,
        usually from parse_configuration()

    :rtype: dict
    u   get_%sN(   R   t   dictt   section_prefixt
   target_objt   set_optionst   getattrt   None(   R   t   config_dictt   handlert	   obj_aliasR"   t   optiont   gettert   value(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyR   <   s    			c         C@ sE   t  |  j | | ƒ } | j ƒ  t |  | | ƒ } | j ƒ  | | g S(   uÒ  Performs additional parsing of configuration options
    for a distribution.

    Returns a list of used option handlers.

    :param Distribution distribution:
    :param dict command_options:
    :param bool ignore_option_errors: Whether to silently ignore
        options, values of which could not be resolved (e.g. due to exceptions
        in directives such as file:, attr:, etc.).
        If False exceptions are propagated as expected.
    :rtype: list
    (   t   ConfigMetadataHandlert   metadatat   parset   ConfigOptionsHandler(   t   distributionR   R   t   metat   options(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyR   Y   s    

t   ConfigHandlerc           B@ s¿   e  Z d  Z d Z i  Z e d „ Z e d „  ƒ Z	 d „  Z
 e d d „ ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d	 „  ƒ Z e d
 „  ƒ Z e d d „ ƒ Z d „  Z d „  Z RS(   u1   Handles metadata supplied in configuration files.c         C@ sŽ   i  } |  j  } xT | j ƒ  D]F \ } } | j | ƒ s= q n  | j | d ƒ j d ƒ } | | | <q W| |  _ | |  _ | |  _ g  |  _ d  S(   Nu    u   .(	   R!   t   itemst
   startswitht   replacet   stripR   R"   t   sectionsR#   (   t   selfR"   R2   R   R8   R!   t   section_namet   section_options(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   __init__ƒ   s    				c         C@ s   t  d |  j j ƒ ‚ d S(   u.   Metadata item name to parser function mapping.u!   %s must provide .parsers propertyN(   t   NotImplementedErrort	   __class__t   __name__(   R9   (    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   parsers“   s    c   	      C@ s  t  ƒ  } |  j } |  j j | | ƒ } t | | | ƒ } | | k rT t | ƒ ‚ n  | r^ d  St } |  j j | ƒ } | r¸ y | | ƒ } Wq¸ t k
 r´ t	 } |  j
 sµ ‚  qµ q¸ Xn  | rÂ d  St | d | d  ƒ } | d  k r÷ t | | | ƒ n
 | | ƒ |  j j | ƒ d  S(   Nu   set_%s(   t   tupleR"   t   aliasest   getR$   t   KeyErrort   FalseR@   t	   Exceptiont   TrueR   R%   t   setattrR#   R   (	   R9   t   option_nameR+   t   unknownR"   t   current_valuet   skip_optiont   parsert   setter(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   __setitem__™   s0    			
u   ,c         C@ sf   t  | t ƒ r | Sd | k r. | j ƒ  } n | j | ƒ } g  | D] } | j ƒ  rD | j ƒ  ^ qD S(   u×   Represents value as a list.

        Value is split either by separator (defaults to comma) or by lines.

        :param value:
        :param separator: List items separator character.
        :rtype: list
        u   
(   t
   isinstancet   listt
   splitlinest   splitR7   (   t   clsR+   t	   separatort   chunk(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   _parse_list¿   s    
c         C@ sw   d } i  } xd |  j  | ƒ D]S } | j | ƒ \ } } } | | k rY t d | ƒ ‚ n  | j ƒ  | | j ƒ  <q W| S(   uP   Represents value as a dict.

        :param value:
        :rtype: dict
        u   =u(   Unable to parse option value to dict: %s(   RW   t	   partitionR   R7   (   RT   R+   RU   t   resultt   linet   keyt   sept   val(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   _parse_dictÓ   s    c         C@ s   | j  ƒ  } | d k S(   uQ   Represents value as boolean.

        :param value:
        :rtype: bool
        u   1u   trueu   yes(   u   1u   trueu   yes(   t   lower(   RT   R+   (    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   _parse_boolå   s    c         C@ sÇ   t  | t ƒ s | Sd } | j | ƒ s, | St j ƒ  } | j | d ƒ j ƒ  } t j j | ƒ } | j | ƒ s„ t	 d | ƒ ‚ n  t j j
 | ƒ rÃ t j | d d ƒ } | j ƒ  } Wd QXn  | S(   uU  Represents value as a string, allowing including text
        from nearest files using `file:` directive.

        Directive is sandboxed and won't reach anything outside
        directory with setup.py.

        Examples:
            include: LICENSE
            include: src/file.txt

        :param str value:
        :rtype: str
        u   file:u    u#   `file:` directive can not access %st   encodingu   utf-8N(   RP   R   R5   R   R   R6   R7   R   R   R   R   t   iot   opent   read(   RT   R+   t   include_directiveR   R   t   f(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   _parse_fileï   s    c         C@ s±   d } | j  | ƒ s | S| j | d ƒ j ƒ  j d ƒ } | j ƒ  } d j | ƒ } | p^ d } t j j d t	 j
 ƒ  ƒ z t | ƒ } t | | ƒ } Wd t j d t _ X| S(   u·   Represents value as a module attribute.

        Examples:
            attr: package.attr
            attr: package.module.attr

        :param str value:
        :rtype: str
        u   attr:u    u   .u   __init__i    Ni   (   R5   R6   R7   RS   t   popt   joint   sysR   t   insertR   R   R   R$   (   RT   R+   t   attr_directivet
   attrs_patht	   attr_namet   module_namet   module(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   _parse_attr  s    !c         @ s   ‡  f d †  } | S(   u¹   Returns parser function to represents value as a list.

        Parses a value applying given methods one after another.

        :param parse_methods:
        :rtype: callable
        c         @ s'   |  } x ˆ  D] } | | ƒ } q W| S(   N(    (   R+   t   parsedt   method(   t   parse_methods(    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyR.   <  s    (    (   RT   Rt   R.   (    (   Rt   s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   _get_parser_compound3  s    	c         C@ sL   i  } | p d „  } x0 | j  ƒ  D]" \ } \ } } | | ƒ | | <q" W| S(   uÊ   Parses section options into a dictionary.

        Optionally applies a given parser to values.

        :param dict section_options:
        :param callable values_parser:
        :rtype: dict
        c         S@ s   |  S(   N(    (   R]   (    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   <lambda>Q  s    (   R4   (   RT   R;   t   values_parserR+   R[   t   _R]   (    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   _parse_section_to_dictF  s
    
c         C@ sI   xB | j  ƒ  D]4 \ } \ } } y | |  | <Wq t k
 r@ q Xq Wd S(   uQ   Parses configuration file section.

        :param dict section_options:
        N(   R4   RD   (   R9   R;   t   nameRx   R+   (    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   parse_sectionV  s
    c         C@ s‘   xŠ |  j  j ƒ  D]y \ } } d } | r5 d | } n  t |  d | j d d ƒ d ƒ } | d k r t d |  j | f ƒ ‚ n  | | ƒ q Wd S(   uT   Parses configuration file items from one
        or more related sections.

        u    u   _%su   parse_section%su   .u   __u0   Unsupported distribution option section: [%s.%s]N(   R8   R4   R$   R6   R%   R   R!   (   R9   R:   R;   t   method_postfixt   section_parser_method(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyR.   b  s    	N(   R?   t
   __module__t   __doc__R%   R!   RB   RE   R<   t   propertyR@   RO   t   classmethodRW   R^   R`   Rg   Rq   Ru   Ry   R{   R.   (    (    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyR3   s   s"   	&
%	R,   c           B@ sW   e  Z d  Z i d d 6d d 6d d 6d d 6Z e Z e d	 „  ƒ Z d
 „  Z d „  Z	 RS(   u   metadatau   urlu	   home_pageu   descriptionu   summaryu   classifiersu
   classifieru	   platformsu   platformc         C@ sk   |  j  } |  j } i
 | d 6| d 6| d 6| d 6| d 6|  j | | ƒ d 6| d 6| d 6| d	 6|  j d
 6S(   u.   Metadata item name to parser function mapping.u	   platformsu   keywordsu   providesu   requiresu	   obsoletesu   classifiersu   licenseu   descriptionu   long_descriptionu   version(   RW   Rg   Ru   t   _parse_version(   R9   t
   parse_listt
   parse_file(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyR@   Œ  s    		c         C@ sT   g  } x= | j  ƒ  D]/ \ } \ } } | j d | j ƒ  | f ƒ q W| |  d <d S(   uQ   Parses configuration file section.

        :param dict section_options:
        u   %s :%su   classifiersN(   R4   R   t   title(   R9   R;   t   classifierst   beginRx   t   rest(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   parse_section_classifiersŸ  s    !c         C@ sq   |  j  | ƒ } t | ƒ r' | ƒ  } n  t | t ƒ sm t | d ƒ r` d j t t | ƒ ƒ } qm d | } n  | S(   uS   Parses `version` option value.

        :param value:
        :rtype: str

        u   __iter__u   .u   %s(   Rq   t   callableRP   R   t   hasattrRi   t   mapt   str(   R9   R+   t   version(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyR‚   ª  s    (
   R?   R~   R!   RB   RE   t   strict_modeR€   R@   R‰   R‚   (    (    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyR,   {  s   
	R/   c           B@ s\   e  Z d  Z e d „  ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z RS(	   u   optionsc         C@ sª   |  j  } t |  j  d d ƒ} |  j } |  j } i | d 6| d 6| d 6| d 6| d 6| d 6| d	 6| d
 6| d 6| d 6| d 6| d 6| d 6| d 6|  j d 6|  j d 6S(   u.   Metadata item name to parser function mapping.RU   u   ;u   zip_safeu   use_2to3u   include_package_datau   package_diru   use_2to3_fixersu   use_2to3_exclude_fixersu   convert_2to3_doctestsu   scriptsu   eager_resourcesu   dependency_linksu   namespace_packagesu   install_requiresu   setup_requiresu   tests_requireu   packagesu   entry_points(   RW   R   R`   R^   t   _parse_packagesRg   (   R9   Rƒ   t   parse_list_semicolont
   parse_boolt
   parse_dict(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyR@   Ã  s*    			
c         C@ sZ   d } | j  | ƒ s" |  j | ƒ S|  j |  j j d i  ƒ ƒ } d d l m } | |   S(   uT   Parses `packages` option value.

        :param value:
        :rtype: list
        u   find:u   packages.findi    (   t   find_packages(   R5   RW   t   parse_section_packages__findR8   RC   t
   setuptoolsR”   (   R9   R+   t   find_directivet   find_kwargsR”   (    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyR   Þ  s    c         C@ s—   |  j  | |  j ƒ } d d d g } t g  | j ƒ  D]* \ } } | | k r4 | r4 | | f ^ q4 ƒ } | j d ƒ } | d k	 r“ | d | d <n  | S(   uœ   Parses `packages.find` configuration file section.

        To be used in conjunction with _parse_packages().

        :param dict section_options:
        u   whereu   includeu   excludei    N(   Ry   RW   R    R4   RC   R%   (   R9   R;   t   section_datat
   valid_keyst   kt   vR˜   t   where(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyR•   ñ  s    @c         C@ s#   |  j  | |  j ƒ } | |  d <d S(   u`   Parses `entry_points` configuration file section.

        :param dict section_options:
        u   entry_pointsN(   Ry   RW   (   R9   R;   Rr   (    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   parse_section_entry_points  s    c         C@ sB   |  j  | |  j ƒ } | j d ƒ } | r> | | d <| d =n  | S(   Nu   *u    (   Ry   RW   RC   (   R9   R;   Rr   t   root(    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   _parse_package_data  s    

c         C@ s   |  j  | ƒ |  d <d S(   u`   Parses `package_data` configuration file section.

        :param dict section_options:
        u   package_dataN(   R    (   R9   R;   (    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   parse_section_package_data  s    c         C@ s   |  j  | ƒ |  d <d S(   uh   Parses `exclude_package_data` configuration file section.

        :param dict section_options:
        u   exclude_package_dataN(   R    (   R9   R;   (    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt"   parse_section_exclude_package_data  s    c         C@ s/   t  |  j d d ƒ} |  j | | ƒ |  d <d S(   ub   Parses `extras_require` configuration file section.

        :param dict section_options:
        RU   u   ;u   extras_requireN(   R   RW   Ry   (   R9   R;   Rƒ   (    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   parse_section_extras_require'  s    (   R?   R~   R!   R€   R@   R   R•   Rž   R    R¡   R¢   R£   (    (    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyR/   ¿  s   				
		(   t
   __future__R    R   Rb   R   Rj   t   collectionsR   t	   functoolsR   t   distutils.errorsR   R   t   setuptools.py26compatR   t   setuptools.extern.sixR   RE   R   R   R   t   objectR3   R,   R/   (    (    (    s5   /usr/lib/python2.7/dist-packages/setuptools/config.pyt   <module>   s   .	ÿ 	D