
    g\B                    d   U d Z ddlm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 dd	lmZ dd
lmZmZmZmZmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z! erddl"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z)  ei           Z*de+d<   ee,e-e,e,f         f         Z.de+d<   edeeedf         gdf         Z/de+d<    ed          Z0 ej1        e2          Z3dd"Z4dd$Z5dd%Z6dd'Z7dd*Z8dd.Z9d/d0d1d2Z:dd5Z;dd8Z<dd9Z=dd=Z>dd>Z?dd?Z@ddAZAddBZBddDZCddFZDddGZEddHZFddJZGe*fddMZHddQZIddSZJddWZKddYZLdd[ZMdd\ZNdd_ZOd` ZPda ZQe<e= e
e>dbc           e
e>ddc          e?eAeBe@deZRdfe+dg<   dhdiiZSdjdkiZT e
eOdl           e
eOdm           e
eOdn          doZUh dpZVdqeCiZWi dR ePdr          ds ePdt          du ePdv          dw ePdx          dy eQdzd{          d| ePd}          d~ eQdd          d eQdd          d ePd          d ePd          d ePd          deLdieMdeNd ePd          d ePd          ZXejY        ejZ        ejZ        ejZ        ejZ        ejY        ejY        ejY        ejY        ejZ        ejY        dZ[de+d<    G d de!          Z\dS )ak  Translation layer between pyproject config and setuptools distribution and
metadata objects.

The distribution and metadata objects are modeled after (an old version of)
core metadata, therefore configs in the format specified for ``pyproject.toml``
need to be processed before being applied.

**PRIVATE MODULE**: API reserved for setuptools internal usage only.
    )annotationsN)Mapping)Address)partialreduce)cleandoc)chain)MappingProxyType)TYPE_CHECKINGAnyCallableTypeVarUnion   )_static)StrPath)RemovedConfigError	Extension)SetuptoolsWarning)	TypeAliasmetadataDistribution)_OptionsListr   EMPTYr   _ProjectReadmeValuer   _Correspondence_Tdistconfigdictfilenamer   returnc                   |s| S t           j                            |          pd}t          | ||           t	          | ||           t          j                    }t          j        |           	 |                                  |                                  t          j        |           n# t          j        |           w xY w| S )z=Apply configuration dict read with :func:`read_configuration`.)	ospathdirname_apply_project_table_apply_tool_tablegetcwdchdir_finalize_requires_finalize_license_files)r!   r"   r$   root_dircurrent_directorys        f/home/jrussi/.local/pipx/shared/lib/python3.11/site-packages/setuptools/config/_apply_pyprojecttoml.pyapplyr4   .   s      wx((/CHvx000dFH---	HX$!!!$$&&&
"####"####Ks   0(B- -Cr1   c                   |                     di           }|sd S d |                                D             }t          | |           t          |           |                                D ]]\  }}t	          |          }t
                               ||          }t          |          r || ||           Lt          | ||           ^d S )Nprojectc                >    i | ]\  }}|t          j        |          S  )r   attempt_conversion.0kvs      r3   
<dictcomp>z(_apply_project_table.<locals>.<dictcomp>I   s)    VVV$!QQ2155VVV    )getitems_handle_missing_dynamic_unify_entry_pointsjson_compatible_keyPYPROJECT_CORRESPONDENCEcallable_set_config)	r!   r"   r1   orig_configproject_tablefieldvaluenorm_keycorresps	            r3   r+   r+   D   s    **Y++K VV+BSBSBUBUVVVMD-000&&&%++-- . .u&u--*..xBBG 	.GD%****gu----. .r?   c                P   |                     di                                di           }|sd S |                                D ]\  }}t          |          }|t          v rQt	          t          |                   }d| d}t          d                    t	          |          |g                    t                               ||          }t                               ||          }	t          |	          r |	| |           t          | |	|           t          || |           d S )Ntool
setuptoolsz,
            The parameter `tool.setuptools.zZ` was long deprecated
            and has been removed from `pyproject.toml`.
            
)r@   rA   rD   TOOL_TABLE_REMOVALSr   r   joinTOOL_TABLE_RENAMESTOOL_TABLE_CORRESPONDENCErF   rG   _copy_command_options)
r!   r"   r$   
tool_tablerJ   rK   rL   
suggestionmsgrM   s
             r3   r,   r,   V   s9   FB''++L"==J "((** . .u&u--***!"5h"?@@J,1  C %TYYz/J%K%KLLL%))(H==+//(CCG 	.GD%    gu----&$11111r?   rI   c                &   t          |                    dg                     }t                                          D ]S\  }}||v sJ||v sF ||           }|r9t                              ||           t                              |          ||<   TdS )zJBe temporarily forgiving with ``dynamic`` fields not listed in ``dynamic``dynamicrJ   rK   N)setr@   _PREVIOUSLY_DEFINEDrA   _MissingDynamicemit_RESET_PREVIOUSLY_DEFINED)r!   rI   r[   rJ   getterrK   s         r3   rB   rB   p   s    -##Ir2233G,2244 L Lv&&%7*:*:F4LLE L$$5$>>>'@'D'DU'K'Ke$L Lr?   keystrc                R    |                                                      dd          S )z1As defined in :pep:`566#json-compatible-metadata`-_)lowerreplace)rc   s    r3   rD   rD   {   s     99;;sC(((r?   rJ   rK   r   c                6   t                              |t                    | |          }t          | j        d| d           }|r ||           d S t          | j        |          s	|t          v rt          | j        ||           d S t          | ||           d S )Nset_)_PREPROCESSr@   _noopgetattrr   hasattrSETUPTOOLS_PATCHESsetattr)r!   rJ   rK   valsetters        r3   rG   rG      s    
//%
'
'e
4
4CT]N5NND99F "s		&	& "%3E*E*Euc*****eS!!!!!r?   ztext/markdownz
text/x-rstz
text/plain)z.mdz.rstz.txtfile
str | Nonec                d   t           j                            |                                           \  }}|sd S |t          v rt          j        t          |                   S d                    d t                                          D                       }d| d}t          d|  d|           )N, c              3  ,   K   | ]\  }}| d | dV  dS )z ()Nr8   r:   s      r3   	<genexpr>z&_guess_content_type.<locals>.<genexpr>   s2      FFtq!llalllFFFFFFr?   z3only the following file extensions are recognized: r'   zUndefined content type for )
r(   r)   splitextrh   _CONTENT_TYPESr   StrrS   rA   
ValueError)rt   rg   extvalidrY   s        r3   _guess_content_typer      s    Wdjjll++FAs t
n{>#.///IIFF~/C/C/E/EFFFFFE
H
H
H
HC
@4@@3@@
A
AAr?   rr   StrPath | Nonec                   ddl m} t          |t                    r(|}|                    ||          }t          |          }nJ|                    d          pd}|                    d          p|                    ||          }|d         }t          | dt          j	        |                     |r#t          | dt          j	        |                     |r| j
                            |           d S d S )	Nr   expandrt   r8   textzcontent-typelong_descriptionlong_description_content_type)setuptools.configr   
isinstancerd   
read_filesr   r@   rG   r   r}   _referenced_filesadd)r!   rr   r1   r   rt   r   ctypes          r3   _long_descriptionr      s	    )((((( #s $  x00#D))wwv$"wwvC&"3"3D("C"CN# ('+d*;*;<<< OD97;u;M;MNNN )""4((((() )r?   c                0   ddl m} d|v rb|                    |d         g|          }t          | dt	          j        |                     | j                            |d                    d S t          | dt	          j        |d                              d S )Nr   r   rt   licenser   )r   r   r   rG   r   r}   r   r   )r!   rr   r1   r   rK   s        r3   _licenser      s    ((((((}}!!3v;-::D)W[%7%7888""3v;/////D)W[V%=%=>>>>>r?   
list[dict]	_root_dirkindc           	         g }g }|D ]}d|vr|                     |d                    "d|vr|                     |d                    Bt          |d         |d                   }|                     t          |                     |r6t          | |t	          j        d                    |                               |r;t          | | dt	          j        d                    |                               d S d S )Nnameemail)display_name	addr_specrw   _email)appendr   rd   rG   r   r}   rS   )r!   rr   r   r   rJ   email_fieldpersonaddrs           r3   _peopler      s   EK * *vg////F""LL((((v&/RRRDs4yy)))) ?D$DIIe,<,< = =>>> PDT///7;tyy7M7M+N+NOOOOOP Pr?   c                (    t          | d|           d S )Nproject_urls)rG   r!   rr   r   s      r3   _project_urlsr      s    nc*****r?   c                L    t          | dt          j        |                     d S )Npython_requires)rG   r   SpecifierSetr   s      r3   _python_requiresr      s&    ')=c)B)BCCCCCr?   listc                b    t          | dg           rd}t          j        |           || _        d S )Ninstall_requireszA`install_requires` overwritten in `pyproject.toml` (dependencies))rn   r   r`   r   r!   rr   r   rY   s       r3   _dependenciesr      s;    t',, $Qs###Dr?   c                b    t          | dd           rd}t          j        |           || _        d S )Nextras_requirezH`extras_require` overwritten in `pyproject.toml` (optional-dependencies))rn   r   r`   r   r   s       r3   _optional_dependenciesr      s;    t%t,, $Xs###Dr?   list[Extension]c                P    | j         pg }d |D             }d |D             }g ||S )Nc              3  R   K   | ]"}d  |                                 D             V  #dS )c                B    i | ]\  }}|                     d d          |S )rf   rg   )ri   r:   s      r3   r>   z*_ext_modules.<locals>.<genexpr>.<dictcomp>   s,    :::1QYYsC  !:::r?   NrA   )r;   xs     r3   rz   z_ext_modules.<locals>.<genexpr>   s9      HHq::		:::HHHHHHr?   c                &    g | ]}t          d i |S )r8   r   )r;   kws     r3   
<listcomp>z _ext_modules.<locals>.<listcomp>   s"    
*
*
*r9??r??
*
*
*r?   )ext_modules)r!   rr   existingargsnews        r3   _ext_modulesr      sE    %2HHHCHHHD
*
*T
*
*
*CXr?   _distc                    |S Nr8   )r   rr   s     r3   rm   rm          Jr?   c                    | S r   r8   )rr   s    r3   	_identityr      r   r?   c                   | }|                     d|                     di                     }t          |          }ddd}t          |                                          D ]6\  }}t	          |          }||v r|                     |          |||         <   7|r#d |                                D             |d<   d S d S )Nentry-pointsentry_pointsconsole_scriptsgui_scripts)scriptsr   c                V    i | ]&\  }}||d  |                                 D             'S )c                "    g | ]\  }}| d | S )z = r8   r:   s      r3   r   z2_unify_entry_points.<locals>.<dictcomp>.<listcomp>  s&    :::DAqa<<A<<:::r?   r   )r;   r   groups      r3   r>   z'_unify_entry_points.<locals>.<dictcomp>  sK     #
 #
 #
e#
::EKKMM:::#
 #
 #
r?   )popr#   r   rA   rD   )rI   r6   givenr   renamingrc   rK   rL   s           r3   rC   rC      s    GKKNB(G(GHHE;;L,]KKH7==??++ @ @
U&s++x/6{{3/?/?L(+, 
#
 #
+1133#
 #
 #

 
r?   	pyprojectc           	        |                      di           }|                     di                                di           }t          |          }|j        }|                      di                                di                                           D ]\  }}t	          |          }|                     |t                                }	|                    |i            |                                D ]S\  }
}t	          |
          }
t          |          |f||         |
<   |
|	vr!t          	                    d| d|
 d           Td S )NrO   rP   cmdclass	distutilszCommand option r'   z is not defined)
r@   _valid_command_optionscommand_optionsrA   rD   r]   
setdefaultrd   _loggerwarning)r   r!   r$   rW   r   valid_optionscmd_optscmdr"   r   rc   rK   s               r3   rV   rV     sQ   vr**J~~lB//33JCCH*844M#H }}VR0044["EEKKMM 
N 
NV!#&&!!#suu--C$$$ ,,.. 	N 	NJC%c**C"%h--!7HSM#%  L# L L L L LMMM	N	
N 
Nr?   r   dict[str, set[str]]c           	     |   ddl m} ddlm} dt	          |j                  i} |j        d          }d |D             }d	 |D             }t          ||                                           D ]M\  }}|	                    |t                                }	|	t	          t          |d
g                     z  }	|	||<   N|S )Nr   r   r   r   globalzdistutils.commands)r   c              3  4   K   | ]}t          |          V  d S r   )_load_epr;   eps     r3   rz   z)_valid_command_options.<locals>.<genexpr>+  s(      HHB8B<<HHHHHHr?   c              3     K   | ]}||V  	d S r   r8   r   s     r3   rz   z)_valid_command_options.<locals>.<genexpr>,  s'      ;;2;B;;;;;;r?   user_options)setuptools.distr   
_importlibr   _normalise_cmd_optionsglobal_optionsr   r	   rA   r@   r]   rn   )
r   r   r   r   unloaded_entry_pointsloaded_entry_pointsr   r   	cmd_classoptss
             r3   r   r   #  s    ,,,,,,%%%%%%5l6QRRSM1H18LMMMHH2GHHH;;!4;;;Lhnn.>.>?? " "Y  cee,,,WYPR-S-STTT!cr?   r   metadata.EntryPointtuple[str, type] | Nonec                   | j                             d          rd S 	 | j        |                                 fS # t          $ r@}|j        j         d| j         }t                              | d|            Y d }~d S d }~ww xY w)Nzwheel.bdist_wheelz" while trying to load entry-point z: )	rK   
startswithr   load	Exception	__class____name__r   r   )r   exrY   s      r3   r   r   5  s    	x.//  t##   &SS"'SS3"'''ttttts   9 
B5A>>Br   c                F    t          |                               d          S )Nz_=)rD   strip)r   s    r3   _normalise_cmd_option_keyr   D  s    t$$**4000r?   descr   set[str]c                    d | D             S )Nc                8    h | ]}t          |d                    S )r   )r   )r;   fancy_options     r3   	<setcomp>z)_normalise_cmd_options.<locals>.<setcomp>I  s%    PPP<%l1o66PPPr?   r8   )r   s    r3   r   r   H  s    PP4PPPPr?   dict[str, list]c                n    dt          | dd           pi }fd|                                D             S )N)r   r   r   c                $    i | ]\  }}|v	||S r8   r8   )r;   r<   r=   ignores      r3   r>   z-_get_previous_entrypoints.<locals>.<dictcomp>O  s$    >>>TQavooAqooor?   )rn   rA   )r!   rK   r  s     @r3   _get_previous_entrypointsr  L  s@    /FD.$//52E>>>>U[[]]>>>>r?   list | Nonec                R    t          | dd           pi }|                    d          S )Nr   r   rn   r@   r!   rK   s     r3   _get_previous_scriptsr	  R  s+    D.$//52E99&'''r?   c                R    t          | dd           pi }|                    d          S )Nr   r   r  r  s     r3   _get_previous_gui_scriptsr  W  s*    D.$//52E99]###r?   attrNonec                    |j         }t          |d|            t          |d|            }} ||           t          || t          j         |                                 dS )zCApply distutils metadata validation but preserve "static" behaviourrk   get_N)r   rn   rq   r   List)r  r!   rr   metars   rb   s         r3   _set_static_list_metadatar  \  sg    =DT=$==11743O3OFF
F3KKKD$VVXX../////r?   c                V    t          t          d |                     d                    S )a8  
    Similar to ``operator.attrgetter`` but returns None if ``attr`` is not found
    >>> from types import SimpleNamespace
    >>> obj = SimpleNamespace(a=42, b=SimpleNamespace(c=13))
    >>> _attrgetter("a")(obj)
    42
    >>> _attrgetter("b.c")(obj)
    13
    >>> _attrgetter("d")(obj) is None
    True
    c                $    t          | |d           S r   )rn   )accr   s     r3   <lambda>z_attrgetter.<locals>.<lambda>p  s    '#q$*?*? r?   r'   )r   r   split)r  s    r3   _attrgetterr  d  s$     6??CQQQr?   c                       fd}|S )aL  
    Return the first "truth-y" attribute or None
    >>> from types import SimpleNamespace
    >>> obj = SimpleNamespace(a=42, b=SimpleNamespace(c=13))
    >>> _some_attrgetter("d", "a", "b.c")(obj)
    42
    >>> _some_attrgetter("d", "e", "b.c", "a")(obj)
    13
    >>> _some_attrgetter("d", "e", "f")(obj) is None
    True
    c                V      fdD             }t          d |D             d           S )Nc              3  H   K   | ]} t          |                    V  d S r   )r  )r;   iobjs     r3   rz   z5_some_attrgetter.<locals>._acessor.<locals>.<genexpr>  s3      55!.+a..%%555555r?   c              3     K   | ]}||V  	d S r   r8   )r;   r  s     r3   rz   z5_some_attrgetter.<locals>._acessor.<locals>.<genexpr>  s"      881!-Q----88r?   )next)r  valuesrA   s   ` r3   _acessorz"_some_attrgetter.<locals>._acessor  s<    5555u55588888$???r?   r8   )rA   r!  s   ` r3   _some_attrgetterr"  s  s(    @ @ @ @ @ Or?   author)r   
maintainer)readmer   authorsmaintainersurlsdependenciesoptional_dependenciesrequires_pythonzdict[str, _Correspondence]rE   script_filesr   namespace_packagesz
        Please migrate to implicit native namespaces instead.
        See https://packaging.python.org/en/latest/guides/packaging-namespace-packages/.
        	obsoletesprovides	platforms)r.  r/  r0  >   license_filer   license_filesprovides_extrasr   r   zmetadata.nameversionzmetadata.versiondescriptionzmetadata.descriptionr%  zmetadata.long_descriptionzrequires-pythonr   zmetadata.python_requiresr   zmetadata.licenser&  zmetadata.authorzmetadata.author_emailr'  zmetadata.maintainerzmetadata.maintainer_emailkeywordszmetadata.keywordsclassifierszmetadata.classifiersr(  zmetadata.project_urlsr   gui-scriptsr)  r   optional-dependenciesr   )r   r&  r'  r6  r7  r(  r   r   r8  r)  r9  ra   c                  .    e Zd ZdZdZed
d            Zd	S )r_   z9`{field}` defined outside of `pyproject.toml` is ignored.a%  
    The following seems to be defined outside of `pyproject.toml`:

    `{field} = {value!r}`

    According to the spec (see the link below), however, setuptools CANNOT
    consider this value unless `{field}` is listed as `dynamic`.

    https://packaging.python.org/en/latest/specifications/pyproject-toml/#declaring-project-metadata-the-project-table

    To prevent this problem, you can list `{field}` under `dynamic` or alternatively
    remove the `[project]` table from your file and rely entirely on other means of
    configuration.
    rJ   rd   rK   r   r%   c                :    | j                             ||          S )Nr\   )_DETAILSformat)clsrJ   rK   s      r3   detailsz_MissingDynamic.details  s    |""e"<<<r?   N)rJ   rd   rK   r   r%   rd   )r   
__module____qualname___SUMMARYr<  classmethodr?  r8   r?   r3   r_   r_     s@        JHH$ = = = [= = =r?   r_   )r!   r   r"   r#   r$   r   r%   r   )r!   r   r"   r#   r1   r   )r!   r   r"   r#   r$   r   )r!   r   rI   r#   )rc   rd   r%   rd   )r!   r   rJ   rd   rK   r   )rt   rd   r%   ru   )r!   r   rr   r   r1   r   )r!   r   rr   r#   r1   r   )r!   r   rr   r   r   r   r   rd   )r!   r   rr   r#   r   r   )r!   r   rr   rd   r   r   )r!   r   rr   r   r   r   )r!   r   rr   r   r%   r   )r   r   rr   r    r%   r    )rr   r    r%   r    )rI   r#   )r   r#   r!   r   r$   r   )r   r   r%   r   )r   r   r%   r   )r   rd   r%   rd   )r   r   r%   r   )r!   r   r%   r   )r!   r   r%   r  )r  rd   r!   r   rr   r   r%   r  )]__doc__
__future__r   loggingr(   collections.abcr   email.headerregistryr   	functoolsr   r   inspectr   	itertoolsr	   typesr
   typingr   r   r   r   r    r   _pathr   errorsr   	extensionr   warningsr   typing_extensionsr   setuptools._importlibr   r   r   distutils.distr   r   __annotations__rd   r#   r   r   r    	getLoggerr   r   r4   r+   r,   rB   rD   rG   r|   r   r   r   r   r   r   r   r   r   rm   r   rC   rV   r   r   r   r   r  r	  r  r  r  r"  rE   rT   rR   rU   rp   rl   r^   
EMPTY_DICT
EMPTY_LISTra   r_   r8   r?   r3   <module>rZ     sV     # " " " " "  				 # # # # # # ( ( ( ( ( ( % % % % % % % %             " " " " " " ? ? ? ? ? ? ? ? ? ? ? ? ? ?             ' ' ' ' ' ' ! ! ! ! ! ! ( ( ( ( ( ( ,++++++......,,,,,,++++++ "!"%% % % % %!&sDcN':!;  ; ; ; ;%~sE'4-<P&QSW&WX X X X XWT]]
'
H
%
%   ,. . . .$2 2 2 24L L L L) ) ) )
" " " "  
B 
B 
B 
B) ) ) )2	? 	? 	? 	?P P P P$+ + + +D D D D                   
 
 
 
*N N N N& 05     $   1 1 1 1Q Q Q Q? ? ? ?( ( ( (
$ $ $ $
0 0 0 0R R R  *  wwX...77666!3'	8 	8  	 	 	 	 %i0    2K@@1:>>2K@@	      <
KK(({{-.. ;;566 kk566	
 ''(9;UVV {{-..  13JKK ##$9;VWW /00 ;;566 KK/00 - $ , KK 233  [[)9::! . !!%"%&!%&$/# #     "= = = = =' = = = = =r?   