a
    b3jB                  	   @  s  U d dl mZ d dlZd dlZd dlZd dl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mZ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 g d
ZddddZeeeeee f ge f Z!e	d Z"ddhZ#h dZ$G dd de%Z&G dd de%Z'G dd de%Z(G dd deZ)dddddZ*ddd d!d"Z+dKd$d%d&d'd(d)Z,d*d+ d,d+ d-d+ ej-ej-ej.ej-d.d+ d/Z/d0e0d1< d&d2d3d&d4d5d6d7Z1d&d3d&d8d9d:d;Z2dd<d4d=d>d?Z3d@d&dAdBdCZ4dddDdEZ5G dFdG dGZ6d<d<dHdIdJZ7dS )L    )annotationsN)AbstractSetCallableLiteralMapping	TypedDictUnioncast   )
MarkerAtom
MarkerListOpValueVariable)parse_marker)ParserSyntaxError)InvalidSpecifier	Specifiercanonicalize_name)EnvironmentEvaluateContextInvalidMarkerMarkerUndefinedComparisonUndefinedEnvironmentNamedefault_environmentz	list[str]returnc                   C  s   t S N)__all__ r!   r!   n/www/wwwroot/dpstar/app/297b3aabda72fedb274352021c2dd8b5_venv/lib/python3.9/site-packages/packaging/markers.py__dir__   s    r#   )metadata	lock_filerequirementextrasdependency_groups>   python_versionplatform_releasepython_full_versionimplementation_versionc                   @  s   e Zd ZdZdS )r   zRaised when attempting to create a :class:`Marker` from invalid input.

    This error indicates that the given marker string does not conform to the
    :ref:`specification of dependency specifiers <pypug:dependency-specifiers>`.
    N__name__
__module____qualname____doc__r!   r!   r!   r"   r   6   s   r   c                   @  s   e Zd ZdZdS )r   zRaised when evaluating an unsupported marker comparison.

    This can happen when marker values are compared as versions but do not
    conform to the :ref:`specification of version specifiers
    <pypug:version-specifiers>`.
    Nr-   r!   r!   r!   r"   r   >   s   r   c                   @  s   e Zd ZdZdS )r   zJRaised when evaluating a marker that references a missing environment key.Nr-   r!   r!   r!   r"   r   G   s   r   c                   @  sj   e Zd ZU dZded< ded< ded< ded< ded< ded< ded	< ded
< ded< ded< ded< dS )r   z
    A dictionary that represents a Python environment as captured by
    :func:`default_environment`. All fields are required.
    strimplementation_namer,   os_nameplatform_machiner*   platform_systemplatform_versionr+   platform_python_implementationr)   sys_platformN)r.   r/   r0   r1   __annotations__r!   r!   r!   r"   r   K   s   
r   zMarkerList | MarkerAtom | str)resultr   c                 C  sp   t | ts| S | \}}}t |tr@|jdkr@t|j}t|}n&t |trf|jdkrft|j}t|}|||fS )Nextra)
isinstancetupler   valuer   r   )r;   lhsoprhsZnormalized_extrar!   r!   r"   _normalize_extras   s    




rC   r   )resultsr   c                 C  s   dd | D S )z!
    Normalize extra values.
    c                 S  s   g | ]}t |qS r!   )rC   ).0rr!   r!   r"   
<listcomp>       z+_normalize_extra_values.<locals>.<listcomp>r!   )rD   r!   r!   r"   _normalize_extra_values   s    rI   Tzlist[str] | MarkerAtom | strzbool | Noner2   )markerfirstr   c                 C  s   t | tttfsJ t | trHt| dkrHt | d ttfrHt| d S t | trdd | D }|rnd|S dd| d S n"t | trddd	 | D S | S d S )
Nr
   r   c                 s  s   | ]}t |d dV  qdS )F)rK   N)_format_markerrE   mr!   r!   r"   	<genexpr>   rH   z!_format_marker.<locals>.<genexpr> ()c                 S  s   g | ]}|  qS r!   )	serializerM   r!   r!   r"   rG      rH   z"_format_marker.<locals>.<listcomp>)r=   listr>   r2   lenrL   join)rJ   rK   innerr!   r!   r"   rL      s     



rL   c                 C  s   | |v S r   r!   r@   rB   r!   r!   r"   <lambda>   rH   rY   c                 C  s   | |vS r   r!   rX   r!   r!   r"   rY      rH   c                 C  s   dS NFr!   Z_lhsZ_rhsr!   r!   r"   rY      rH   c                 C  s   dS rZ   r!   r[   r!   r!   r"   rY      rH   )inznot in<z<=z==z!=z>=>zdict[str, Operator]
_operatorsr   zstr | AbstractSet[str]bool)r@   rA   rB   keyr   c                C  s~   |  }|tv rFzt| | }W n ty6   Y n0 |j| ddS t|}|d u rttd|d| d|d|| |S )NT)prereleasesz
Undefined z on z and .)rS   MARKERS_REQUIRING_VERSIONr   r   containsr_   getr   )r@   rA   rB   ra   Zop_strspecoperr!   r!   r"   _eval_op   s    
ri   z"tuple[str, str | AbstractSet[str]])r@   rB   ra   r   c                 C  sb   |dkr"t |tsJ d| |fS |tv rZt |trDt| t|fS t| dd |D fS | |fS )Nr<   zextra value must be a stringc                 S  s   h | ]}t |qS r!   r   )rE   vr!   r!   r"   	<setcomp>   rH   z_normalize.<locals>.<setcomp>)r=   r2   MARKERS_ALLOWING_SETr   )r@   rB   ra   r!   r!   r"   
_normalize   s    
rm   !dict[str, str | AbstractSet[str]])markersenvironmentr   c           
   	   C  s   g g}| D ]}t |tr.|d t|| q
t |tr|\}}}t |trb|j}|| }|j}	n|j}|j}|| }	t |tsJ dt||	|d\}}	|d t	|||	|d q
|dkr|g  q
|dkrq
t
d|q
tdd |D S )	Nzlhs must be a string)ra   orandzUnexpected marker c                 s  s   | ]}t |V  qd S r   )all)rE   itemr!   r!   r"   rO     rH   z$_evaluate_markers.<locals>.<genexpr>)r=   rT   append_evaluate_markersr>   r   r?   r2   rm   ri   	TypeErrorany)
ro   rp   groupsrJ   r@   rA   rB   Zenvironment_key	lhs_value	rhs_valuer!   r!   r"   rw      s,    



rw   zsys._version_info)infor   c                 C  sB   | j  d| j d| j }| j}|dkr>||d t| j 7 }|S )Nrc   finalr   )majorminormicroreleaselevelr2   serial)r}   versionkindr!   r!   r"   _format_full_version  s
    r   c                  C  s^   t tjj} tjj}|| tjt t t	 t t
 t dt dd tjdS )zReturn the default marker environment for the current Python process.

    This is the base environment used by :meth:`Marker.evaluate`.
    rc   N   )r3   r,   r4   r5   r*   r6   r7   r+   r8   r)   r9   )r   sysimplementationr   nameosplatformmachinereleasesystemr)   python_implementationrV   python_version_tuple)iverr3   r!   r!   r"   r   '  s    r   c                   @  s   e Zd ZdZdZdddddZedd d	d
dZddddZddddZ	ddddZ
dddddZddddZdddddZd d dddZd d dd d!Zd)d$d%dd&d'd(Zd"S )*r   a  Represents a parsed dependency marker expression.

    Marker expressions are parsed according to the
    :ref:`specification of dependency specifiers <pypug:dependency-specifiers>`.

    :param marker: The string representation of a marker expression.
    :raises InvalidMarker: If ``marker`` cannot be parsed.

    Instances are safe to serialize with :mod:`pickle`. They use a stable
    format so the same pickle can be loaded in future packaging releases.

    .. versionchanged:: 26.2

        Added a stable pickle format. Pickles created with packaging 26.2+ can
        be unpickled with future releases.  Backward compatibility with pickles
        from packaging < 26.2 is supported but may be removed in a future
        release.
    )_markersr2   None)rJ   r   c              
   C  sP   g | _ ztt|| _ W n2 tyJ } ztt||W Y d }~n
d }~0 0 d S r   )r   rI   _parse_markerr   r   r2   )selfrJ   er!   r!   r"   __init__S  s
    zMarker.__init__r   )ro   r   c                 C  s   |  | }||_|S )zCreate a Marker instance from a pre-parsed marker tree.

        This avoids re-parsing serialised marker strings when combining markers.
        )__new__r   )clsro   newr!   r!   r"   _from_markersq  s    
zMarker._from_markersr   c                 C  s
   t | jS r   )rL   r   r   r!   r!   r"   __str__{  s    zMarker.__str__c                 C  s   d| j j dt| dS )Nr]   rQ   z)>)	__class__r.   r2   r   r!   r!   r"   __repr__~  s    zMarker.__repr__intc                 C  s   t t| S r   )hashr2   r   r!   r!   r"   __hash__  s    zMarker.__hash__objectr`   )otherr   c                 C  s   t |tstS t| t|kS r   )r=   r   NotImplementedr2   r   r   r!   r!   r"   __eq__  s    
zMarker.__eq__c                 C  s   t | S r   )r2   r   r!   r!   r"   __getstate__  s    zMarker.__getstate__)stater   c              
   C  s   t |trVztt|| _W n4 tyP } ztd||W Y d }~n
d }~0 0 d S t |trd|v r|d }t |tr|| _d S t |t	rt
|dkr|\}}t |trd|v r|d }t |tr|| _d S td|d S )NzCannot restore Marker from r   r   )r=   r2   rI   r   r   r   rx   dictrT   r>   rU   )r   r   excro   _Z	slot_dictr!   r!   r"   __setstate__  s&    
&

zMarker.__setstate__c                 C  s"   t |tstS | | jd|jgS )Nrs   r=   r   r   r   r   r   r!   r!   r"   __and__  s    
zMarker.__and__c                 C  s"   t |tstS | | jd|jgS )Nrr   r   r   r!   r!   r"   __or__  s    
zMarker.__or__Nr$   z+Mapping[str, str | AbstractSet[str]] | Noner   )rp   contextr   c                 C  s   t dt }|dkr(|jt t d n|dkr8d|d< |durt|| d|v rtt d|d }|rlt|nd|d< t| jt|S )	a"  Evaluate a marker.

        Return the boolean from evaluating this marker against the environment.
        The environment is determined from the current Python process unless
        passed in explicitly.

        :param environment: Mapping containing keys and values to override the
           detected environment.
        :param EvaluateContext context: The context in which the marker is
            evaluated, which influences what marker names are considered valid.
            Accepted values are ``"metadata"`` (for core metadata; default),
            ``"lock_file"``, and ``"requirement"`` (i.e. all other situations).
        :raises UndefinedComparison: If the marker uses a comparison on values
            that are not valid versions per the :ref:`specification of version
            specifiers <pypug:version-specifiers>`.
        :raises UndefinedEnvironmentName: If the marker references a value that
            is missing from the evaluation environment.
        :returns: ``True`` if the marker matches, otherwise ``False``.

        rn   r%   )r'   r(   r$    r<   Nz
str | None)r	   r   update	frozensetr   rw   r   _repair_python_full_version)r   rp   r   current_environmentr<   r!   r!   r"   evaluate  s"    

zMarker.evaluate)Nr$   )r.   r/   r0   r1   	__slots__r   classmethodr   r   r   r   r   r   r   r   r   r   r!   r!   r!   r"   r   =  s    	  r   )envr   c                 C  s*   t d| d }|dr&| d| d< | S )z
    Work around platform.python_version() returning something that is not PEP 440
    compliant for non-tagged Python builds.
    r2   r+   +local)r	   endswith)r   r+   r!   r!   r"   r     s    
r   )T)8
__future__r   operatorr   r   r   typingr   r   r   r   r   r   r	   _parserr   r   r   r   r   r   r   
_tokenizerr   
specifiersr   r   utilsr   r    r#   r2   r`   Operatorr   rl   rd   
ValueErrorr   r   r   r   rC   rI   rL   eqner_   r:   ri   rm   rw   r   r   r   r   r!   r!   r!   r"   <module>   sR   $
	M	 ! &