Ë
    
_ßdHf  ã                   óŠ  — d 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	m
Z
mZmZmZmZmZmZmZmZmZmZ ddlmZmZ dd	lmZ dd
lmZ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	rddl'm(Z( ddl)m*Z* ee+ejX                  f   Z-ededef   f   Z.	 ede.f   Z/ eded   ¬«      Z0	 d8de-de1fd„Z2ddde-ddfd„Z3	 	 d9ddde-dee-   de4ded   f
d„Z5d e0d!e+fd"„Z6d#ed   de1fd$„Z7	 d:d%dd&e/ded'   fd(„Z8d)e+d*e+d+e9fd,„Z: G d-„ d.ee0   «      Z; G d/„ d0e;d1   «      Z< G d2„ d3e;d   «      Z= G d4„ d5e$«      Z> G d6„ d7e$«      Z?y);a<  
Load setuptools configuration from ``setup.cfg`` files.

**API will be made private in the future**

To read project metadata, consider using
``build.util.project_wheel_metadata`` (https://pypi.org/project/build/).
For simple scenarios, you can also try parsing the file directly
with the help of ``configparser``.
é    N)Údefaultdict)Úpartial©Úwraps)ÚTYPE_CHECKINGÚCallableÚAnyÚDictÚGenericÚIterableÚListÚOptionalÚSetÚTupleÚTypeVarÚUnioné   )Ú	FileErrorÚOptionError)Údefault_environment)ÚInvalidRequirementÚRequirement)ÚSpecifierSet)ÚInvalidVersionÚVersion)ÚSetuptoolsDeprecationWarningé   )Úexpand)ÚDistributionMetadata©ÚDistributionÚstrÚTarget)r!   r   )ÚboundÚfilepathÚreturnc                 óv   — ddl m}  |«       }|r|j                  «       ng }t        || ||«      }t	        |«      S )a,  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
    r   r    )Úsetuptools.distr!   Úfind_config_filesÚ_applyÚconfiguration_to_dict)r%   Úfind_othersÚignore_option_errorsr!   ÚdistÚ	filenamesÚhandlerss          ú</usr/lib/python3/dist-packages/setuptools/config/setupcfg.pyÚread_configurationr2   8   s<   € õ$ -á‹>€DÙ,7�×&Ñ&Ô(¸R€IÜ�d˜H iÐ1EÓF€HÜ  Ó*Ð*ó    r.   r!   c                 ó>   — t        | |«       | j                  «        | S )z`Apply the configuration from a ``setup.cfg`` file into an existing
    distribution object.
    )r*   Ú_finalize_requires)r.   r%   s     r1   Úapply_configurationr6   R   s   € ô ˆ4�ÔØ×ÑÔØ€Kr3   Úother_filesr-   )ÚConfigHandler.c                 ó  — ddl m} t        j                  j	                  |«      }t        j                  j                  |«      st        d|› d�«      ‚t        j                  «       }t        j                  t        j                  j                  |«      «       g |¢|‘}	 |j                  | |¬«       t        | | j                  |¬«      }| j                  «        t        j                  |«       |S # t        j                  |«       w xY w)zHRead configuration from ``filepath`` and applies to the ``dist`` object.r   )Ú_DistributionzConfiguration file z does not exist.)r/   )r-   )r(   r:   ÚosÚpathÚabspathÚisfiler   ÚgetcwdÚchdirÚdirnameÚparse_config_filesÚparse_configurationÚcommand_optionsÚ_finalize_license_files)r.   r%   r7   r-   r:   Úcurrent_directoryr/   r0   s           r1   r*   r*   [   sÔ   € õ .ä�w‰w�‰˜xÓ(€Hä�7‰7�>‰>˜(Ô#ÜÐ-¨h¨ZÐ7GÐHÓIÐIäŸ	™	›ÐÜ‡H�HŒR�W‰W�_‰_˜XÓ&Ô'Ø(�+Ð(˜xÐ(€Ið$Ø×(Ñ(¨¸Ð(ÔCÜ&Ø�$×&Ñ&Ð=Qô
ˆð 	×$Ñ$Ô&ä
�‰Ð"Ô#à€Oøô 	�‰Ð"Õ#ús   Â!;C3 Ã3D
Ú
target_objÚkeyc                 ój   — d|› �}t        j                  t        | |«      }t        | ||«      } |«       S )z 
    Given a target object and option key, get that option from
    the target object, either through a get_{key} method or
    from an attribute directly.
    Úget_)Ú	functoolsr   Úgetattr)rG   rH   Úgetter_nameÚby_attributeÚgetters        r1   Ú_get_optionrP   y   s8   € ð ˜˜�,€KÜ×$Ñ$¤W¨j¸#Ó>€LÜ�Z ¨lÓ;€FÙ‹8€Or3   r0   c                 ó¤   — t        t        «      }| D ];  }|j                  D ]*  }t        |j                  |«      }|||j
                     |<   Œ, Œ= |S )z»Returns configuration data gathered by given handlers as a dict.

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

    :rtype: dict
    )r   ÚdictÚset_optionsrP   rG   Úsection_prefix)r0   Úconfig_dictÚhandlerÚoptionÚvalues        r1   r+   r+   …   se   € ô $¤DÓ)€Kàò @ˆØ×)Ñ)ò 	@ˆFÜ × 2Ñ 2°FÓ;ˆEØ:?ˆK˜×.Ñ.Ñ/°Ò7ñ	@ð@ð
 Ðr3   ÚdistributionrD   )ÚConfigMetadataHandlerÚConfigOptionsHandlerc           	      ó¶  — t        j                  | «      5 }t        | |||«      }|j                  «        | j                  s|j                  | _        t        | j                  |||| j                  | j                  «      }|j                  «        | j                  j                  |j                  |j                  «       ddd«       ||fS # 1 sw Y   fS xY w)aÒ  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
    N)
r   ÚEnsurePackagesDiscoveredr[   ÚparseÚpackage_dirrZ   ÚmetadataÚsrc_rootÚ_referenced_filesÚupdate)rY   rD   r-   Úensure_discoveredÚoptionsÚmetas         r1   rC   rC   —   sÓ   € ô$ 
×	(Ñ	(¨Ó	6ð 
Ð:KÜ&ØØØ Øó	
ˆð 	�‰ŒØ×'Ò'Ø'.×':Ñ':ˆLÔ$ä$Ø×!Ñ!ØØ ØØ×$Ñ$Ø×!Ñ!ó
ˆð 	�
‰
ŒØ×&Ñ&×-Ñ-Ø×%Ñ% t×'=Ñ'=ô	
÷+
ð2 �ˆ=Ð÷3
ð2 �ˆ=Ðús   –B*CÃCÚlabelÚ
orig_valueÚparsedc                 ól  ‡— d|v st        ‰«      dk7  ryt        «       j                  «       }	 t        ‰d   «      }|j                  |v rt
        j                  | ‰d   ¬«       yy# t        $ rD}t        ˆfd„|D «       «      r&t
        j                  | ‰d   ¬«      }t        |«      |‚Y d}~yd}~ww xY w)am  Because users sometimes misinterpret this configuration:

    [options.extras_require]
    foo = bar;python_version<"4"

    It looks like one requirement with an environment marker
    but because there is no newline, it's parsed as two requirements
    with a semicolon as separator.

    Therefore, if:
        * input string does not contain a newline AND
        * parsed result contains two requirements AND
        * parsing of the two parts from the result ("<first>;<second>")
        leads in a valid Requirement with a valid marker
    a UserWarning is shown to inform the user about the possible problem.
    ú
r   Nr   )ÚfieldÚreqc              3   óF   •K  — | ]  }‰d    j                  |«      –— Œ y­w)r   N)Ú
startswith)Ú.0Úmarkerri   s     €r1   ú	<genexpr>z8_warn_accidental_env_marker_misconfig.<locals>.<genexpr>à   s    øè ø€ ÒB°ˆv�a‰y×#Ñ# F×+ÑBùs   ƒ!)
ÚlenÚ
marker_envÚkeysr   ÚnameÚ_AmbiguousMarkerÚemitr   ÚanyÚmessage)rg   rh   ri   Úmarkersrm   ÚexÚmsgs     `    r1   Ú%_warn_accidental_env_marker_misconfigr~   Å   s°   ø€ ð" ˆzÑœS ›[¨AÒ-Øä‹l×ÑÓ!€Gð2Ü˜& ™)Ó$ˆØ�8‰8�wÑÜ×!Ñ!¨°6¸!±9Ð!Õ=ð øäò 2ÜÓB¸'ÔBÔBÜ"×*Ñ*°¸FÀ1¹IÐ*ÓFˆCÜ$ SÓ)¨rÐ1ô Cûð2ús   ®6A& Á&	B3Á/:B.Â.B3c                   ó*  — e Zd ZU dZeed<   	 i Zeeef   ed<   	 dede	de
j                  fd„Zede	fd„«       Zed	„ «       Zd
„ Zedd„«       Zed„ «       Zed„ «       Zed„ «       Zdefd„Zdefd„Zed„ «       Zed„ «       Zedd„«       Zd„ Zd„ Zd„ Zy)r8   z1Handles metadata supplied in configuration files.rT   ÚaliasesrG   re   rd   c                 ó˜   — || _         || _        t        | j                  |«      «      | _        g | _        || _        t        «       | _        y ©N)	r-   rG   rR   Ú_section_optionsÚsectionsrS   rd   Úsetrb   )ÚselfrG   re   r-   rd   s        r1   Ú__init__zConfigHandler.__init__õ   sI   € ð %9ˆÔ!Ø$ˆŒÜ˜T×2Ñ2°7Ó;Ó<ˆŒØ&(ˆÔØ!2ˆÔÜ+.«5ˆÔð	r3   c              #   óª   K  — |j                  «       D ]<  \  }}|j                  | j                  «      \  }}}|rŒ(|j                  d«      |f–— Œ> y ­w)Nú.)ÚitemsÚ	partitionrT   Úlstrip)Úclsre   Ú	full_namerX   ÚpreÚseprv   s          r1   rƒ   zConfigHandler._section_options  sV   è ø€ à '§¡£ò 	*ÑˆI�uØ&×0Ñ0°×1CÑ1CÓD‰NˆC��dÙØØ—+‘+˜cÓ" EÐ)Ó)ñ		*ùs   ‚AAc                 óF   — t        d| j                  j                  z  «      ‚)ú.Metadata item name to parser function mapping.z!%s must provide .parsers property)ÚNotImplementedErrorÚ	__class__Ú__name__)r†   s    r1   ÚparserszConfigHandler.parsers  s#   € ô "Ø/°$·.±.×2IÑ2IÑIó
ð 	
r3   c                 óÌ  — | j                   }| j                  j                  ||«      }	 t        ||«      }|ry 	  | j                  j                  |d„ «      |«      }t        j                  |j                  |«      }t        |d|z  |«      } ||«       | j                  j                  |«       y # t        $ r t        |«      ‚w xY w# t        f| j                  z  $ r Y y w xY w)Nc                 ó   — | S r‚   © )Úxs    r1   ú<lambda>z+ConfigHandler.__setitem__.<locals>.<lambda>%  s   € ¸Q€ r3   zset_%s)rG   r€   ÚgetrL   ÚAttributeErrorÚKeyErrorr–   Ú	Exceptionr-   rK   r   Ú__setattr__rS   Úappend)r†   Úoption_namerX   rG   Úcurrent_valueri   Úsimple_setterÚsetters           r1   Ú__setitem__zConfigHandler.__setitem__  sâ   € Ø—_‘_ˆ
ð —l‘l×&Ñ& {°KÓ@ˆð	(Ü# J°Ó<ˆMñ àð	Ø?�T—\‘\×%Ñ% k±;Ó?ÀÓFˆFô "×)Ñ)¨*×*@Ñ*@À+ÓNˆÜ˜ X°Ñ%;¸]ÓKˆÙˆvŒà×Ñ×Ñ Õ,øô! ò 	(Ü˜;Ó'Ð'ð	(ûô ˆ|˜d×7Ñ7Ñ7ò 	Ùð	ús   ªB1 º#C	 Â1CÃ	C#Ã"C#c                 óÚ   — t        |t        «      r|S d|v r|j                  «       }n|j                  |«      }|D �cg c]#  }|j	                  «       sŒ|j	                  «       ‘Œ% c}S c c}w )z×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
        rk   )Ú
isinstanceÚlistÚ
splitlinesÚsplitÚstrip)r�   rX   Ú	separatorÚchunks       r1   Ú_parse_listzConfigHandler._parse_list/  sX   € ô �eœTÔ"ØˆLà�5‰=Ø×$Ñ$Ó&‰Eà—K‘K 	Ó*ˆEà+0ÖB %°E·K±KµM�—‘•ÒBÐBùÒBs   ½A(ÁA(c                 óÌ   — d}i }| j                  |«      D ]K  }|j                  |«      \  }}}||k7  rt        d|› �«      ‚|j                  «       ||j                  «       <   ŒM |S )zPRepresents value as a dict.

        :param value:
        :rtype: dict
        ú=z&Unable to parse option value to dict: )r¯   r‹   r   r¬   )r�   rX   r­   ÚresultÚlinerH   r�   Úvals           r1   Ú_parse_dictzConfigHandler._parse_dictC  sr   € ð ˆ	ØˆØ—O‘O EÓ*ò 	.ˆDØ ŸN™N¨9Ó5‰MˆC��cØ�iÒÜ!Ð$JÈ5È'Ð"RÓSÐSØ"%§)¡)£+ˆF�3—9‘9“;Òð		.ð ˆr3   c                 ó*   — |j                  «       }|dv S )zQRepresents value as boolean.

        :param value:
        :rtype: bool
        )Ú1ÚtrueÚyes)Úlower©r�   rX   s     r1   Ú_parse_boolzConfigHandler._parse_boolT  s   € ð —‘“ˆØÐ,Ð,Ð,r3   c                 ó   ‡— ˆfd„}|S )zßReturns a parser function to make sure field inputs
        are not files.

        Parses a value after getting the key so error messages are
        more informative.

        :param key:
        :rtype: callable
        c                 ób   •— d}| j                  |«      rt        dj                  ‰«      «      ‚| S )Núfile:zCOnly strings are accepted for the {0} field, files are not accepted)ro   Ú
ValueErrorÚformat)rX   Úexclude_directiverH   s     €r1   Úparserz3ConfigHandler._exclude_files_parser.<locals>.parserj  s:   ø€ Ø 'ÐØ×ÑÐ 1Ô2Ü ð-ß-3©V°C«[óð ð ˆLr3   r™   )r�   rH   rÃ   s    ` r1   Ú_exclude_files_parserz#ConfigHandler._exclude_files_parser^  s   ø€ ô	ð ˆr3   Úroot_dirc                 ó0  — d}t        |t        «      s|S |j                  |«      s|S |t        |«      d }|j	                  d«      D �cg c]  }|j                  «       ‘Œ }}| j                  j                  |«       t        j                  ||«      S c c}w )aO  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:
            file: README.rst, CHANGELOG.md, src/file.txt

        :param str value:
        :rtype: str
        r¿   Nú,)
r¨   r"   ro   rs   r«   r¬   rb   rc   r   Ú
read_files)r†   rX   rÅ   Úinclude_directiveÚspecr<   Ú	filepathss          r1   Ú_parse_filezConfigHandler._parse_fileu  s�   € ð $Ðä˜%¤Ô%ØˆLà×ÑÐ 1Ô2ØˆLà”SÐ*Ó+Ð-Ð.ˆØ.2¯j©j¸«oÖ> d�T—Z‘Z•\Ð>ˆ	Ð>Ø×Ñ×%Ñ% iÔ0Ü× Ñ  ¨HÓ5Ð5ùò ?s   Á	Bc                 óÈ   — d}|j                  |«      s|S |j                  |d«      }|j                  | j                  j                  «       t        j                  |||«      S )z·Represents value as a module attribute.

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

        :param str value:
        :rtype: str
        zattr:Ú )ro   Úreplacerc   rd   r_   r   Ú	read_attr)r†   rX   r_   rÅ   Úattr_directiveÚ	attr_descs         r1   Ú_parse_attrzConfigHandler._parse_attr�  s]   € ð !ˆØ×Ñ Ô/ØˆLà—M‘M .°"Ó5ˆ	ð 	×Ñ˜4×1Ñ1×=Ñ=Ô>Ü×Ñ 	¨;¸ÓAÐAr3   c                 ó   ‡— ˆfd„}|S )z¹Returns parser function to represents value as a list.

        Parses a value applying given methods one after another.

        :param parse_methods:
        :rtype: callable
        c                 ó*   •— | }‰D ]
  } ||«      }Œ |S r‚   r™   )rX   ri   ÚmethodÚparse_methodss      €r1   r^   z1ConfigHandler._get_parser_compound.<locals>.parse­  s'   ø€ ØˆFà'ò (�Ù ›‘ð(ð ˆMr3   r™   )r�   r×   r^   s    ` r1   Ú_get_parser_compoundz"ConfigHandler._get_parser_compound£  s   ø€ ô	ð ˆr3   c                 óX   — i }|j                  «       D ]  \  }\  }} |||«      ||<   Œ |S )a  Parses section options into a dictionary.

        Applies a given parser to each option in a section.

        :param dict section_options:
        :param callable values_parser: function with 2 args corresponding to key, value
        :rtype: dict
        )rŠ   )r�   Úsection_optionsÚvalues_parserrX   rH   Ú_r´   s          r1   Ú_parse_section_to_dict_with_keyz-ConfigHandler._parse_section_to_dict_with_key·  s>   € ð ˆØ,×2Ñ2Ó4ò 	1‰MˆC‘�!�SÙ& s¨CÓ0ˆE�#ŠJð	1àˆr3   Nc                 ó<   ‡— ‰rˆfd„nd„ }| j                  ||«      S )a   Parses section options into a dictionary.

        Optionally applies a given parser to each value.

        :param dict section_options:
        :param callable values_parser: function with 1 arg corresponding to option value
        :rtype: dict
        c                 ó   •—  ‰|«      S r‚   r™   )rÜ   ÚvrÛ   s     €r1   r›   z6ConfigHandler._parse_section_to_dict.<locals>.<lambda>Ð  s   ø€ ™}¨QÓ/€ r3   c                 ó   — |S r‚   r™   )rÜ   rà   s     r1   r›   z6ConfigHandler._parse_section_to_dict.<locals>.<lambda>Ð  s   € ÐUV€ r3   ©rÝ   )r�   rÚ   rÛ   rÃ   s     ` r1   Ú_parse_section_to_dictz$ConfigHandler._parse_section_to_dictÆ  s#   ø€ ñ 5BÔ/ÉˆØ×2Ñ2°?ÀFÓKÐKr3   c                 ó    — |j                  «       D ]/  \  }\  }}t        j                  t        «      5  || |<   ddd«       Œ1 y# 1 sw Y   Œ<xY w)zQParses configuration file section.

        :param dict section_options:
        N)rŠ   Ú
contextlibÚsuppressrž   )r†   rÚ   rv   rÜ   rX   s        r1   Úparse_sectionzConfigHandler.parse_sectionÓ  sV   € ð
 !0× 5Ñ 5Ó 7ò 	#ÑˆD‘*�1�eÜ×$Ñ$¤XÓ.ñ #à"��T‘
÷#ð #ñ	#÷#ð #ús   ³AÁA	c                 óæ   — | j                   j                  «       D ]T  \  }}d}|rd|z  }t        | d|z  j                  dd«      d«      }|€t	        d| j
                  › d|› d�«      ‚ ||«       ŒV y)	zTParses configuration file items from one
        or more related sections.

        rÎ   z_%szparse_section%sr‰   Ú__Nz*Unsupported distribution option section: [ú])r„   rŠ   rL   rÏ   r   rT   )r†   Úsection_namerÚ   Úmethod_postfixÚsection_parser_methods        r1   r^   zConfigHandler.parseÝ  sš   € ð
 .2¯]©]×-@Ñ-@Ó-Bò 	3Ñ)ˆL˜/ØˆNÙØ!&¨Ñ!5�ä8?Øà" ^Ñ3×<Ñ<¸SÀ$ÓGØó	9Ð!ð %Ð,Ü!ðØ×+Ñ+Ð,¨A¨l¨^¸1ð>óð ñ
 " /Õ2ñ%	3r3   c                 ó6   ‡‡‡— t        ‰«      ˆˆˆfd„«       }|S )z¢this function will wrap around parameters that are deprecated

        :param msg: deprecation message
        :param func: function to be wrapped around
        c                  óf   •— ‰j                  dd«       t        j                  d‰fi ‰¤Ž  ‰| i |¤ŽS )NÚ
stacklevelr   z Deprecated config in `setup.cfg`)Ú
setdefaultÚ_DeprecatedConfigrx   )ÚargsÚkwargsÚfuncÚkwr}   s     €€€r1   Úconfig_handlerz@ConfigHandler._deprecated_config_handler.<locals>.config_handlerý  s7   ø€ à�M‰M˜,¨Ô*Ü×"Ñ"Ð#EÀsÑQÈbÒQÙ˜Ð( Ñ(Ð(r3   r   )r†   rõ   r}   rö   r÷   s    ``` r1   Ú_deprecated_config_handlerz(ConfigHandler._deprecated_config_handlerö  s#   ú€ ô 
ˆt‹õ	)ó 
ð	)ð
 Ðr3   )rÇ   r‚   )r•   Ú
__module__Ú__qualname__Ú__doc__r"   Ú__annotations__r€   r
   r#   ÚAllCommandOptionsr   r]   r‡   Úclassmethodrƒ   Úpropertyr–   r¦   r¯   rµ   r¼   rÄ   Ú_PathrÌ   rÓ   rØ   rÝ   rã   rç   r^   rø   r™   r3   r1   r8   r8   å   s>  … Ù;àÓðð
 !€GˆT�#�s�(‰^Ó ððàðð #ðð
 "×:Ñ:óð" ð*Ð'8ò *ó ð*ð ñ
ó ð
ò-ð4 òCó ðCð& ñó ðð  ñ-ó ð-ð ñó ðð,6¨5ó 6ð4B¸ó Bð( ñó ðð& ñó ðð ò
Ló ð
Lò#ò3ó2r3   r8   c                   óš   ‡ — e Zd ZdZdddddœZdZ	 dej                  fd	d
dede	de
j                  dee   defˆ fd„Zed„ «       Zd„ Zˆ xZS )rZ   r`   ÚurlÚdescriptionÚclassifiersÚ	platforms)Ú	home_pageÚsummaryÚ
classifierÚplatformFNrG   r   re   r-   rd   r_   rÅ   c                 óF   •— t         ‰| �  ||||«       || _        || _        y r‚   )Úsuperr‡   r_   rÅ   )r†   rG   re   r-   rd   r_   rÅ   r”   s          €r1   r‡   zConfigMetadataHandler.__init__  s)   ø€ ô 	‰Ñ˜ WÐ.BÐDUÔVØ&ˆÔØ ˆ�r3   c                 ó@  — | j                   }t        | j                  | j                  ¬«      }| j                  }| j
                  }|||| j                  |dd¬«      || j                  ||«       |d«      | j                   |d«      dd¬«      |||| j                  |dœS )	r’   ©rÅ   z[The requires parameter is deprecated, please use install_requires for runtime dependencies.)iç  é
   é   )Údue_dateÚlicenseÚlicense_filezDThe license_file parameter is deprecated, use license_files instead.)r  ÚkeywordsÚprovidesÚrequiresÚ	obsoletesr  r  r  Úlicense_filesr  Úlong_descriptionÚversionÚproject_urls)	r¯   r   rÌ   rÅ   rµ   rÄ   rø   rØ   Ú_parse_version)r†   Ú
parse_listÚ
parse_fileÚ
parse_dictÚexclude_files_parsers        r1   r–   zConfigMetadataHandler.parsers#  sÆ   € ð ×%Ñ%ˆ
Ü˜T×-Ñ-¸¿¹ÔFˆ
Ø×%Ñ%ˆ
Ø#×9Ñ9Ðð $Ø"Ø"Ø×7Ñ7Øð=à'ð	 8ó ð $Ø×4Ñ4°ZÀÓLÙ+¨IÓ6Ø ×;Ñ;Ù$ ^Ó4ð-à'ð	 <ó ð (Ø%Ø *Ø×*Ñ*Ø&ñ3
ð 	
r3   c                 ó0  — | j                  || j                  «      }||k7  r|j                  «       }	 t        |«       |S t        j                  | j                  || j                  | j                  «      «      S # t        $ r t        d|› d|› �«      ‚w xY w)zSParses `version` option value.

        :param value:
        :rtype: str

        zVersion loaded from z does not comply with PEP 440: )
rÌ   rÅ   r¬   r   r   r   r   r  rÓ   r_   )r†   rX   r  s      r1   r  z$ConfigMetadataHandler._parse_versionG  s�   € ð ×"Ñ" 5¨$¯-©-Ó8ˆà�eÒØ—m‘m“oˆGðÜ˜Ô ð ˆNä�~‰~˜d×.Ñ.¨u°d×6FÑ6FÈÏÉÓVÓWÐWøô "ò Ü!Ø*¨5¨'ð 2,Ø,3¨9ð6óð ðús   ³A: Á:B)r•   rù   rú   rT   r€   Ústrict_moder;   Úcurdirrý   Úboolr   r]   r   rR   r   r‡   rÿ   r–   r  Ú__classcell__©r”   s   @r1   rZ   rZ     s™   ø„ Ø€Nð Ø Ø#Øñ	€Gð €Kðð '+ØŸ)™)ñ!à*ð!ð #ð!ð #ð	!ð
 "×:Ñ:ð!ð ˜d‘^ð!ð õ!ð ñ!
ó ð!
öFXr3   rZ   r   c                   ó´   ‡ — e Zd ZdZdddededej                  fˆ fd„Ze	d„ «       Z
d„ Zd	ed
efd„Zed„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )r[   re   rG   r!   r-   rd   c                 óZ   •— t         ‰| �  ||||«       |j                  | _        i | _        y r‚   )r  r‡   ra   rÅ   r_   )r†   rG   re   r-   rd   r”   s        €r1   r‡   zConfigOptionsHandler.__init__d  s/   ø€ ô 	‰Ñ˜ WÐ.BÐDUÔVØ"×+Ñ+ˆŒØ+-ˆÕr3   c                 ó(   — | j                  |d¬«      S )Nú;)r­   )r¯   r»   s     r1   Ú_parse_list_semicolonz*ConfigOptionsHandler._parse_list_semicolono  s   € à�‰˜u°ˆÓ4Ð4r3   c                 ó<   — | j                  || j                  ¬«      S )Nr  )rÌ   rÅ   )r†   rX   s     r1   Ú_parse_file_in_rootz(ConfigOptionsHandler._parse_file_in_roots  s   € Ø×Ñ °·±ÐÓ>Ð>r3   rg   rX   c                 óª   — | j                  | j                  |«      «      }t        |||«       |D �cg c]  }|j                  d«      rŒ|‘Œ c}S c c}w )Nú#)r*  r,  r~   ro   )r†   rg   rX   ri   r³   s        r1   Ú_parse_requirements_listz-ConfigOptionsHandler._parse_requirements_listv  sJ   € à×+Ñ+¨D×,DÑ,DÀUÓ,KÓLˆÜ-¨e°U¸FÔCð "(ÖD˜¨t¯©¸sÕ/C’ÒDÐDùÒDs   ²AÁ	Ac                 ó&  — | j                   }| j                  }| j                  }| j                  }||||||| j	                  |d«      t        | j                  d«      | j                  | j                  | j                  | j                  |t        |dœS )r’   zeThe namespace_packages parameter is deprecated, consider using implicit namespaces instead (PEP 420).Úinstall_requires)Úzip_safeÚinclude_package_datar_   ÚscriptsÚeager_resourcesÚdependency_linksÚnamespace_packagesr1  Úsetup_requiresÚtests_requireÚpackagesÚentry_pointsÚ
py_modulesÚpython_requiresÚcmdclass)r¯   r¼   rµ   Ú_parse_cmdclassrø   r   r/  r*  Ú_parse_packagesr,  r   )r†   r  Ú
parse_boolr  Úparse_cmdclasss        r1   r–   zConfigOptionsHandler.parsers~  sª   € ð ×%Ñ%ˆ
Ø×%Ñ%ˆ
Ø×%Ñ%ˆ
Ø×-Ñ-ˆð #Ø$.Ø%Ø!Ø)Ø *Ø"&×"AÑ"AØðHó#ô !(Ø×-Ñ-Ð/Aó!ð #×8Ñ8Ø!×7Ñ7Ø×,Ñ,Ø ×4Ñ4Ø$Ü+Ø&ñ-
ð 	
r3   c                 óŽ   — | j                   j                  }t        j                  | j	                  |«      || j
                  «      S r‚   )rd   r_   r   r>  rµ   rÅ   )r†   rX   r_   s      r1   r?  z$ConfigOptionsHandler._parse_cmdclassŸ  s5   € Ø×,Ñ,×8Ñ8ˆÜ�‰˜t×/Ñ/°Ó6¸ÀTÇ]Á]ÓSÐSr3   c                 ó0  — ddg}|j                  «       }||vr| j                  |«      S | j                  | j                  j	                  di «      «      }|j                  ||d   k(  | j                  | j                  ¬«       t        j                  di |¤ŽS )zTParses `packages` option value.

        :param value:
        :rtype: list
        zfind:zfind_namespace:zpackages.findr   )Ú
namespacesrÅ   Úfill_package_dirr™   )
r¬   r¯   Úparse_section_packages__findr„   rœ   rc   rÅ   r_   r   Úfind_packages)r†   rX   Úfind_directivesÚtrimmed_valueÚfind_kwargss        r1   r@  z$ConfigOptionsHandler._parse_packages£  s¡   € ð #Ð$5Ð6ˆØŸ™›ˆà Ñ/Ø×#Ñ# EÓ*Ð*ð ×7Ñ7Ø�M‰M×Ñ˜o¨rÓ2ó
ˆð 	×ÑØ%¨¸Ñ);Ñ;Ø—]‘]Ø!×-Ñ-ð 	ô 	
ô ×#Ñ#Ñ2 kÑ2Ð2r3   c                 óô   — | j                  || j                  «      }g d¢}t        |j                  «       D ��cg c]  \  }}||v sŒ|sŒ||f‘Œ c}}«      }|j	                  d«      }|�|d   |d<   |S c c}}w )zœParses `packages.find` configuration file section.

        To be used in conjunction with _parse_packages().

        :param dict section_options:
        )ÚwhereÚincludeÚexcluderM  r   )rã   r¯   rR   rŠ   rœ   )r†   rÚ   Úsection_dataÚ
valid_keysÚkrà   rK  rM  s           r1   rG  z1ConfigOptionsHandler.parse_section_packages__find¼  s‚   € ð ×2Ñ2°?ÀD×DTÑDTÓUˆâ4ˆ
äØ ,× 2Ñ 2Ó 4×N™˜˜1¸¸ZºÊAˆa�ŠVÓNó
ˆð —‘ Ó(ˆØÐØ#(¨¡8ˆK˜Ñ àÐùó Os   ¹A4
ÁA4
Á	A4
c                 óF   — | j                  || j                  «      }|| d<   y)z`Parses `entry_points` configuration file section.

        :param dict section_options:
        r;  N)rã   r¯   ©r†   rÚ   ri   s      r1   Úparse_section_entry_pointsz/ConfigOptionsHandler.parse_section_entry_pointsÑ  s&   € ð
 ×,Ñ,¨_¸d×>NÑ>NÓOˆØ%ˆˆ^Òr3   c                 ód   — | j                  || j                  «      }t        j                  |«      S r‚   )rã   r¯   r   Úcanonic_package_data)r†   rÚ   Úpackage_datas      r1   Ú_parse_package_dataz(ConfigOptionsHandler._parse_package_dataÙ  s+   € Ø×2Ñ2°?ÀD×DTÑDTÓUˆÜ×*Ñ*¨<Ó8Ð8r3   c                 ó,   — | j                  |«      | d<   y)z`Parses `package_data` configuration file section.

        :param dict section_options:
        rX  N©rY  ©r†   rÚ   s     r1   Úparse_section_package_dataz/ConfigOptionsHandler.parse_section_package_dataÝ  s   € ð
  $×7Ñ7¸ÓHˆˆ^Òr3   c                 ó,   — | j                  |«      | d<   y)zhParses `exclude_package_data` configuration file section.

        :param dict section_options:
        Úexclude_package_dataNr[  r\  s     r1   Ú"parse_section_exclude_package_dataz7ConfigOptionsHandler.parse_section_exclude_package_dataä  s   € ð
 (,×'?Ñ'?ÀÓ'PˆÐ#Ò$r3   c                 ó:   ‡ — ‰ j                  |ˆ fd„«      }|‰ d<   y)zbParses `extras_require` configuration file section.

        :param dict section_options:
        c                 ó0   •— ‰j                  d| › d�|«      S )Nzextras_require[rê   )r/  )rR  rà   r†   s     €r1   r›   zCConfigOptionsHandler.parse_section_extras_require.<locals>.<lambda>ò  s   ø€ ˜×6Ñ6¸ÈÈÈ1Ð7MÈqÓQ€ r3   Úextras_requireNrâ   rT  s   `  r1   Úparse_section_extras_requirez1ConfigOptionsHandler.parse_section_extras_requireë  s(   ø€ ð
 ×5Ñ5ØÛQó
ˆð
 "(ˆÐÒr3   c                 ó‚   — | j                  || j                  «      }t        j                  || j                  «      | d<   y)z^Parses `data_files` configuration file section.

        :param dict section_options:
        Ú
data_filesN)rã   r¯   r   Úcanonic_data_filesrÅ   rT  s      r1   Úparse_section_data_filesz-ConfigOptionsHandler.parse_section_data_files÷  s7   € ð
 ×,Ñ,¨_¸d×>NÑ>NÓOˆÜ#×6Ñ6°v¸t¿}¹}ÓMˆˆ\Òr3   )r•   rù   rú   rT   rý   r#  r   r]   r‡   rþ   r*  r,  r"   r/  rÿ   r–   r?  r@  rG  rU  rY  r]  r`  rd  rh  r$  r%  s   @r1   r[   r[   a  s®   ø„ Ø€Nð	.à"ð	.ð #ð	.ð #ð		.ð
 "×:Ñ:õ	.ð ñ5ó ð5ò?ðE¨cð E¸#ó Eð ñ
ó ð
ò@Tò3ò2ò*&ò9òIòQò
(öNr3   r[   c                   ó(   — e Zd ZdZdZdZed„ «       Zy)rw   zAmbiguous requirement marker.zá
    One of the parsed requirements in `{field}` looks like a valid environment marker:

        {req!r}

    Please make sure that the configuration file is correct.
    You can use dangling lines to avoid this problem.
    z'userguide/declarative_config.html#opt-2c                 ór   — d| j                   › �}| j                  | j                  | j                  ||¬«      S )Nz%https://setuptools.pypa.io/en/latest/)Úsee_urlÚformat_args)Ú	_SEE_DOCSÚ_formatÚ_SUMMARYÚ_DETAILS)r�   rö   Údocss      r1   rz   z_AmbiguousMarker.message  s2   € à6°s·}±}°oÐFˆØ�{‰{˜3Ÿ<™<¨¯©¸tÐQSˆ{ÓTÐTr3   N)r•   rù   rú   ro  rp  rm  rþ   rz   r™   r3   r1   rw   rw      s+   „ Ø.€Hð€Hð :€Ið ñUó ñUr3   rw   c                   ó   — e Zd ZdZy)rò   z!userguide/declarative_config.htmlN)r•   rù   rú   rm  r™   r3   r1   rò   rò     s   „ Ø3�Ir3   rò   )FF)r™   F)F)@rû   rå   rK   r;   Úcollectionsr   r   r   Útypingr   r   r	   r
   r   r   r   r   r   r   r   r   Úerrorsr   r   Úextern.packaging.markersr   rt   Úextern.packaging.requirementsr   r   Úextern.packaging.specifiersr   Úextern.packaging.versionr   r   Úwarningsr   rÎ   r   Údistutils.distr   r(   r!   r"   ÚPathLiker   ÚSingleCommandOptionsrý   r#   rR   r2   r6   r#  r*   rP   r+   rC   r©   r~   r8   rZ   r[   rw   rò   r™   r3   r1   ú<module>r~     sð  ðñ	ó Û Û 	Ý #Ý Ý ÷÷ ÷ ó ÷ ,Ý Hß KÝ 6ß >Ý 3Ý áÝ3å,àˆc�2—;‘;ÐÑ€Ø˜E 5¨°¨Ñ#4Ð4Ñ5Ð ðð
 ˜Ð 4Ð4Ñ5Ð Ù	� Ð'MÑ!NÔ	O€ð >Cñ+Øð+à	ó+ð4˜nð ¸ð À.ó ð $&Ø!&ñ	Ø
ðàðð ˜%‘ðð ð	ð
 ÐÑ óð<	˜Fð 	¨ó 	ð EÐ*>Ñ$?ð ÀDó ð* ñ+Ø ð+à&ð+ð Ð:Ñ;ó	+ð\2°ð 2À#ð 2Ètó 2ô@^�G˜F‘Oô ^ôB	XX˜MÐ*@ÑAô XXôv\N˜=¨Ñ8ô \Nô~UÐ3ô Uô(4Ð4õ 4r3   