ó
^†êWc           @   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 d d l m	 Z	 d g Z
 d e f d „  ƒ  YZ d d	 „ Z d S(
   sE   Parser for the environment markers micro-language defined in PEP 345.iÿÿÿÿNi   (   t   python_implementationt   string_types(   t   in_venvt	   interprett	   Evaluatorc           B   s^  e  Z d  Z i	 d „  d 6d „  d 6d „  d 6d „  d 6d	 „  d
 6d „  d 6d „  d 6d „  d 6d „  d 6Z i	 e j d 6d e j d  d 6e j j d d ƒ d d 6e	 j
 d 6e e ƒ  ƒ d 6e j ƒ  d 6e j ƒ  d 6e j ƒ  d 6e ƒ  d  6Z d, d! „ Z d" „  Z d# „  Z d, d$ „ Z d% „  Z d& „  Z d' „  Z d( „  Z d) „  Z d* „  Z d+ „  Z RS(-   s5   
    A limited evaluator for Python expressions.
    c         C   s
   |  | k S(   N(    (   t   xt   y(    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyt   <lambda>   s    t   eqc         C   s
   |  | k S(   N(    (   R   R   (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyR      s    t   gtc         C   s
   |  | k S(   N(    (   R   R   (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyR      s    t   gtec         C   s
   |  | k S(   N(    (   R   R   (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyR      s    t   inc         C   s
   |  | k  S(   N(    (   R   R   (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyR      s    t   ltc         C   s
   |  | k S(   N(    (   R   R   (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyR      s    t   ltec         C   s   |  S(   N(    (   R   (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyR       s    t   notc         C   s
   |  | k S(   N(    (   R   R   (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyR   !   s    t   noteqc         C   s
   |  | k S(   N(    (   R   R   (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyR   "   s    t   notint   sys_platforms   %s.%si   t   python_versiont    i   i    t   python_full_versiont   os_namet   platform_in_venvt   platform_releaset   platform_versiont   platform_machinet   platform_python_implementationc         C   s   | p	 i  |  _  d |  _ d S(   su   
        Initialise an instance.

        :param context: If specified, names are looked up in this mapping.
        N(   t   contextt   Nonet   source(   t   selfR   (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyt   __init__3   s    c         C   sH   d } d |  j  | | | !} | | t |  j  ƒ k  rD | d 7} n  | S(   sH   
        Get the part of the source which is causing a problem.
        i
   s   %rs   ...(   R   t   len(   R   t   offsett   fragment_lent   s(    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyt   get_fragment<   s
    c         C   s   t  |  d | d ƒ S(   s@   
        Get a handler for the specified AST node type.
        s   do_%sN(   t   getattrR   (   R   t	   node_type(    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyt   get_handlerF   s    c         C   s  t  | t ƒ r‰ | |  _ i d d 6} | r8 | | d <n  y t j | |  } Wq‰ t k
 r… } |  j | j ƒ } t d | ƒ ‚ q‰ Xn  | j j	 j
 ƒ  } |  j | ƒ } | d k rù |  j d k rÎ d } n |  j | j ƒ } t d | | f ƒ ‚ n  | | ƒ S(   sf   
        Evaluate a source string or node, using ``filename`` when
        displaying errors.
        t   evalt   modet   filenames   syntax error %ss   (source not available)s    don't know how to evaluate %r %sN(   t
   isinstanceR   R   t   astt   parset   SyntaxErrorR$   R!   t	   __class__t   __name__t   lowerR'   R   t
   col_offset(   R   t   nodeR*   t   kwargst   eR#   R&   t   handler(    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyt   evaluateL   s&    		c         C   s5   t  | t j ƒ s t d ƒ ‚ d | j j | j f S(   Ns   attribute node expecteds   %s.%s(   R+   R,   t	   Attributet   AssertionErrort   valuet   idt   attr(   R   R3   (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyt   get_attr_keyf   s    c         C   s”   t  | j t j ƒ s t } n- |  j | ƒ } | |  j k pH | |  j k } | sd t d | ƒ ‚ n  | |  j k rƒ |  j | } n |  j | } | S(   Ns   invalid expression: %s(	   R+   R:   R,   t   Namet   FalseR=   R   t   allowed_valuesR.   (   R   R3   t   validt   keyt   result(    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyt   do_attributej   s    	c         C   s¶   |  j  | j d ƒ } | j j t j k } | j j t j k } | sR | sR t ‚ | r^ | sk | r² | r² xD | j d D]2 } |  j  | ƒ } | rš | s§ | ry | ry Pqy qy Wn  | S(   Ni    i   (   R7   t   valuest   opR/   R,   t   Ort   AndR9   (   R   R3   RC   t   is_ort   is_andt   n(    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyt	   do_boolopx   s    c   	         sÖ   ‡  ‡ f d †  } ˆ  j  } ˆ j | ƒ } t } xŸ t ˆ  j ˆ  j ƒ D]ˆ \ } } | | | ƒ | j j j ƒ  } | ˆ j	 k r“ t
 d | ƒ ‚ n  ˆ j | ƒ } ˆ j	 | | | ƒ } | sÂ Pn  | } | } qF W| S(   Nc            sb   t  } t |  t j ƒ r3 t | t j ƒ r3 t } n  | s^ ˆ j ˆ  j ƒ } t d | ƒ ‚ n  d  S(   Ns   Invalid comparison: %s(   t   TrueR+   R,   t   StrR?   R$   R2   R.   (   t   lhsnodet   rhsnodeRA   R#   (   R3   R   (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyt   sanity_check…   s    $	s   unsupported operation: %r(   t   leftR7   RM   t   zipt   opst   comparatorsR/   R0   R1   t	   operatorsR.   (	   R   R3   RQ   RO   t   lhsRC   RF   RP   t   rhs(    (   R3   R   sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyt
   do_compare„   s     	"
c         C   s   |  j  | j ƒ S(   N(   R7   t   body(   R   R3   (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyt   do_expression¢   s    c         C   s|   t  } | j |  j k r1 t } |  j | j } n+ | j |  j k r\ t } |  j | j } n  | sx t d | j ƒ ‚ n  | S(   Ns   invalid expression: %s(   R?   R;   R   RM   R@   R.   (   R   R3   RA   RC   (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyt   do_name¥   s    c         C   s   | j  S(   N(   R#   (   R   R3   (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyt   do_str±   s    N(   R0   t
   __module__t   __doc__RV   t   syst   platformt   version_infot   versiont   splitt   ost   namet   strR   t   releaset   machineR    R@   R   R   R$   R'   R7   R=   RD   RL   RY   R[   R\   R]   (    (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyR      s@   









		
							c         C   s   t  | ƒ j |  j ƒ  ƒ S(   sò   
    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
    (   R   R7   t   strip(   t   markert   execution_context(    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyR   µ   s    	(   R_   R,   Re   R`   Ra   t   compatR    R   t   utilR   t   __all__t   objectR   R   R   (    (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/pip/pip/_vendor/distlib/markers.pyt   <module>   s   	¡