ó
j·Ã^c           @   sy  d  Z  d d l Z d d l Z d d l m Z d d l m Z d d l m	 Z	 e	 r— d d l
 m Z m Z m Z m Z m Z m Z m Z e d ƒ Z n  d Z e j d	 ƒ Z d
 d d d d g Z d e f d „  ƒ  YZ d d „ Z d d „ Z d „  Z d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ  d e f d „  ƒ  YZ! e	 r_e e  e! e f Z" n  d
 e f d „  ƒ  YZ# d S(   s	    PEP 610 iÿÿÿÿN(   t   six(   t   parse(   t   MYPY_CHECK_RUNNING(   t   Anyt   Dictt   Iterablet   Optionalt   Typet   TypeVart   Uniont   Ts   direct_url.jsons.   ^\$\{[A-Za-z0-9-_]+\}(:\$\{[A-Za-z0-9-_]+\})?$t	   DirectUrlt   DirectUrlValidationErrort   DirInfot   ArchiveInfot   VcsInfoc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s0   site-packages/pip/_internal/models/direct_url.pyR      s   c         C   sl   | |  k r | S|  | } t  j r; | t k r; t  j } n  t | | ƒ sh t d j | | | ƒ ƒ ‚ n  | S(   s3   Get value from dictionary and verify expected type.s-   {!r} has unexpected type for {} (expected {})(   R    t   PY2t   strt   string_typest
   isinstanceR   t   format(   t   dt   expected_typet   keyt   defaultt   value(    (    s0   site-packages/pip/_internal/models/direct_url.pyt   _get"   s    
c         C   s=   t  |  | | | ƒ } | d  k r9 t d j | ƒ ƒ ‚ n  | S(   Ns   {} must have a value(   R   t   NoneR   R   (   R   R   R   R   R   (    (    s0   site-packages/pip/_internal/models/direct_url.pyt   _get_required3   s    c         C   sy   g  |  D] } | d  k	 r | ^ q }  |  s: t d ƒ ‚ n  t |  ƒ d k r[ t d ƒ ‚ n  |  d d  k	 sq t ‚ |  d S(   Ns/   missing one of archive_info, dir_info, vcs_infoi   s1   more than one of archive_info, dir_info, vcs_infoi    (   R   R   t   lent   AssertionError(   t   infost   info(    (    s0   site-packages/pip/_internal/models/direct_url.pyt   _exactly_one_of;   s    %c          K   s   d „  |  j  ƒ  Dƒ S(   s    Make dict excluding None values.c         S   s+   i  |  ]! \ } } | d  k	 r | | “ q S(   N(   R   (   t   .0t   kt   v(    (    s0   site-packages/pip/_internal/models/direct_url.pys
   <dictcomp>M   s   	 (   t   items(   t   kwargs(    (    s0   site-packages/pip/_internal/models/direct_url.pyt   _filter_noneJ   s    c           B   s8   e  Z d  Z d d d d „ Z e d „  ƒ Z d „  Z RS(   t   vcs_infoc         C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S(   N(   t   vcst   requested_revisiont	   commit_idt   resolved_revisiont   resolved_revision_type(   t   selfR+   R-   R,   R.   R/   (    (    s0   site-packages/pip/_internal/models/direct_url.pyt   __init__S   s
    				c         C   sq   | d  k r d  S|  d t | t d ƒ d t | t d ƒ d t | t d ƒ d t | t d ƒ d t | t d ƒ ƒ S(   NR+   R-   R,   R.   R/   (   R   R   R   R   (   t   clsR   (    (    s0   site-packages/pip/_internal/models/direct_url.pyt
   _from_dicta   s    c         C   s4   t  d |  j d |  j d |  j d |  j d |  j ƒ S(   NR+   R,   R-   R.   R/   (   R)   R+   R,   R-   R.   R/   (   R0   (    (    s0   site-packages/pip/_internal/models/direct_url.pyt   _to_dictn   s    				N(   R   R   t   nameR   R1   t   classmethodR3   R4   (    (    (    s0   site-packages/pip/_internal/models/direct_url.pyR   P   s   c           B   s2   e  Z d  Z d d „ Z e d „  ƒ Z d „  Z RS(   t   archive_infoc         C   s   | |  _  d  S(   N(   t   hash(   R0   R8   (    (    s0   site-packages/pip/_internal/models/direct_url.pyR1   |   s    c         C   s)   | d  k r d  S|  d t | t d ƒ ƒ S(   NR8   (   R   R   R   (   R2   R   (    (    s0   site-packages/pip/_internal/models/direct_url.pyR3   ‚   s    c         C   s   t  d |  j ƒ S(   NR8   (   R)   R8   (   R0   (    (    s0   site-packages/pip/_internal/models/direct_url.pyR4   ‰   s    N(   R   R   R5   R   R1   R6   R3   R4   (    (    (    s0   site-packages/pip/_internal/models/direct_url.pyR   y   s   c           B   s2   e  Z d  Z e d „ Z e d „  ƒ Z d „  Z RS(   t   dir_infoc         C   s   | |  _  d  S(   N(   t   editable(   R0   R:   (    (    s0   site-packages/pip/_internal/models/direct_url.pyR1   ‘   s    c         C   s/   | d  k r d  S|  d t | t d d t ƒƒ S(   NR:   R   (   R   R   t   boolt   False(   R2   R   (    (    s0   site-packages/pip/_internal/models/direct_url.pyR3   —   s    c         C   s   t  d |  j p d  ƒ S(   NR:   (   R)   R:   R   (   R0   (    (    s0   site-packages/pip/_internal/models/direct_url.pyR4       s    (   R   R   R5   R<   R1   R6   R3   R4   (    (    (    s0   site-packages/pip/_internal/models/direct_url.pyR   Ž   s   	c           B   se   e  Z d d  „ Z d „  Z e d „  ƒ Z d „  Z e d „  ƒ Z	 d „  Z
 e d „  ƒ Z d „  Z RS(	   c         C   s   | |  _  | |  _ | |  _ d  S(   N(   t   urlR"   t   subdirectory(   R0   R=   R"   R>   (    (    s0   site-packages/pip/_internal/models/direct_url.pyR1   «   s    		c         C   ss   d | k r | S| j  d d ƒ \ } } t |  j t ƒ r\ |  j j d k r\ | d k r\ | St j | ƒ ro | S| S(   Nt   @i   t   git(   t   splitR   R"   R   R+   t
   ENV_VAR_REt   match(   R0   t   netloct	   user_passt   netloc_no_user_pass(    (    s0   site-packages/pip/_internal/models/direct_url.pyt   _remove_auth_from_netlocµ   s    c         C   sR   t  j |  j ƒ } |  j | j ƒ } t  j | j | | j | j | j	 f ƒ } | S(   s¯   url with user:password part removed unless it is formed with
        environment variables as specified in PEP 610, or it is ``git``
        in the case of a git URL.
        (
   t   urllib_parset   urlsplitR=   RG   RD   t
   urlunsplitt   schemet   patht   queryt   fragment(   R0   t   purlRD   t   surl(    (    s0   site-packages/pip/_internal/models/direct_url.pyt   redacted_urlÄ   s
    $c         C   s   |  j  |  j ƒ  ƒ d  S(   N(   t	   from_dictt   to_dict(   R0   (    (    s0   site-packages/pip/_internal/models/direct_url.pyt   validateÒ   s    c         C   s   t  d t | t d ƒ d t | t d ƒ d t t j t | t d ƒ ƒ t j t | t d ƒ ƒ t	 j t | t d ƒ ƒ g ƒ ƒ S(   NR=   R>   R"   R7   R9   R*   (
   R   R   R   R   R#   R   R3   t   dictR   R   (   R2   R   (    (    s0   site-packages/pip/_internal/models/direct_url.pyRR   Ö   s    c         C   s8   t  d |  j d |  j ƒ } |  j j ƒ  | |  j j <| S(   NR=   R>   (   R)   RQ   R>   R"   R4   R5   (   R0   t   res(    (    s0   site-packages/pip/_internal/models/direct_url.pyRS   å   s
    	c         C   s   |  j  t j | ƒ ƒ S(   N(   RR   t   jsont   loads(   R2   t   s(    (    s0   site-packages/pip/_internal/models/direct_url.pyt	   from_jsonî   s    c         C   s   t  j |  j ƒ  d t ƒS(   Nt	   sort_keys(   RW   t   dumpsRS   t   True(   R0   (    (    s0   site-packages/pip/_internal/models/direct_url.pyt   to_jsonó   s    N(   R   R   R   R1   RG   t   propertyRQ   RT   R6   RR   RS   RZ   R^   (    (    (    s0   site-packages/pip/_internal/models/direct_url.pyR   ©   s   				($   t   __doc__RW   t   ret   pip._vendorR    t   pip._vendor.six.moves.urllibR   RH   t   pip._internal.utils.typingR   t   typingR   R   R   R   R   R   R	   R
   t   DIRECT_URL_METADATA_NAMEt   compileRB   t   __all__t	   ExceptionR   R   R   R   R#   R)   t   objectR   R   R   t   InfoTypeR   (    (    (    s0   site-packages/pip/_internal/models/direct_url.pyt   <module>   s4   4			)