
    -Ph[f                       d Z ddlmZ ddlZddlZddlZddlZddlZddl	Z	ddl
Z	ddlZddlZddlZddlZddlmZ ddlmZmZmZ ddlmZmZmZ ej        r2ddlmZ dd	lmZ dd
lmZ ej        dk     rddl m!Z! nddlm!Z! ddl"m#Z#m$Z$ ddl%Z&ddl'Z&ddl(Z&ddl)Z&ej        dk     r$ddl*Z* e*j+        d          Z, e*j+        d          Z-dZ.g dZ/d3dZ0d4dZ1d5dZ2d5dZ3d5dZ4ej5         G d  d!                      Z6ej5         G d" d#                      Z7 G d$ d%ej8        j9                  Z: G d& d'ej;        j<                  Z=ej5         G d( d)                      Z>d6d-Z?d6d.Z@d7d2ZAdS )8a_  
This is pyproject_metadata, a library for working with PEP 621 metadata.

Example usage:

.. code-block:: python

   from pyproject_metadata import StandardMetadata

   metadata = StandardMetadata.from_pyproject(
       parsed_pyproject, allow_extra_keys=False, all_errors=True, metadata_version="2.3"
   )

   pkg_info = metadata.as_rfc822()
   with open("METADATA", "wb") as f:
       f.write(pkg_info.as_bytes())

   ep = self.metadata.entrypoints.copy()
   ep["console_scripts"] = self.metadata.scripts
   ep["gui_scripts"] = self.metadata.gui_scripts
   for group, entries in ep.items():
       if entries:
           with open("entry_points.txt", "w", encoding="utf-8") as f:
               print(f"[{group}]", file=f)
               for name, target in entries.items():
                   print(f"{name} = {target}", file=f)
               print(file=f)

    )annotationsN   )	constants)ConfigurationErrorConfigurationWarningErrorCollector)LicensePyProjectReaderReadme)Mapping)Any)Requirement)      )Self)DynamicPyProjectTabler         z[\r\n]+s   [\r\n]+z0.9.1)
r   r	   RFC822MessageRFC822Policyr   StandardMetadataextras_build_systemextras_projectextras_top_levelfield_to_metadatareturn	list[str]c                     t           S N)__all__     [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyproject_metadata/__init__.py__dir__r&   ]   s    Nr$   fieldstrfrozenset[str]c                @    t          t          j        |                    S )zH
    Return the METADATA fields that correspond to a project field.
    )	frozensetr   PROJECT_TO_METADATA)r'   s    r%   r   r   a   s     Y259:::r$   pyproject_tableMapping[str, Any]set[str]c                :    t          |           t          j        z
  S )zH
    Return any extra keys in the top-level of the pyproject table.
    )setr   KNOWN_TOPLEVEL_FIELDSr-   s    r%   r   r   h   s     )"AAAr$   c                b    t          |                     dg                     t          j        z
  S )z:
    Return any extra keys in the build-system table.
    zbuild-system)r1   getr   KNOWN_BUILD_SYSTEM_FIELDSr3   s    r%   r   r   o   s/    
 	O3344

-	.r$   c                b    t          |                     dg                     t          j        z
  S )z5
    Return any extra keys in the project table.
    project)r1   r5   r   KNOWN_PROJECT_FIELDSr3   s    r%   r   r   y   s*     ""9b1122Y5SSSr$   c                  .    e Zd ZU dZded<   dd
ZddZdS )_SmartMessageSetterz
    This provides a nice internal API for setting values in an Message to
    reduce boilerplate.

    If a value is None, do nothing.
    zemail.message.Messagemessagenamer(   value
str | Noner   Nonec                "    |sd S || j         |<   d S r!   )r<   )selfr=   r>   s      r%   __setitem__z_SmartMessageSetter.__setitem__   s!     	F"Tr$   payloadc                :    | j                             |           d S r!   )r<   set_payloadrB   rD   s     r%   rF   z_SmartMessageSetter.set_payload   s      )))))r$   Nr=   r(   r>   r?   r   r@   rD   r(   r   r@   __name__
__module____qualname____doc____annotations__rC   rF   r#   r$   r%   r;   r;      sV           #"""# # # #
* * * * * *r$   r;   c                  .    e Zd ZU dZded<   dd
ZddZdS )_JSonMessageSetterz
    This provides an API to build a JSON message output in the same way as the
    classic Message. Line breaks are preserved this way.
    dict[str, str | list[str]]datar=   r(   r>   r?   r   r@   c                   |                                 }|                    dd          }|d S |dk    r5d |                    d          D             }d |D             | j        |<   d S |t          j        v rI| j                            |g           }t          |t                    sJ |	                    |           d S || j        |<   d S )N-_keywordsc              3  >   K   | ]}|                                 V  d S r!   )strip.0xs     r%   	<genexpr>z1_JSonMessageSetter.__setitem__.<locals>.<genexpr>   s*      ::Aaggii::::::r$   ,c                    g | ]}||S r#   r#   rZ   s     r%   
<listcomp>z2_JSonMessageSetter.__setitem__.<locals>.<listcomp>   s    555A15a555r$   )
lowerreplacesplitrS   r   KNOWN_MULTIUSE
setdefault
isinstancelistappend)rB   r=   r>   keyvaluesentrys         r%   rC   z_JSonMessageSetter.__setitem__   s    zz||ll3$$=F:::S)9)9:::F55555DIcNNNY---I((b11EeT*****LL"DIcNNNr$   rD   c                    || d<   d S )Ndescriptionr#   rG   s     r%   rF   z_JSonMessageSetter.set_payload   s    %]r$   NrH   rI   rJ   r#   r$   r%   rQ   rQ      sV          
 %$$$# # # #"& & & & & &r$   rQ   c                  L    e Zd ZdZdZdZdZdd
Zej	        dk     r	 dddZ
dS dS )r   z
    This is :class:`email.policy.EmailPolicy`, but with a simple ``header_store_parse``
    implementation that handles multiline values, and some nice defaults.
    TFr   r=   r(   r>   r   tuple[str, str]c                    |                                 t          j        vrd|}t          ||          t	          |          dz   }|                    ddd|z  z             }||fS )NzUnknown field ri      
 )ra   r   KNOWN_METADATA_FIELDSr   lenrb   )rB   r=   r>   msgsizes        r%   header_store_parsezRFC822Policy.header_store_parse   sm    ::<<y>>>+4++C$Sd33334yy1}dD3:$566e}r$   r   r   refold_binaryboolc                   t          |d          r|                    |           S | j        r| j        nt          j        t          |t                    rt                              |          }nt                              |          }| j
        dk    p[| j
        dk    oP|r,t          |d                   t          |          z   dz   k    p"t          fd|dd          D                       }|s!|r\t          j                            |          r=|                     |d	                    |                                        |           S |d
z   | j                            |          z   | j        z   S )Nr=   policyalllongr   rr   c              3  >   K   | ]}t          |          k    V  d S r!   )rv   )r[   r\   maxlens     r%   r]   z%RFC822Policy._fold.<locals>.<genexpr>   s-      >>q3q66F?>>>>>>r$   r    z: )hasattrfoldmax_line_lengthsysmaxsizerf   bytesRE_EOL_BYTESrc   
RE_EOL_STRrefold_sourcerv   anyemailr~   _has_surrogatesheader_factoryjoinlinesep)rB   r=   r>   rz   linesrefoldr   s         @r%   _foldzRFC822Policy._fold   sy    uf%% /zzz...-1-ART))s{F %'' 0$**511"((//'50 "f, Es58}}s4yy81<vE ?>>>>E!""I>>>>>	   S- SEL,H,H,O,O S**4@@EETERRR$;!2!25!9!99DLHHr$   N)r=   r(   r>   r(   r   ro   )F)r=   r(   r>   r   rz   r{   r   r(   )rK   rL   rM   rN   utf8mangle_from_r   ry   r   version_infor   r#   r$   r%   r   r      s         
 DLO    *$$ @E	I 	I 	I 	I 	I 	I 	I %$r$   r   c                  0     e Zd ZdZd fdZ	 dddZ xZS )r   z
    This is :class:`email.message.EmailMessage` with two small changes: it defaults to
    our `RFC822Policy`, and it correctly writes unicode when being called
    with `bytes()`.
    r   r@   c                d    t                                          t                                 d S )Nr}   )super__init__r   )rB   	__class__s    r%   r   zRFC822Message.__init__   s(    /////r$   FNunixfromr{   r~   email.policy.Policy | Noner   c                V    |                      ||                              d          S )z0
        This handles unicode encoding.
        r}   zutf-8)	as_stringencode)rB   r   r~   s      r%   as_byteszRFC822Message.as_bytes   s(     ~~hv~66==gFFFr$   r   r@   )FN)r   r{   r~   r   r   r   )rK   rL   rM   rN   r   r   __classcell__)r   s   @r%   r   r      sp         0 0 0 0 0 0 LPG G G G G G G G Gr$   r   c                  @   e Zd ZU dZded<   dZded<   dZded<   dZd	ed
<   dZded<   dZ	ded<   dZ
ded<    ej        e          Zded<    ej        e          Zded<    ej        e          Zded<    ej        e          Zded<    ej        e          Zded<    ej        e          Zded<    ej        e          Zded<    ej        e          Zded<    ej        e          Zded <    ej        e          Zded!<    ej        e          Zd"ed#<   	  ej        e          Zded$<   	 dZded%<   	 d&Zd'ed(<   	 dCd+ZedDd,            ZedDd-            Z e!e"j#        j$        ddfdd&d.dEd7            Z%dFd9Z&dGd;Z'd<d=dHd?Z(dIdBZ)dS )Jr   z
    This class represents the standard metadata fields for a project. It can be
    used to read metadata from a pyproject.toml table, validate it, and write it
    to an RFC822 message or JSON.
    r(   r=   Nz packaging.version.Version | Noneversionr?   rm   zLicense | str | Nonelicensezlist[pathlib.Path] | Nonelicense_fileszReadme | Nonereadmez(packaging.specifiers.SpecifierSet | Nonerequires_python)default_factoryzlist[Requirement]dependencieszdict[str, list[Requirement]]optional_dependencieszdict[str, dict[str, str]]entrypointslist[tuple[str, str | None]]authorsmaintainerszdict[str, str]urlsr   classifiersrW   scriptsgui_scriptszlist[Dynamic]dynamicdynamic_metadatametadata_versionFr{   
all_errorsr   r@   c                .    |                                   d S r!   validaterB   s    r%   __post_init__zStandardMetadata.__post_init__$  s    r$   c                z    | j         | j         S t          | j        t                    s| j        dS | j        rdS dS )z
        This computes the metadata version based on the fields set in the object
        if ``metadata_version`` is None.
        Nz2.4z2.22.1)r   rf   r   r(   r   r   r   s    r%   auto_metadata_versionz&StandardMetadata.auto_metadata_version'  sL      ,((dlC(( 	D,>,J5  	5ur$   c                J    t           j                            | j                  S )z;
        Return the canonical name of the project.
        )	packagingutilscanonicalize_namer=   r   s    r%   canonical_namezStandardMetadata.canonical_name6  s    
 00;;;r$   )allow_extra_keysr   rS   r.   project_dirstr | os.PathLike[str]list[str] | Noner   bool | Noner   c               	   t          |          }|}d|vr?d}	|                    |	d           |                    d           d}	t          |	          |d         }
t	          j        |          }|sZt          |          }|rId                    t          d |D                                 }d	}	|                    |	d||d
u            |	                    |
          }|D ](}||d         v rd}	|                    |	d|            )|

                    d          }d}|d}	|                    |	d           n|                    |d          }||}t          j                            d          }|

                    d          }|r|                    |d          }|Y	 |rt          j                            |          nd
}nR# t          j        j        $ r d}	|                    |	d|           Y n"w xY wnd|vrd}	|                    |	d           |

                    d          }||                    |d          nd
}|

                    d          }d
}|m|                    |d          }|U	 t          j                            |          }n4# t          j        j        $ r d}	|                    |	d|           Y nw xY wd
}|                                5   | d7i d|d|d|d|                    |
|          d|                    |
|          d|                    |
|          d |d!|                    |
          d"|                    |
          d#|                    |
          d$|                    |

                    d$g           d%          d&|                    |

                    d&g           d'          d(|                    |

                    d(i           d)          pi d*|                    |

                    d*g           d+          pg d,|                    |

                    d,g           d-          pg d.|                    |

                    d.i           d/          pi d0|                    |

                    d1i           d2          pi d3|d4|pg d5|d6|}d
d
d
           n# 1 swxY w Y   |                    d           |J |S )8a  
        Read metadata from a pyproject.toml table. This is the main method for
        creating an instance of this class. It also supports two additional
        fields: ``allow_extra_keys`` to control what happens when extra keys are
        present in the pyproject table, and ``all_errors``, to  raise all errors
        in an ExceptionGroup instead of raising the first one.
        collect_errorsr8   z'Section {key} missing in pyproject.tomlrq   zFailed to parse pyproject.tomlzUnreachable code, c              3     K   | ]}|V  d S r!   r#   )r[   ks     r%   r]   z2StandardMetadata.from_pyproject.<locals>.<genexpr>_  s$      1O1OqQ(1O1O1O1O1O1Or$   z)Extra keys present in {key}: {extra_keys}N)ri   
extra_keyswarnzCField {key} declared as dynamic in "project.dynamic" but is definedzproject.r=   UNKNOWNField {key} missingproject.namez0.0.0r   project.versionz6Invalid {key} value, expecting a valid PEP 440 versionri   gotzDField {key} missing and 'version' not specified in "project.dynamic"rm   zproject.descriptionzrequires-pythonzproject.requires-pythonz4Invalid {key} value, expecting a valid specifier setr   r   r   r   r   r   r   r   zproject.authorsr   zproject.maintainersr   project.urlsr   zproject.classifiersrW   zproject.keywordsr   zproject.scriptsr   zgui-scriptszproject.gui-scriptsr   r   r   r   r#   )r
   config_errorfinalizeAssertionErrorpathlibPathr   r   sortedget_dynamicr5   
ensure_strr   r   VersionInvalidVersion
specifiersSpecifierSetInvalidSpecifiercollectget_licenseget_license_files
get_readmeget_dependenciesget_optional_dependenciesget_entrypointsensure_peopleensure_dictensure_list)clsrS   r   r   r   r   r   	pyprojectr-   rw   r8   r   extra_keys_strr   r'   raw_namer=   tmp_namer   raw_versionversion_stringproject_description_rawrm   requires_python_rawr   requires_python_stringrB   s                              r%   from_pyprojectzStandardMetadata.from_pyproject=  s   $ $:>>>	*.O++;C""3I"666?@@@$C %%%!),l;// 
	'--J !%61O1OJ1O1O1O+O+O!P!PA&&!-)T1	 '    ''00 	D 	DEY''[&&s0B50B0B&CCC;;v&&'C""3N";;;; ++HnEEH#4=4E4M4Mg4V4Vkk),,"&11+?PQQN)
 *"	)11.AAA! G
 !(7   RC**!2 +      * g%%X  ""3,=">>>
 #*++m"<"< '2   !8:OPPP 	 &kk*;<<*%.%9%9#%>& &" &1&/&:&G&G.' 'OO !+<   PC**!:@V +         (	 (	3 ' ' 'T'' (K' "--g{CCC	'
 (99';OOO' !++G[AAA' !0' '77@@@' '0&I&I'&R&R&R' &55g>>>' "//KK	2..0A  ' &33KKr224I  '" **7;;vr+B+BNSS %'& &11KKr224I   -'. #..KK
B//1C   5'6 "--KK	2..0A   ='> &11KKr224I   E'F  G'H "2!7RI'J "2!1K'L &:M'D(	 (	 (	 (	 (	 (	 (	 (	 (	 (	 (	 (	 (	 (	 (	T 	;<<<s7   *#G .G?>G?J! !.KK+GSSSr   c                j    t                      }t          |          }|                     |           |S )z=
        Return an RFC822 message with the metadata.
        )r   r;   _write_metadatarB   r<   smart_messages      r%   	as_rfc822zStandardMetadata.as_rfc822  s3      //+G44]+++r$   rR   c                R    i }t          |          }|                     |           |S )z:
        Return a JSON message with the metadata.
        )rQ   r   r   s      r%   as_jsonzStandardMetadata.as_json  s/     /1*733]+++r$   Tr   r   c               b   t          | j                  }| j        t          j        vr#d}|                    |t          j                   	 t          j                            | j	        d           n9# t          j        j
        $ r" d}|                    |d| j	                   Y nw xY w| j        3t          | j        t                    rd
}|                    |d           t          | j        t                    r7t!          d | j        D                       rd}|                    |d           |r| j        r%d| j        v rt'          j        dt*          d           | j        t          j        vrqt          | j        t                    rt'          j        dt*          d           n:t!          d | j        D                       rt'          j        dt*          d           t          | j        t                    r,| j        t          j        v rd}|                    |d           | j        ,| j        t          j        v rd}|                    |d           | j        D ]/}t1          |          dk    rd}|                    |d|           0|                    d           d	S )a  
        Validate metadata for consistency and correctness. Will also produce
        warnings if ``warn`` is given. Respects ``all_errors``. This is called
        when loading a pyproject.toml, and when making metadata. Checks:

        - ``metadata_version`` is a known version or None
        - ``name`` is a valid project name
        - ``license_files`` can't be used with classic ``license``
        - License classifiers can't be used with SPDX license
        - ``description`` is a single line (warning)
        - ``license`` is not an SPDX license expression if metadata_version >= 2.4 (warning)
        - License classifiers deprecated for metadata_version >= 2.4 (warning)
        - ``license`` is an SPDX license expression if metadata_version >= 2.4
        - ``license_files`` is supported only for metadata_version >= 2.4
        - ``project_url`` can't contain keys over 32 characters
        r   z@The metadata_version must be one of {versions} or None (default))versionsTr   zInvalid project name {name!r}. A valid name consists only of ASCII letters and numbers, period, underscore and hyphen. It must start and end with a letter or numberr   )ri   r=   NzN{key} must not be used when "project.license" is not a SPDX license expressionzproject.license-filesrq   c              3  @   K   | ]}|                     d           V  dS z
License ::N
startswithr[   cs     r%   r]   z,StandardMetadata.validate.<locals>.<genexpr>  s?       1
 1
+,ALL&&1
 1
 1
 1
 1
 1
r$   z[Setting {key} to an SPDX license expression is not compatible with 'License ::' classifierszproject.licensers   z{The one-line summary "project.description" should not contain more than one line. Readers might merge or truncate newlines.rr   )
stacklevelzGSet "project.license" to an SPDX license expression for metadata >= 2.4c              3  @   K   | ]}|                     d           V  dS r	  r
  r  s     r%   r]   z,StandardMetadata.validate.<locals>.<genexpr>#  s.      NNl33NNNNNNr$   zx'License ::' classifiers are deprecated for metadata >= 2.4, use a SPDX license expression for "project.license" insteadzcSetting {key} to an SPDX license expression is supported only when emitting metadata version >= 2.4z={key} is supported only when emitting metadata version >= 2.4    z2{key} names cannot be more than 32 characters longr   r   zMetadata validation failed)r   r   r   r   KNOWN_METADATA_VERSIONSr   r   r   r   r=   InvalidNamer   rf   r   r	   r(   r   r   rm   warningsr   r   PRE_SPDX_METADATA_VERSIONSr   rv   r   )rB   r   errorsrw   r=   s        r%   r   zStandardMetadata.validate  s   "  t???%Y-NNNTCi.OPPP	IO--di$-GGGG* 	I 	I 	Ih  diHHHHH	I )jw.O.O)bC)@AAAdlC(( 	<S 1
 1
040@1
 1
 1
 .
 .
 	< pC):;;; 	 DD,<$<$< R(    
 )1UUUdlG44 Ma,#$    
 NNT=MNNNNN M U,#$    t|S))	<*i.RRRwC):;;; **i.RRRQC)@AAAI 	G 	GD4yy2~~J##C^#FFF455555s   &A4 43B*)B*r  (_SmartMessageSetter | _JSonMessageSetterc                &   t          | j                  }|                                5  |                     d           ddd           n# 1 swxY w Y   | j        |d<   | j        |d<   | j        sd}|                    |d	           t          | j                  |d
<   | j	        r
| j	        |d<   d
                    | j                  pd|d<   t          | j                  |d<   t          | j                  |d<   t          | j                  |d<   t          | j                  |d<   t!          | j        t$                    r| j        j        |d<   n$t!          | j        t                    r
| j        |d<   | j        Nt+          t-          | j                            D ]+}t/          j        |                                          |d<   ,nl| j        t4          j        vrYt!          | j        t$                    r?| j        j        r3t/          j        | j        j                                                  |d<   | j        D ]}||d<   | j                                        D ]\  }}| d| |d<   | j         rt          | j                   |d<   | j!        D ]}t          |          |d<   | j"                                        D ]k\  }	}
|	#                    dd          #                    dd          $                                }||d<   |
D ]"}t          tK          ||                    |d<   #l| j&        r:| j&        j'        r| j&        j'        |d<   |(                    | j&        j                   | j        dk    r{| j)        D ]s}|$                                d v rd!|d"}|                    |           |$                                t4          j*        vrd#|d"}|                    |           ||d$<   t|+                    d%           dS )&zM
        Write the metadata to the message. Handles JSON or Message.
        r   Fr  NzMetadata-VersionNamer   r   rq   r   Summaryr^   KeywordsAuthorzAuthor-Email
MaintainerzMaintainer-Emailr	   zLicense-ExpressionzLicense-File
Classifierr   zProject-URLzRequires-PythonzRequires-Dist.rU   rV   zProvides-ExtrazDescription-Content-Typer   >   r=   r   r   zMetadata field z cannot be declared dynamiczUnknown metadata field r   zFailed to write metadata),r   r   r   r   r   r=   r   r   r(   rm   r   rW   
_name_listr   _email_listr   rf   r   r	   textr   r   r1   osfspathas_posixr   r  filer   r   itemsr   r   r   rb   ra   _build_extra_reqr   content_typerF   r   ru   r   )rB   r  r  rw   license_file
classifierr=   urldepextrarequirements
norm_extrarequirementr'   s                 r%   r   z StandardMetadata._write_metadata?  s     t???^^ 	& 	&MMuM%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& -1,F() $	f| 	<'C):;;;#&t|#4#4i   	8'+'7M)$$'HHT]$;$;$Ctj! #-T\":":h(3DL(A(An%&01A&B&Bl#,78H,I,I()dlG,, 	?'+|'8M)$$c** 	?26,M./) &s4+='>'> ? ? S S02	,:O:O:Q:Q0R0Rn--S &i.RRR4<11 S! S -/Idl6G6P6P6R6R,S,SM.)* 	5 	5J*4M,'' ** 	< 	<ID#.2+;+;c+;+;M-(( 	I/243G/H/HM+,$ 	6 	6C-0XXM/**#'#=#C#C#E#E 	 	E<sC0088cBBHHJJJ.8M*++  14$Z==2 2o.. ; 	8{' U<@K<T89%%dk&6777%... 1 1;;==$BBBPEPPPC'',,,;;==	(GGGXEXXXC'',,,+0i((233333s   AAAr   )r   r(   )rS   r.   r   r   r   r?   r   r   r   r   r   r{   r   r   )r   r   )r   rR   )r   r{   r   r@   )r  r  r   r@   )*rK   rL   rM   rN   rO   r   rm   r   r   r   r   dataclassesr'   rg   r   dictr   r   r   r   r   r   rW   r   r   r   r   r   r   r   propertyr   r   classmethodr"  pathcurdirr   r  r  r   r   r#   r$   r%   r   r      s|          III04G4444"K""""$(G((((/3M3333 F    @DODDDD&7k&7&M&M&MLMMMM:K+:K; ; ;     .?[->t-T-T-TKTTTT,=K,=d,S,S,SGSSSS0A0ARV0W0W0WKWWWW,;,TBBBDBBBB.[.tDDDKDDDD+++DAAAHAAAA/k/EEEGEEEE"3+"3D"I"I"IKIIII.[.tDDDGDDDD #4+"3D"I"I"IIIII $('''' J       X < < < X<  /1gn'+-1Y )- Y Y Y Y Y [Yv       (, R6 R6 R6 R6 R6 R6hL4 L4 L4 L4 L4 L4r$   r   peopler   r?   c                D    d                     d | D                       pdS )z0
    Build a comma-separated list of names.
    r   c              3  $   K   | ]\  }}||V  d S r!   r#   )r[   r=   email_s      r%   r]   z_name_list.<locals>.<genexpr>  s+      CCldFFCTCCCCCCr$   Nr   r7  s    r%   r  r    s*     99CCfCCCCCKtKr$   c                D    d                     d | D                       pdS )z1
    Build a comma-separated list of emails.
    r   c              3  b   K   | ]*\  }}|t           j                            ||f          V  +d S r!   )r   r   
formataddr)r[   r=   _emails      r%   r]   z_email_list.<locals>.<genexpr>  sT       
 
7CtVQW
K""D&>22
 
 
 
 
 
r$   Nr;  r<  s    r%   r   r     s@    
 			 
 
GM
 
 
 	
 	
 	 	r$   r-  r0  r   c                d   t          j         |          }|j        rmd|j        j        v r0t          j                            d|j         d|           |_        nVt          j                            |j         d|           |_        n't          j                            d|           |_        |S )z7
    Build a new requirement with an extra marker.
    or(z) and extra == z and extra == z	extra == )copymarker_markersr   markersMarker)r-  r0  s     r%   r'  r'    s     )K((K 
M;%...!*!2!9!9@K&@@u@@" "K "+!2!9!9%>>U>>" "K '.556K%6K6KLLr$   )r   r   )r'   r(   r   r)   )r-   r.   r   r/   )r7  r   r   r?   )r-  r(   r0  r   r   r   )BrN   
__future__r   rD  r1  email.messager   email.policyemail.utilsr"  os.pathr   r   typingr  r   r   r  r   r   r   r   r	   r
   r   TYPE_CHECKINGcollections.abcr   r   packaging.requirementsr   r   typing_extensionsr   project_tabler   r   packaging.markersr   packaging.specifierspackaging.utilspackaging.versionrecompiler   r   __version__r"   r&   r   r   r   r   	dataclassr;   rQ   r~   EmailPolicyr   r<   EmailMessager   r   r  r   r'  r#   r$   r%   <module>r^     s   < # " " " " "                  				   



         L L L L L L L L L L 7 7 7 7 7 7 7 7 7 7	 7''''''222222
'!!*******66666666                j  IIIJ''J2:k**L      ; ; ; ;B B B B   T T T T * * * * * * * *& & & & & & & & &:/I /I /I /I /I5<+ /I /I /IdG G G G GEM. G G G& S4 S4 S4 S4 S4 S4 S4 S4lL L L L	 	 	 	     r$   