Viewing File: /usr/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-36.pyc

3

�Pf��@sddZddlZddlZddlZddlZddlmZmZddlm	Z	dgZ
Gdd�de�Zd
d	d�Z
dS)zEParser for the environment markers micro-language defined in PEP 345.�N�)�python_implementation�string_types)�in_venv�	interpretc
@s�eZdZdZdd�dd�dd�dd�dd�dd�d	d�d
d�dd�d�	Zejd
ejdd�ejj	dd�de
jee
��ej�ej�ej�e�d�	Zd*dd�Zdd�Zdd�Zd+dd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�ZdS),�	Evaluatorz5
    A limited evaluator for Python expressions.
    cCs||kS)N�)�x�yrr�/usr/lib/python3.6/markers.py�<lambda>szEvaluator.<lambda>cCs||kS)Nr)r	r
rrrrscCs||kS)Nr)r	r
rrrrscCs||kS)Nr)r	r
rrrrscCs||kS)Nr)r	r
rrrrscCs||kS)Nr)r	r
rrrrscCs|S)Nr)r	rrrr scCs||kS)Nr)r	r
rrrr!scCs||kS)Nr)r	r
rrrr"s)	�eq�gtZgte�in�ltZlte�notZnoteqZnotinz%s.%sN�� rr)	Zsys_platformZpython_versionZpython_full_versionZos_nameZplatform_in_venvZplatform_releaseZplatform_versionZplatform_machineZplatform_python_implementationcCs|pi|_d|_dS)zu
        Initialise an instance.

        :param context: If specified, names are looked up in this mapping.
        N)�context�source)�selfrrrr�__init__3s
zEvaluator.__init__cCs8d}d|j|||�}||t|j�kr4|d7}|S)zH
        Get the part of the source which is causing a problem.
        �
z%rz...)r�len)r�offsetZfragment_len�srrr�get_fragment<s
zEvaluator.get_fragmentcCst|d|d�S)z@
        Get a handler for the specified AST node type.
        zdo_%sN)�getattr)r�	node_typerrr�get_handlerFszEvaluator.get_handlercCs�t|t�rr||_ddi}|r$||d<ytj|f|�}Wn:tk
rp}z|j|j�}td|��WYdd}~XnX|jj	j
�}|j|�}|dkr�|jdkr�d}n|j|j�}td||f��||�S)zf
        Evaluate a source string or node, using ``filename`` when
        displaying errors.
        �mode�eval�filenamezsyntax error %sNz(source not available)z don't know how to evaluate %r %s)
�
isinstancerr�ast�parse�SyntaxErrorrr�	__class__�__name__�lowerr�
col_offset)r�noder"�kwargs�errZhandlerrrr�evaluateLs&


zEvaluator.evaluatecCs&t|tj�std��d|jj|jfS)Nzattribute node expectedz%s.%s)r#r$Z	Attribute�AssertionError�value�id�attr)rr+rrr�get_attr_keyfszEvaluator.get_attr_keycCsft|jtj�sd}n|j|�}||jkp0||jk}|sBtd|��||jkrX|j|}n
|j|}|S)NFzinvalid expression: %s)r#r0r$�Namer3r�allowed_valuesr&)rr+�valid�key�resultrrr�do_attributejs


zEvaluator.do_attributecCs�|j|jd�}|jjtjk}|jjtjk}|s8|s8t�|r@|sJ|r�|r�x4|jdd�D]"}|j|�}|rp|sz|rZ|rZPqZW|S)Nrr)r.�values�opr'r$ZOrZAndr/)rr+r8Zis_orZis_and�nrrr�	do_boolopxs
zEvaluator.do_boolopc	s���fdd�}�j}�j|�}d}xnt�j�j�D]\\}}|||�|jjj�}|�jkrft	d|���j|�}�j|||�}|s�P|}|}q2W|S)Ncs@d}t|tj�r t|tj�r d}|s<�j�j�}td|��dS)NTFzInvalid comparison: %s)r#r$ZStrrr*r&)�lhsnode�rhsnoder6r)r+rrr�sanity_check�sz*Evaluator.do_compare.<locals>.sanity_checkTzunsupported operation: %r)
�leftr.�zipZopsZcomparatorsr'r(r)�	operatorsr&)	rr+r@r>Zlhsr8r;r?Zrhsr)r+rr�
do_compare�s 




zEvaluator.do_comparecCs|j|j�S)N)r.Zbody)rr+rrr�
do_expression�szEvaluator.do_expressioncCsTd}|j|jkr"d}|j|j}n|j|jkr>d}|j|j}|sPtd|j��|S)NFTzinvalid expression: %s)r1rr5r&)rr+r6r8rrr�do_name�szEvaluator.do_namecCs|jS)N)r)rr+rrr�do_str�szEvaluator.do_str)N)N)r(�
__module__�__qualname__�__doc__rC�sys�platform�version_info�version�split�os�name�strr�release�machinerr5rrrr.r3r9r=rDrErFrGrrrrrs<

	

rcCst|�j|j��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
    )rr.�strip)ZmarkerZexecution_contextrrrr�s	)N)rJr$rPrKrL�compatrr�utilr�__all__�objectrrrrrr�<module>s"
Back to Directory File Manager
<