o
    ä§Êh#  ã                   @   sŠ   d 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 ddl	m
Z
mZ dgZdd„ ZG d	d
„ d
eƒZdd„ Zeƒ Z[eƒ Zddd„ZdS )zG
Parser for the environment markers micro-language defined in PEP 508.
é    Né   )Úpython_implementationÚurlparseÚstring_types)Úin_venvÚparse_markerÚ	interpretc                 C   s   t | tƒr| s	dS | d dv S )NFr   ú'")Ú
isinstancer   )Úo© r   úA/var/www/html/env/lib/python3.10/site-packages/distlib/markers.pyÚ_is_literal   s   r   c                   @   sf   e Zd ZdZdd„ dd„ dd„ dd„ dd„ dd„ d	d„ d
d„ dd„ dd„ dd„ dd„ dœZdd„ ZdS )Ú	Evaluatorz;
    This class is used to evaluate marker expessions.
    c                 C   ó   | |kS ©Nr   ©ÚxÚyr   r   r   Ú<lambda>$   ó    zEvaluator.<lambda>c                 C   r   r   r   r   r   r   r   r   %   r   c                 C   ó   | |kp| |kS r   r   r   r   r   r   r   &   ó    c                 C   s   | |kS r   r   r   r   r   r   r   '   r   c                 C   s   | |k S r   r   r   r   r   r   r   (   r   c                 C   s   | |kp| |k S r   r   r   r   r   r   r   )   r   c                 C   s   | |kS r   r   r   r   r   r   r   *   r   c                 C   r   r   r   r   r   r   r   r   +   r   c                 C   s   | o|S r   r   r   r   r   r   r   ,   r   c                 C   s   | p|S r   r   r   r   r   r   r   -   r   c                 C   s   | |v S r   r   r   r   r   r   r   .   r   c                 C   s   | |vS r   r   r   r   r   r   r   /   r   )z==z===z~=z!=ú<z<=ú>z>=ÚandÚorÚinznot inc           	      C   sØ   t |tƒr#|d dv r|dd… }|S ||vrtd| ƒ‚|| }|S t |tƒs*J ‚|d }|| jvr9td| ƒ‚|d }|d	 }t|d ƒrVt|d	 ƒrVtd
|||f ƒ‚|  ||¡}|  ||¡}| j| ||ƒ}|S )zƒ
        Evaluate a marker expression returned by the :func:`parse_requirement`
        function in the specified context.
        r   r	   r   éÿÿÿÿzunknown variable: %sÚopzop not implemented: %sÚlhsÚrhszinvalid comparison: %s %s %s)r
   r   ÚSyntaxErrorÚdictÚ
operationsÚNotImplementedErrorr   Úevaluate)	ÚselfÚexprÚcontextÚresultr   ÚelhsÚerhsr    r!   r   r   r   r&   2   s(   
ðô
zEvaluator.evaluateN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r$   r&   r   r   r   r   r      s     ôr   c                  C   s€   dd„ } t tdƒr| tjjƒ}tjj}nd}d}||tjt ¡ t ¡ t 	¡ t 
¡ t ¡ ttƒ ƒt ¡ t ¡ d d… tjdœ}|S )Nc                 S   s<   d| j | j| jf }| j}|dkr||d t| jƒ 7 }|S )Nz%s.%s.%sÚfinalr   )ÚmajorÚminorÚmicroÚreleaselevelÚstrÚserial)ÚinfoÚversionÚkindr   r   r   Úformat_full_versionN   s
   z,default_context.<locals>.format_full_versionÚimplementationÚ0Ú é   )Úimplementation_nameÚimplementation_versionÚos_nameÚplatform_machineÚplatform_python_implementationÚplatform_releaseÚplatform_systemÚplatform_versionÚplatform_in_venvÚpython_full_versionÚpython_versionÚsys_platform)ÚhasattrÚsysr<   r9   ÚnameÚosÚplatformÚmachiner   ÚreleaseÚsystemr6   r   rJ   )r;   rA   r@   r*   r   r   r   Údefault_contextM   s(   

ôrT   c              
   C   s|   zt | ƒ\}}W n ty } ztd| |f ƒ‚d}~ww |r-|d dkr-td| |f ƒ‚ttƒ}|r8| |¡ t ||¡S )zò
    Interpret a marker and return a result depending on environment.

    :param marker: The marker to interpret.
    :type marker: str
    :param execution_context: The context used for name lookup.
    :type execution_context: mapping
    z)Unable to interpret marker syntax: %s: %sNr   ú#z*unexpected trailing data in marker: %s: %s)r   Ú	Exceptionr"   r#   ÚDEFAULT_CONTEXTÚupdateÚ	evaluatorr&   )ÚmarkerÚexecution_contextr(   ÚrestÚer)   r   r   r   r   q   s   	€ÿ
r   )r0   rO   rM   rP   ÚreÚcompatr   r   r   Úutilr   r   Ú__all__r   Úobjectr   rT   rW   rY   r   r   r   r   r   Ú<module>   s   /