U
    ‰Haø  ã                   @   sz   d 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 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é   )Ústring_types)Úin_venvÚparse_markerÚ	interpretc                 C   s   t | tƒr| sdS | d dkS )NFr   ú'")Ú
isinstancer   )Úo© r
   ú3/tmp/pip-unpacked-wheel-0woaezjq/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   s   | |kS ©Nr
   ©ÚxÚyr
   r
   r   Ú<lambda>#   ó    zEvaluator.<lambda>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   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   s   | |kp| |kS 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   | |kS r   r
   r   r
   r
   r   r   -   r   c                 C   s   | |kS r   r
   r   r
   r
   r   r   .   r   )z==z===z~=z!=ú<z<=ú>z>=ÚandÚorÚinznot inc           	      C   sÔ   t |tƒrB|d dkr$|dd… }qÐ||kr8td| ƒ‚|| }nŽt |tƒsPt‚|d }|| jkrntd| ƒ‚|d }|d	 }t|d ƒr¨t|d	 ƒr¨t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ÚAssertionErrorÚ
operationsÚNotImplementedErrorr   Úevaluate)	ÚselfÚexprÚcontextÚresultr   ZelhsZerhsr   r   r
   r
   r   r"   1   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r8||d t| jƒ 7 }|S )Nz%s.%s.%sÚfinalr   )ÚmajorÚminorÚmicroÚreleaselevelÚstrÚserial)ÚinfoÚversionÚkindr
   r
   r   Úformat_full_versionM   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_versionZplatform_in_venvÚpython_full_versionÚpython_versionÚsys_platform)ÚhasattrÚsysr6   r3   ÚnameÚosÚplatformÚmachineÚpython_implementationÚreleaseÚsystemr0   r   rC   )r5   r;   r:   r&   r
   r
   r   Údefault_contextL   s(    

ôrN   c              
   C   s†   zt | ƒ\}}W n2 tk
rB } ztd| |f ƒ‚W 5 d}~X Y nX |rd|d dkrdtd| |f ƒ‚ttƒ}|rz| |¡ 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"   )ÚmarkerZexecution_contextr$   ÚrestÚer%   r
   r
   r   r   p   s    	"
)N)r*   rH   rF   rI   Úcompatr   Úutilr   r   Ú__all__r   Úobjectr   rN   rQ   rS   r   r
   r
   r
   r   Ú<module>   s   /