
    dfhK                        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	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 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e"de"ded   de$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jZ                        Z. G d! d"e/      Z0 G d# d$e/      Z1y)(z
Load setuptools configuration from ``pyproject.toml`` files.

**PRIVATE MODULE**: API reserved for setuptools internal usage only.
    N)contextmanager)partial)TYPE_CHECKINGCallableDictOptionalMappingUnion)	FileErrorOptionError   )expand)apply)_PREVIOUSLY_DEFINED_WouldIgnoreFieldDistributionfilepathreturnc                 t    ddl m} t        | d      5 }|j                  |      cd d d        S # 1 sw Y   y xY w)Nr   )tomlirb)setuptools.externr   openload)r   r   files      X/home/api-vastappli/venv/lib/python3.12/site-packages/setuptools/config/pyprojecttoml.py	load_filer      s2    '	h	  zz$     s   .7configc                    ddl m} |j                  j                  d      }t	        |d      r|j                          	 |j                  |       S # |j                  $ r}d|j                   }|j                  j                  d      dk7  r4t        j                  |       t        j                  |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exr-   errors          r   r+   r+   !   s    2 11556HI!45**,
:!!&))$$ :)"**677==*MM'"MM"**%1"''!<E7"WI./T9:s   A C&BC!!C&distr   c                 8    t        |d||       }t        | ||      S )zeApply the configuration from a ``pyproject.toml`` file into an existing
    distribution object.
    T)read_configuration_apply)r8   r   ignore_option_errorsr   s       r   apply_configurationr=   6   s$      $0DdKF$))    c                 d   t         j                  j                  |       } t         j                  j                  |       st	        d| d      t        |       xs i }|j                  di       }|j                  di       }|j                  di       }|r|s|si S |rd}t        j                  |t               |j                         }	|r)t        |d      |j                  d	|j                         n|j                  d	d
       ||d<   ||d<   	 |d|id}
t        |
|        |r-t         j                  j+                  |       }t-        ||||      S |S # t        $ rQ}t!        ||	|      ri cY d}~S |r0t"        j%                  d|j&                  j(                   d|        n Y d}~d}~ww xY w)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 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
setuptoolszDSupport for `[tool.setuptools]` in `pyproject.toml` is still *beta*.include_package_dataNzinclude-package-dataT)r$   r@   ignored error:  - )ospathabspathisfiler   r   r)   warningswarn_BetaConfigurationcopygetattr
setdefaultrB   r+   	Exception_skip_bad_configr0   r1   	__class____name__dirnameexpand_configuration)r   r   r<   r8   asdictproject_table
tool_tablesetuptools_tablemsgorig_setuptools_tablesubsetr6   root_dirs                r   r:   r:   B   s   6 wwx(H77>>(#-h\9IJKKx &BFJJy"-MFB'J!~~lB7-+;	Tc-. -11345A##$:D<U<UV##$:DAF6N/J|*\CS4TU" 77??8,#FH6JDQQM  	M+@$GI  MMOBLL,A,A+B#bTJK L	s$   E 	F/F*,F/23F**F/project_cfgsetuptools_cfgc                 "   |8|j                   j                  #|j                   j                  |j                  y|ryt	        | j                               }h d}||k  r/t        j                  t        j                         t        d       yy)z8Be temporarily forgiving with invalid ``pyproject.toml``F>   requires-pythonr.   versionpython_requires   )
stacklevelT)
metadatar.   ra   install_requiressetkeysrI   rJ   _InvalidFilemessage)r]   r^   r8   given_configpopular_subsets        r   rP   rP      s     |"MM!!)!!) {'')*LNN~% 	l**,lqIr>   r\   r<   c                 :    t        | |||      j                         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   r\   r<   r8   s       r   rT   rT      s    ( 68-A4HOOQQr>   c            
       f   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y)#rn   Nr   r\   r<   r8   r   c                 h   || _         |xs t        j                         | _        |j	                  di       | _        | j
                  j	                  dg       | _        |j	                  di       j	                  di       | _        | j                  j	                  di       | _        || _	        || _
        y )Nr$   dynamicr@   rA   )r   rE   getcwdr\   r)   r]   rq   r^   dynamic_cfgr<   _dist)selfr   r\   r<   r8   s        r   __init__z_ConfigExpander.__init__   s      /BIIK!::i4''++Ir:$jj488rJ..229bA$8!
r>   r   c                     ddl m} | j                  | j                  j	                  dd       d}| j
                  xs  ||      S )Nr   r   r.   )src_rootr.   )setuptools.distr   r\   r]   r)   rt   )ru   r   attrss      r   _ensure_distz_ConfigExpander._ensure_dist   s;    0!]]D4D4D4H4HQU4VWzz0\%00r>   	containerfieldfnc                 ~    ||v r-t        | j                        5   |||         ||<   d d d        y y # 1 sw Y   y xY wN)_ignore_errorsr<   )ru   r|   r}   r~   s       r   _process_fieldz_ConfigExpander._process_field   sK    I 9 9: 8#%i&6#7	% 8 8 8 8s   3<c                 d    | j                   j                  |i       }t        j                  |      S r   )r^   r)   _expandcanonic_package_data)ru   r}   package_datas      r   _canonic_package_dataz%_ConfigExpander._canonic_package_data   s+    **..ub9++L99r>   c                    | j                          | j                          | j                  d       | j                         }t        || j                  | j
                        }|5 }|j                  }| j                          | j                  |       | j                  ||       d d d        | j                  S # 1 sw Y   | j                  S xY w)Nzexclude-package-data)_expand_packagesr   r{   _EnsurePackagesDiscoveredr]   r^   package_dir_expand_data_files_expand_cmdclass_expand_all_dynamicr   )ru   r8   ctxensure_discoveredr   s        r   r   z_ConfigExpander.expand   s    ""$""#9:   "'d.>.>@S@ST 	8%+77K##%!!+.$$T;7		8 {{	8 {{s   %A B99Cc                    | j                   j                  d      }|t        |t        t        f      ry |j                  d      }t        |t
              ro| j                  |d<   | j                   j                  di       |d<   t        | j                        5  t        j                  di || j                   d<   d d d        y y # 1 sw Y   y xY w)Npackagesfindr\   package-dirfill_package_dir )r^   r)   
isinstancelisttupledictr\   rN   r   r<   r   find_packages)ru   r   r   s      r   r   z _ConfigExpander._expand_packages   s    &&**:6z(T5MB||F#dD!#}}D'+':':'E'EmUW'XD#$ 9 9: P292G2G2O$2O##J/P P "P Ps   #CCc                     t        t        j                  | j                        }| j	                  | j
                  d|       y )N)r\   z
data-files)r   r   canonic_data_filesr\   r   r^   )ru   
data_filess     r   r   z"_ConfigExpander._expand_data_files  s0    W77$--P
D//zJr>   r   c                     | j                   }t        t        j                  ||      }| j	                  | j
                  d|       y )N)r   r\   cmdclass)r\   r   r   r   r   r^   )ru   r   r\   r   s       r   r   z _ConfigExpander._expand_cmdclass  s7    ==7++xXD//XFr>   c           
         d}| j                   D ci c]  }||vr|| j                  |||       }}|j                  | j                  ||      xs i | j	                  ||      | j                  |      | j                  |      | j                  |      | j                  |             |j                         D ci c]  \  }}|	|| }}}| j                  j                  |       y c c}w c c}}w )N)ra   readmeentry-pointsscriptsgui-scriptsclassifiersdependenciesoptional-dependencies)ra   r   r   r   optional_dependencies)rq   _obtainupdate_obtain_entry_points_obtain_version_obtain_readme_obtain_classifiers_obtain_dependencies_obtain_optional_dependenciesitemsr]   )	ru   r8   r   specialr}   obtained_dynamickvupdatess	            r   r   z#_ConfigExpander._expand_all_dynamic  s   	
 
G# 4<<e[99
 

 	%%dK8>B(({;&&t,0062248"&"D"DT"J 	  	
 %5$:$:$<NDAq1a4NN(!
 Os   C+<
C0C0c                 `    t        |   |      }|| j                  sd|d}t        |      y y )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   )ru   r8   r}   previousrY   s        r   _ensure_previously_setz&_ConfigExpander._ensure_previously_set)  sL    &u-d3D$=$=5eY ?Y Y 
 c"" %>r>   	specifierc                    t        | j                        5  | j                  }d|v r"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 Y   y xY w)Nr   attrz	invalid `z`: )r   r<   r\   r   
read_files	read_attrr3   )ru   r   	directiver   r\   s        r   _expand_directivez!_ConfigExpander._expand_directive3  s     D556 	F}}H")))F*;XF	F 	F "((6):KR	F 	F y3ymDEE	F s   )B	B0BB
c                     || j                   v r#| j                  d| | j                   |   |      S | j                  ||       y )Nztool.setuptools.dynamic.)rs   r   r   )ru   r8   r}   r   s       r   r   z_ConfigExpander._obtain?  sS    D$$$))*5'2  ' 
 	##D%0r>   c                     d| j                   v r4d| j                  v r&t        j                  | j	                  |d|            S y )Nra   )rq   rs   r   ra   r   )ru   r8   r   s      r   r   z_ConfigExpander._obtain_versionI  s:    $d6F6F)F??4<<i#MNNr>   c                     d| j                   vry | j                  }d|v r)| j                  |di       |d   j                  dd      dS | j	                  |d       y )Nr   content-typez
text/x-rst)textr   )rq   rs   r   r)   r   )ru   r8   rs   s      r   r   z_ConfigExpander._obtain_readmeO  sh    4<<'&&{"T8R8 +H 5 9 9., W 
 	##D(3r>   c                      d}t         fd|D              sy  j                  |d|      }|y 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   y wr   )rq   ).0r}   ru   s     r   	<genexpr>z7_ConfigExpander._obtain_entry_points.<locals>.<genexpr>a  s     =U5DLL(=s   r   r}   groupc                     |v rUj                  |      }| j                  vr0t        j                  | |      }t	        j
                  |t               || <   y y r   )poprq   r   rj   rI   rJ   )r}   r   valuerY   expandedgroupsru   s       r   _set_scriptsz:_ConfigExpander._obtain_entry_points.<locals>._set_scriptsk  sU    

5),+33E5ACMM#'89 #( r>   r   console_scriptsr   gui_scripts)anyr   r   entry_pointsstr)ru   r8   r   fieldsr   r   r   r   s   `     @@r   r   z$_ConfigExpander._obtain_entry_points]  s~     <=f==||D.+><%%d+"F+	( 	(C 	( 	Y 12]M2r>   c                 j    d| j                   v r%| j                  |di       }|r|j                         S y )Nr   )rq   r   
splitlinesru   r8   r   s      r   r   z#_ConfigExpander._obtain_classifiersz  s5    DLL(LL}b9E''))r>   c                 `    d| j                   v r | j                  |di       }|rt        |      S y )Nr   )rq   r   _parse_requirements_listr   s      r   r   z$_ConfigExpander._obtain_dependencies  s1    T\\)LL~r:E/66r>   c                 2   d| j                   vry d| j                  v rb| j                  d   }t        |t              sJ |j	                         D ci c]%  \  }}|t        | j                  d| |i             ' c}}S | j                  |d       y c c}}w )Nr   z.tool.setuptools.dynamic.optional-dependencies.)rq   rs   r   r   r   r   r   r   )ru   r8   optional_dependencies_mapr   r   s        r   r   z-_ConfigExpander._obtain_optional_dependencies  s    "$,,6"d&6&66(,(8(89P(Q%7>> )B(G(G(I %E9 /0F0FDUGL1    	##D*ABs   *BNFN)r   r   )zpackage-data)r8   r   )rR   
__module____qualname__r   r   _Pathboolrv   r{   r   r   r   r   r   r   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r>   r   rn   rn      s}    %)%*)- 5/ #	
 ~& 18 8S 8h 8
: 
PKGGCH,= G
) )WSRUXEV )<#> ## #

6=c3h6G
N 3 WSRUXEV N cAR > htCH~6N "18c1B	$sDy/	":r>   rn   c                     | j                         D cg c]3  }|j                         r!|j                         j                  d      s|5 c}S c c}w )N#)r   r/   
startswith)r   lines     r   r   r     sI     $$&::<

 7 7 < 	  s   8Ac              #      K   | sd  y 	 d  y # t         $ r9}t        j                  d|j                  j                   d|        Y d }~y d }~ww xY ww)NrC   rD   )rO   r0   r1   rQ   rR   )r<   r6   s     r   r   r     sP     H H(=(='>c"FGGHs*   A A	A/A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 )r   distributionr   r]   r^   c                 @    t         |   |       || _        || _        y r   )superrv   _project_cfg_setuptools_cfg)ru   r   r]   r^   rQ   s       r   rv   z"_EnsurePackagesDiscovered.__init__  s"     	&'-r>   c                    | j                   | j                  }}|j                  di       }|j                  |j                  xs i        ||_        |j
                  j                          |j                  j                  *| j                  j                  d      |j                  _        |j                  |j                  d      |_        |j                  |j                  d      |_        t        | 9         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   r.   
py-modulesr   )rt   r   rN   r   r   set_defaults_ignore_ext_modulesre   r.   r   r)   
py_modulesr   r   	__enter__)ru   r8   cfgr   rQ   s       r   r   z#_EnsurePackagesDiscovered.__enter__  s     JJ 4 4c&)nn]B&G4++1r2&--/ ==%!%!2!2!6!6v!>DMM??"!ggl3DO== GGJ/DMw ""r>   c                     | j                   j                  d| j                  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   rN   rt   r   r   r   __exit__)ru   exc_type	exc_value	tracebackrQ   s       r   r   z"_EnsurePackagesDiscovered.__exit__  sY    
 	''
DJJ4G4GH''djj6K6KLw)Y??r>   )rR   r   r   r   rv   r   r   __classcell__)rQ   s   @r   r   r     s1    .*.9=.OS.#,@ @r>   r   c                       e Zd ZdZy)rK   zJExplicitly inform users that some `pyproject.toml` configuration is *beta*N)rR   r   r   __doc__r   r>   r   rK   rK     s    Tr>   rK   c                        e Zd ZdZed        Zy)ri   a  The given `pyproject.toml` file is invalid and would be ignored.
    !!


    ############################
    # Invalid `pyproject.toml` #
    ############################

    Any configurations in `pyproject.toml` will be ignored.
    Please note that future releases of setuptools will halt the build process
    if an invalid file is given.

    To prevent setuptools from considering `pyproject.toml` please
    DO NOT include the `[project]` or `[tool.setuptools]` tables in your file.
    

!!
    c                 2    ddl m}  || j                        S )Nr   )cleandoc)inspectr   r   )clsr   s     r   rj   z_InvalidFile.message  s    $$$r>   N)rR   r   r   r   classmethodrj   r   r>   r   ri   ri     s     % %r>   ri   )F)TFNr   )2r   loggingrE   rI   
contextlibr   	functoolsr   typingr   r   r   r   r	   r
   setuptools.errorsr   r   r'   r   r   _apply_pyprojecttomlr   r;   r   r   ry   r   r   PathLiker   	getLoggerrR   r0   r   r   r   r+   r=   r:   rP   rT   rn   r   r   EnsurePackagesDiscoveredr   UserWarningrK   ri   r   r>   r   <module>r     s  
  	  %  J J 4  1 H,c2;;
'

H
%   $  :T :U :t :0 	*
	*	* 		* %)	LL >
"	L^'+3;N3K	@ !%!&%)	RRuoR R >
"	R
 
R.Q Qh H H H%@ @ @ %@PU U%; %r>   