
      eRD                        d 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	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 d	dlmZmZ d	dlmZ erddlmZ eeej        f         Z  ej!        e"          Z#de de$fdZ%de$de de&fdZ'	 d$ddde ddfdZ(	 	 	 d%de ded         fdZ)	 	 	 d&de$dee          de&ded         de$f
dZ* G d d          Z+d Z,ede&fd            Z- G d  d!ej.                  Z/ G d" d#e          Z0dS )'ac  
Load setuptools configuration from ``pyproject.toml`` files.

**PRIVATE MODULE**: API reserved for setuptools internal usage only.

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 ``tomllib`` or ``tomli``.
    N)contextmanager)partial)TYPE_CHECKINGCallableDictMappingOptionalSetUnion   )	FileErrorOptionError)SetuptoolsWarning   )expand)_PREVIOUSLY_DEFINED_WouldIgnoreField)applyDistributionfilepathreturnc                     ddl m} t          | d          5 }|                    |          cd d d            S # 1 swxY w Y   d S )Nr   )tomlirb)setuptools.externr   openload)r   r   files      ?lib/python3.11/site-packages/setuptools/config/pyprojecttoml.py	load_filer!      s    ''''''	h		  zz$                                   s   9= =configc                    ddl m} |j                            d          }t	          |d          r|                                 	 |                    |           S # |j        $ r}d|j         }|j	        
                    d          dk    r9t                              |           t                              |j                   d|j	         d	}t          | d
|           d d }~ww xY w)Nr   )_validate_pyprojectztrove-classifier_disable_downloadzconfiguration error: `projectzinvalid pyproject.toml config: .
) r$   FORMAT_FUNCTIONSgethasattrr%   validateValidationErrorsummarynamestrip_loggerdebugdetails
ValueError)r"   r   	validatortrove_classifierexr0   errors          r    r.   r.   %   s   222222 1556HII!455 -**,,,
:!!&)))$ : : :6"*667==**MM'"""MM"*%%%<"'<<<E..W..//T9:s   A 
C+%BC&&C+Fdistr   c                 H    t          |d||           }t          | ||          S )zeApply the configuration from a ``pyproject.toml`` file into an existing
    distribution object.
    T)read_configuration_apply)r;   r   ignore_option_errorsr"   s       r    apply_configurationr@   :   s*      $0DdKKF$)))    Tc                    t           j                            |           } t           j                            |           st	          d| d          t          |           pi }|                    di           }|                    di           }|                    di           }|r|s|si S d|v rt                              d           |r-t          |d	d
          |
                    d|j                   n|
                    dd           ||d<   ||d<   t          |          5  |d|id}t          ||            d
d
d
           n# 1 swxY w Y   |r1t           j                            |           }	t          ||	||          S |S )a  Read given configuration file and returns options from it as a dict.

    :param str|unicode filepath: Path to configuration file in the ``pyproject.toml``
        format.

    :param bool expand: Whether to expand directives and other computed values
        (i.e. post-process the given configuration)

    :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.

    :param Distribution|None: Distribution object to which the configuration refers.
        If not given a dummy object will be created and discarded after the
        configuration is read. This is used for auto-discovery of packages and in the
        case a dynamic configuration (e.g. ``attr`` or ``cmdclass``) is expanded.
        When ``expand=False`` this object is simply ignored.

    :rtype: dict
    zConfiguration file z does not exist.r'   tool
setuptools	distutilsz[tool.distutils])subjectinclude_package_dataNzinclude-package-dataT)r'   rC   )ospathabspathisfiler   r!   r,   _ExperimentalConfigurationemitgetattr
setdefaultrG   _ignore_errorsr.   dirnameexpand_configuration)
r   r   r?   r;   asdictproject_table
tool_tablesetuptools_tablesubsetroot_dirs
             r    r=   r=   F   s   6 wx((H7>>(## LJhJJJKKKx  &BFJJy"--MFB''J!~~lB77 - +; 	j  "''0B'CCC  B4d;;G##$:D<UVVVV##$:DAAAF6N/J|	,	-	- # #*\CS4TUU"""# # # # # # # # # # # # # # #
  R7??8,,#FH6JDQQQMs   *EEErX   r?   c                 J    t          | |||                                          S )a  Given a configuration with unresolved fields (e.g. dynamic, cmdclass, ...)
    find their final values.

    :param dict config: Dict containing the configuration for the distribution
    :param str root_dir: Top-level directory for the distribution/project
        (the same directory where ``pyproject.toml`` is place)
    :param bool ignore_option_errors: see :func:`read_configuration`
    :param Distribution|None: Distribution object to which the configuration refers.
        If not given a dummy object will be created and discarded after the
        configuration is read. Used in the case a dynamic configuration
        (e.g. ``attr`` or ``cmdclass``).

    :rtype: dict
    )_ConfigExpanderr   )r"   rX   r?   r;   s       r    rR   rR      s%    ( 68-A4HHOOQQQrA   c            
          e Zd Z	 	 	 d!dedee         deded         fdZd"d
Zdede	de
fdZd#dZd Zd Zd Zdee	e	f         fdZdddee	e	f         fdZddde	fdZde	dee	e	f         fdZddde	dee	e	f         fdZdddee	e	f         fdZddd	eee	e	f                  fdZdddee	e	f         d	eee	ef                  fdZd$dZd$dZd$d ZdS )%rZ   NFr"   rX   r?   r;   r   c                    || _         |pt          j                    | _        |                    di           | _        | j                            dg           | _        |                    di                               di           | _        | j                            di           | _        || _	        || _
        t                      | _        d S )Nr'   dynamicrC   rD   )r"   rH   getcwdrX   r,   project_cfgr]   setuptools_cfgdynamic_cfgr?   _distset_referenced_files)selfr"   rX   r?   r;   s        r    __init__z_ConfigExpander.__init__   s      /BIKK!::i44'++Ir::$jj4488rJJ.229bAA$8!
+.55rA   r   c                 x    ddl m} | j        | j                            dd           d}| j        p
 ||          S )Nr   r   r1   )src_rootr1   )setuptools.distr   rX   r_   r,   rb   )re   r   attrss      r    _ensure_distz_ConfigExpander._ensure_dist   sN    000000!]D4D4H4HQU4V4VWWz0\\%000rA   	containerfieldfnc                     ||v rCt          | j                  5   |||                   ||<   d d d            d S # 1 swxY w Y   d S d S N)rP   r?   )re   rl   rm   rn   s       r    _process_fieldz_ConfigExpander._process_field   s    I 9:: 8 8#%2i&6#7#7	% 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 s   ;??package-datac                 `    | j                             |i           }t          j        |          S rp   )r`   r,   _expandcanonic_package_data)re   rm   package_datas      r    _canonic_package_dataz%_ConfigExpander._canonic_package_data   s+    *..ub99+L999rA   c                    |                                   |                                  |                     d           |                                 }t          || j        | j                  }|5 }|j        }|                                  |                     |           | 	                    ||           d d d            n# 1 swxY w Y   |j
                            | j
                   | j        S )Nzexclude-package-data)_expand_packagesrw   rk   _EnsurePackagesDiscoveredr_   r`   package_dir_expand_data_files_expand_cmdclass_expand_all_dynamicrd   updater"   )re   r;   ctxensure_discoveredr{   s        r    r   z_ConfigExpander.expand   s&   ""$$$""#9:::   ""'d.>@STT 	8%+7K##%%%!!+...$$T;777		8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	%%d&<==={s   /ACC	Cc                    | j                             d          }|t          |t          t          f          rd S |                    d          }t          |t
                    rp| j        |d<   | j                             di           |d<   t          | j	                  5  t          j        di || j         d<   d d d            d S # 1 swxY w Y   d S d S )NpackagesfindrX   package-dirfill_package_dir )r`   r,   
isinstancelisttupledictrX   rO   rP   r?   rt   find_packages)re   r   r   s      r    ry   z _ConfigExpander._expand_packages   s8   &**:66z(T5MBBF||F##dD!! 	P#}D'+':'E'EmUW'X'XD#$ 9:: P P292G2O2O$2O2O#J/P P P P P P P P P P P P P P P P P P	P 	Ps   !CCCc                 ~    t          t          j        | j                  }|                     | j        d|           d S )N)rX   z
data-files)r   rt   canonic_data_filesrX   rq   r`   )re   
data_filess     r    r|   z"_ConfigExpander._expand_data_files   s:    W7$-PPP
D/zJJJJJrA   r{   c                     | j         }t          t          j        ||          }|                     | j        d|           d S )N)r{   rX   cmdclass)rX   r   rt   r   rq   r`   )re   r{   rX   r   s       r    r}   z _ConfigExpander._expand_cmdclass   sA    =7+xXXXD/XFFFFFrA   c           
          d fd j         D             }|                                                   pi                                                                                                                                                                       d |                                D             } j	                            |           d S )N)versionreadmeentry-pointsscriptsgui-scriptsclassifiersdependenciesoptional-dependenciesc                 H    i | ]}|v|                     |          S r   )_obtain).0rm   r;   r{   re   specials     r    
<dictcomp>z7_ConfigExpander._expand_all_dynamic.<locals>.<dictcomp>   s@     
 
 
G## 4<<e[99###rA   )r   r   r   r   optional_dependenciesc                     i | ]
\  }}|||S rp   r   )r   kvs      r    r   z7_ConfigExpander._expand_all_dynamic.<locals>.<dictcomp>  s    NNNDAq1arA   )
r]   r   _obtain_entry_points_obtain_version_obtain_readme_obtain_classifiers_obtain_dependencies_obtain_optional_dependenciesitemsr_   )re   r;   r{   obtained_dynamicupdatesr   s   ```  @r    r~   z#_ConfigExpander._expand_all_dynamic   s   	

 
 
 
 
 
 

 
 

 	%%dK88>B(({;;&&t,,006622488"&"D"DT"J"J 	  	
 	
 	
 ON$4$:$:$<$<NNN(((((rA   c                 p    t          |         |          }|| j        sd|d}t          |          d S d S )Nz#No configuration found for dynamic z.
Some dynamic fields need to be specified via `tool.setuptools.dynamic`
others must be specified via the equivalent attribute in `setup.py`.)r   r?   r   )re   r;   rm   previousmsgs        r    _ensure_previously_setz&_ConfigExpander._ensure_previously_set  s_    &u-d33D$=Ye Y Y Y 
 c""" rA   	specifierc                    ddl m} t          | j                  5  | j        }d|v rP| j                             ||d                              t          j        |d         |          cd d d            S d|v r(t          j	        |d         ||          cd d d            S t          d| d|          # 1 swxY w Y   d S )Nr   )always_iterabler   attrz	invalid `z`: ) setuptools.extern.more_itertoolsr   rP   r?   rX   rd   r   rt   
read_files	read_attrr6   )re   r   	directiver{   r   rX   s         r    _expand_directivez!_ConfigExpander._expand_directive  s]    	EDDDDDD566 	F 	F}H""&--ooi>O.P.PQQQ))F*;XFF		F 	F 	F 	F 	F 	F 	F 	F
 ""(6):KRR	F 	F 	F 	F 	F 	F 	F 	F DDDyDDEEE	F 	F 	F 	F 	F 	F 	F 	F ts   AB87B8#B88B<?B<c                     || j         v r%|                     d| | j         |         |          S |                     ||           d S )Nztool.setuptools.dynamic.)ra   r   r   )re   r;   rm   r{   s       r    r   z_ConfigExpander._obtain  s^    D$$$))2522 '  
 	##D%000trA   c                 |    d| j         v r2d| j        v r)t          j        |                     |d|                    S d S )Nr   )r]   ra   rt   r   r   )re   r;   r{   s      r    r   z_ConfigExpander._obtain_version'  sA    $$d6F)F)F?4<<i#M#MNNNtrA   c                     d| j         vrd S | j        }d|v r4|                     |di           |d                             dd          dS |                     |d           d S )Nr   content-typez
text/x-rst)textr   )r]   ra   r   r,   r   )re   r;   ra   s      r    r   z_ConfigExpander._obtain_readme-  s~    4<''4&{""T8R88 +H 5 9 9., W W  
 	##D(333trA   c                     d}t           fd|D                       sd S                      |d|          }|d S t          j        |          didt          dt          f fd} |dd            |d	d
           S )N)r   r   r   c              3   *   K   | ]}|j         v V  d S rp   )r]   )r   rm   re   s     r    	<genexpr>z7_ConfigExpander._obtain_entry_points.<locals>.<genexpr>?  s*      ==U5DL(======rA   r   rm   groupc                     |v r;                     |          }| j        vrt          j        | |           || <   d S d S )N)rm   value)popr]   r   rM   )rm   r   r   expandedgroupsre   s      r    _set_scriptsz:_ConfigExpander._obtain_entry_points.<locals>._set_scriptsI  sV    

5)),,%*eDDDD #( rA   r   console_scriptsr   gui_scripts)anyr   rt   entry_pointsstr)re   r;   r{   fieldsr   r   r   r   s   `     @@r    r   z$_ConfigExpander._obtain_entry_points;  s     <====f===== 	4||D.+>><4%d++"F+	( 	(C 	( 	( 	( 	( 	( 	( 	( 	( 	Y 1222]M222rA   c                 r    d| j         v r-|                     |di           }|r|                                S d S )Nr   )r]   r   
splitlinesre   r;   r   s      r    r   z#_ConfigExpander._obtain_classifiersW  sC    DL((LL}b99E *'')))trA   c                 h    d| j         v r(|                     |di           }|rt          |          S d S )Nr   )r]   r   _parse_requirements_listr   s      r    r   z$_ConfigExpander._obtain_dependencies^  s?    T\))LL~r::E 7/666trA   c                      d j         vrd S d j        v rD j        d         }t          |t                    sJ  fd|                                D             S                      |d           d S )Nr   c           
      f    i | ]-\  }}|t                              d | |i                     .S )z.tool.setuptools.dynamic.optional-dependencies.)r   r   )r   r   r   re   s      r    r   zA_ConfigExpander._obtain_optional_dependencies.<locals>.<dictcomp>k  s`     	 	 	 %E9 /**PPP!  	 	 	rA   )r]   ra   r   r   r   r   )re   r;   optional_dependencies_maps   `  r    r   z-_ConfigExpander._obtain_optional_dependenciese  s    "$,664"d&666(,(89P(Q%7>>>>>	 	 	 	 )B(G(G(I(I	 	 	 	 	##D*ABBBtrA   NFN)r   r   )rr   )r;   r   )__name__
__module____qualname__r   r	   _Pathboolrf   rk   r   r   rq   rw   r   ry   r|   r   r}   r~   r   r   r   r   r   r   r   r   r   r   r   rA   r    rZ   rZ      s        %)%*)-1 11 5/1 #	1
 ~&1 1 1 1"1 1 1 18 8S 8h 8 8 8 8
: : : :  "
P 
P 
PK K KGGCH,= G G G G
) )WSRUXEV ) ) ) )<#> ## # # # #6=c3h6G   N 3 WSRUXEV    N cAR    > htCH~6N    "18c1B	$sDy/	"   8           rA   rZ   c                 >    d |                                  D             S )Nc                     g | ]?}|                                 |                                                     d           =|@S )#)r2   
startswith)r   lines     r    
<listcomp>z,_parse_requirements_list.<locals>.<listcomp>z  sV       ::<< !%

 7 7 < <  rA   )r   )r   s    r    r   r   y  s/     $$&&   rA   c              #      K   | sd V  d S 	 d V  d S # t           $ r5}t                              d|j        j         d|            Y d }~d S d }~ww xY w)Nzignored error: z - )	Exceptionr3   r4   	__class__r   )r?   r9   s     r    rP   rP     s       H H H HF(=FF"FFGGGGGGGGGHs    
A*AAc                   @     e Zd Zdddedef fdZ fdZ fdZ xZS )rz   distributionr   r_   r`   c                 f    t                                          |           || _        || _        d S rp   )superrf   _project_cfg_setuptools_cfg)re   r   r_   r`   r   s       r    rf   z"_EnsurePackagesDiscovered.__init__  s3     	&&&'-rA   c                    | j         | j        }}|                    di           }|                    |j        pi            ||_        |j                                         |j        j        $| j	        
                    d          |j        _        |j        |
                    d          |_        |j        |
                    d          |_        t                                                      S )zWhen entering the context, the values of ``packages``, ``py_modules`` and
        ``package_dir`` that are missing in ``dist`` are copied from ``setuptools_cfg``.
        r   Nr1   
py-modulesr   )rb   r   rO   r   r{   set_defaults_ignore_ext_modulesmetadatar1   r   r,   
py_modulesr   r   	__enter__)re   r;   cfgr{   r   s       r    r   z#_EnsurePackagesDiscovered.__enter__  s     J 4c&)nn]B&G&G4+1r222&--/// =%!%!2!6!6v!>!>DM?"!ggl33DO= GGJ//DMww  """rA   c                     | j                             d| j        j                   | j                             d| j        j                   t                                          |||          S )zWhen exiting the context, if values of ``packages``, ``py_modules`` and
        ``package_dir`` are missing in ``setuptools_cfg``, copy from ``dist``.
        r   r   )r   rO   rb   r   r   r   __exit__)re   exc_type	exc_value	tracebackr   s       r    r   z"_EnsurePackagesDiscovered.__exit__  s]    
 	''
DJ4GHHH''dj6KLLLww)Y???rA   )r   r   r   r   rf   r   r   __classcell__)r   s   @r    rz   rz     s        .*.9=.OS. . . . . .# # # # #,@ @ @ @ @ @ @ @ @rA   rz   c                       e Zd ZdZdS )rL   z``{subject}` in `pyproject.toml` is still *experimental* and likely to change in future releases.N)r   r   r   _SUMMARYr   rA   r    rL   rL     s        	3 HHrA   rL   )F)TFNr   )1__doc__loggingrH   
contextlibr   	functoolsr   typingr   r   r   r   r	   r
   r   errorsr   r   warningsr   r*   r   rt   _apply_pyprojecttomlr   r   r   r>   ri   r   r   PathLiker   	getLoggerr   r3   r   r!   r   r.   r@   r=   rR   rZ   r   rP   EnsurePackagesDiscoveredrz   rL   r   rA   r    <module>r     s  	 	  				 % % % % % %       O O O O O O O O O O O O O O O O O O + + + + + + + + ( ( ( ( ( (       H H H H H H H H 1 1 1 1 1 1 -,,,,,,c2;
'
H
%
%   $        :T :U :t : : : :0 	* 	*
	*	* 		* 	* 	* 	* %)	? ?? >
"	? ? ? ?H !%!&%)	R RRuoR R >
"	R
 
R R R R.W W W W W W W Wt   H H H H H%@ %@ %@ %@ %@ @ %@ %@ %@P    !2     rA   