ó
'—^c           @   sû   d  d l  Z  d  d l Z d  d l Z d  d l m Z d  d l m Z d  d l m	 Z	 m
 Z
 m Z d  d l m Z d  d l m Z d  d l m Z m Z e rá d  d l m Z m Z m Z m Z d  d	 l m Z d  d
 l m Z n  d e f d „  ƒ  YZ d S(   iÿÿÿÿN(   t   parse(   t   WHEEL_EXTENSION(   t   redact_auth_from_urlt   split_auth_from_netloct   splitext(   t   KeyBasedCompareMixin(   t   MYPY_CHECK_RUNNING(   t   path_to_urlt   url_to_path(   t   Optionalt   Textt   Tuplet   Union(   t   HTMLPage(   t   Hashest   Linkc           B   sˆ  e  Z d  Z d d d d „ Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 e d „  ƒ Z e d „  ƒ Z e d	 „  ƒ Z d
 „  Z e d „  ƒ Z e d „  ƒ Z e j d ƒ Z e d „  ƒ Z e j d ƒ Z e d „  ƒ Z e j d ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z  d „  Z! RS(   s?   Represents a parsed link from a Package Index's simple URL
    c         C   sƒ   | j  d ƒ r t | ƒ } n  t j | ƒ |  _ | |  _ | |  _ | rN | n d |  _ | |  _	 t
 t |  ƒ j d | d t ƒ d S(   s`  
        :param url: url of the resource pointed to (href of the link)
        :param comes_from: instance of HTMLPage where the link was found,
            or string.
        :param requires_python: String containing the `Requires-Python`
            metadata field, specified in PEP 345. This may be specified by
            a data-requires-python attribute in the HTML link tag, as
            described in PEP 503.
        :param yanked_reason: the reason the file has been yanked, if the
            file has been yanked, or None if the file hasn't been yanked.
            This is the value of the "data-yanked" attribute, if present, in
            a simple repository HTML link. If the file has been yanked but
            no reason was provided, this should be the empty string. See
            PEP 592 for more information and the specification.
        s   \\t   keyt   defining_classN(   t
   startswithR   t   urllib_parset   urlsplitt   _parsed_urlt   _urlt
   comes_fromt   Nonet   requires_pythont   yanked_reasont   superR   t   __init__(   t   selft   urlR   R   R   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyR      s    			c         C   s\   |  j  r d |  j  } n d } |  j rE d t |  j ƒ |  j | f St t |  j ƒ ƒ Sd  S(   Ns    (requires-python:%s)t    s   %s (from %s)%s(   R   R   R   R   t   str(   R   t   rp(    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt   __str__B   s    		c         C   s   d |  S(   Ns	   <Link %s>(    (   R   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt   __repr__N   s    c         C   s   |  j  S(   N(   R   (   R   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyR   R   s    c         C   sl   |  j  j d ƒ } t j | ƒ } | s@ t |  j ƒ \ } } | St j | ƒ } | sh t d |  j	 ƒ ‚ | S(   Nt   /s   URL %r produced no filename(
   t   patht   rstript	   posixpatht   basenameR   t   netlocR   t   unquotet   AssertionErrorR   (   R   R%   t   nameR)   t	   user_pass(    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt   filenameW   s    c         C   s   t  |  j ƒ S(   N(   R   R   (   R   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt	   file_pathf   s    c         C   s
   |  j  j S(   N(   R   t   scheme(   R   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyR0   k   s    c         C   s
   |  j  j S(   s4   
        This can contain auth information.
        (   R   R)   (   R   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyR)   p   s    c         C   s   t  j |  j j ƒ S(   N(   R   R*   R   R%   (   R   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyR%   x   s    c         C   s   t  t j |  j j d ƒ ƒ ƒ S(   NR$   (   R   R'   R(   R%   R&   (   R   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyR   }   s    c         C   s   |  j  ƒ  d S(   Ni   (   R   (   R   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt   ext   s    c         C   s4   |  j  \ } } } } } t j | | | | d  f ƒ S(   N(   R   R   t
   urlunsplitR   (   R   R0   R)   R%   t   queryt   fragment(    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt   url_without_fragment†   s    s   [#&]egg=([^&]*)c         C   s,   |  j  j |  j ƒ } | s d  S| j d ƒ S(   Ni   (   t   _egg_fragment_ret   searchR   R   t   group(   R   t   match(    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt   egg_fragmentŽ   s    s   [#&]subdirectory=([^&]*)c         C   s,   |  j  j |  j ƒ } | s d  S| j d ƒ S(   Ni   (   t   _subdirectory_fragment_reR7   R   R   R8   (   R   R9   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt   subdirectory_fragment˜   s    s2   (sha1|sha224|sha384|sha256|sha512|md5)=([a-f0-9]+)c         C   s,   |  j  j |  j ƒ } | r( | j d ƒ Sd  S(   Ni   (   t   _hash_reR7   R   R8   R   (   R   R9   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt   hash¤   s    c         C   s,   |  j  j |  j ƒ } | r( | j d ƒ Sd  S(   Ni   (   R=   R7   R   R8   R   (   R   R9   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt	   hash_name¬   s    c         C   s0   t  j |  j j d d ƒ d j d d ƒ d ƒ S(   Nt   #i   i    t   ?(   R'   R(   R   t   split(   R   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt   show_url´   s    c         C   s   |  j  d k S(   Nt   file(   R0   (   R   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt   is_file¹   s    c         C   s   |  j  o t j j |  j ƒ S(   N(   RE   t   osR%   t   isdirR/   (   R   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt   is_existing_dir¾   s    c         C   s   |  j  t k S(   N(   R1   R   (   R   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt   is_wheelÂ   s    c         C   s    d d l  m } |  j | j k S(   Niÿÿÿÿ(   t   vcs(   t   pip._internal.vcsRJ   R0   t   all_schemes(   R   RJ   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt   is_vcsÇ   s    c         C   s   |  j  d  k	 S(   N(   R   R   (   R   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt	   is_yankedÎ   s    c         C   s   |  j  d  k	 S(   N(   R?   R   (   R   (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt   has_hashÓ   s    c         C   s]   | d k s |  j r t S|  j d k	 s/ t ‚ |  j d k	 sD t ‚ | j |  j d |  j ƒS(   sG   
        Return True if the link has a hash and it is allowed.
        t
   hex_digestN(   R   RO   t   FalseR?   R+   R>   t   is_hash_allowed(   R   t   hashes(    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyRR   Ø   s
    N("   t   __name__t
   __module__t   __doc__R   R   R"   R#   t   propertyR   R.   R/   R0   R)   R%   R   R1   R5   t   ret   compileR6   R:   R;   R<   R=   R>   R?   RC   RE   RH   RI   RM   RN   RO   RR   (    (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyR      s>   "					(   RF   R'   RX   t   pip._vendor.six.moves.urllibR    R   t   pip._internal.utils.filetypesR   t   pip._internal.utils.miscR   R   R   t   pip._internal.utils.modelsR   t   pip._internal.utils.typingR   t   pip._internal.utils.urlsR   R   t   typingR	   R
   R   R   t   pip._internal.index.collectorR   t   pip._internal.utils.hashesR   R   (    (    (    s6   /tmp/pip-build-eiI0Wo/pip/pip/_internal/models/link.pyt   <module>   s   "