a
    |f                     @   s   d 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	 ddl
mZ dgZedZd	d
hZdd Zdd Zdd ZG dd deZed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)LegacyVersion	interpretz<((\d+(\.\d+)*\w*)|\'(\d+(\.\d+)*\w*)\'|\"(\d+(\.\d+)*\w*)\")python_versionpython_full_versionc                 C   s   t | to| tv S N)
isinstancer   _VERSION_MARKERSs r   ID:\Projects\storyit_web\backend\venv\Lib\site-packages\distlib/markers.py_is_version_marker   s    r   c                 C   s   t | tr| sdS | d dv S )NFr   '")r   r   )or   r   r   _is_literal#   s    r   c                 C   s   dd t | D S )Nc                 S   s   h | ]}t | d  qS )r   )LVgroups).0mr   r   r   	<setcomp>*       z _get_versions.<locals>.<setcomp>)_VERSION_PATTERNfinditerr   r   r   r   _get_versions)   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 expressions.
    c                 C   s   | |kS r
   r   xyr   r   r   <lambda>3   r   zEvaluator.<lambda>c                 C   s   | |kS r
   r   r   r   r   r   r"   4   r   c                 C   s   | |kp| |kS r
   r   r   r   r   r   r"   5   r   c                 C   s   | |kS r
   r   r   r   r   r   r"   6   r   c                 C   s   | |k S r
   r   r   r   r   r   r"   7   r   c                 C   s   | |kp| |k S r
   r   r   r   r   r   r"   8   r   c                 C   s   | |kS r
   r   r   r   r   r   r"   9   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   | |v S r
   r   r   r   r   r   r"   =   r   c                 C   s   | |vS r
   r   r   r   r   r   r"   >   r   )=====~=!=<<=>>=andorinnot inc           	      C   s"  t |trB|d dv r$|dd }n||vr8td| || }nt |tsPJ |d }|| jvrntd| |d }|d	 }t|d rt|d	 rtd
|||f | ||}| ||}t|st|r|dv rt	|}t	|}n$t|r|dv rt	|}t
|}| 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(   r)   r*   r$   r#   r&   r%   )r-   r.   )r   r   SyntaxErrordict
operationsNotImplementedErrorr   evaluater   r   r   )	selfexprcontextresultr0   ZelhsZerhsr1   r2   r   r   r   r7   A   s8    



zEvaluator.evaluateN)__name__
__module____qualname____doc__r5   r7   r   r   r   r   r   -   s   r   z\d+\.\d+c                  C   s   dd } t tdr(| tjj}tjj}nd}d}t }t|}|	d}||t
jt t t t t tt ||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_versionj   s
    z,default_context.<locals>.format_full_versionimplementation0 r   )implementation_nameimplementation_versionos_nameplatform_machineplatform_python_implementationplatform_releaseplatform_systemplatform_versionZplatform_in_venvr	   r   sys_platform)hasattrsysrK   rH   nameplatformr   _DIGITSmatchgrouposmachinepython_implementationreleasesystemrE   r   )rJ   rO   rN   ppvr   pvr;   r   r   r   default_contexth   s2    



re   c              
   C   s   zt | \}}W n4 tyD } ztd| |f W Y d}~n
d}~0 0 |rf|d dkrftd| |f tt}|r||| 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   	Exceptionr3   r4   DEFAULT_CONTEXTupdate	evaluatorr7   )markerZexecution_contextr9   rester:   r   r   r   r      s    	
)N)r?   r^   rerX   rZ   compatr   utilr   r   rH   r   r   __all__compiler   r   r   r   r   objectr   r[   re   rh   rj   r   r   r   r   r   <module>   s,   8
%