a
    e0h/                     @   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rd dlmZmZmZmZ d d	lmZ d d
lmZ G dd deZdS )    N)parse)WHEEL_EXTENSION)redact_auth_from_urlsplit_auth_from_netlocsplitext)KeyBasedCompareMixin)MYPY_CHECK_RUNNING)path_to_urlurl_to_path)OptionalTextTupleUnion)HTMLPage)Hashesc                       sH  e Zd ZdZg dZd8 fdd	Zdd Zd	d
 Zedd Z	edd Z
edd Zedd Zedd Zedd Zdd Zedd Zedd ZedZedd Zed Zed!d" Zed#Zed$d% Zed&d' Zed(d) Zed*d+ Zd,d- Zed.d/ Zed0d1 Zed2d3 Z ed4d5 Z!d6d7 Z"  Z#S )9Linkz?Represents a parsed link from a Package Index's simple URL
    )_parsed_url_url
comes_fromrequires_pythonyanked_reasoncache_link_parsingNTc                    s\   | drt|}t|| _|| _|| _|r2|nd| _|| _t	t
| j|t
d || _dS )a  
        :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.
        :param cache_link_parsing: A flag that is used elsewhere to determine
                                   whether resources retrieved from this link
                                   should be cached. PyPI index urls should
                                   generally have this set to False, for
                                   example.
        z\\N)keydefining_class)
startswithr	   urllib_parseurlsplitr   r   r   r   r   superr   __init__r   )selfurlr   r   r   r   	__class__ G/var/www/auris/lib/python3.9/site-packages/pip/_internal/models/link.pyr   %   s    
zLink.__init__c                 C   sF   | j rd| j }nd}| jr4dt| j| j|S tt| jS d S )Nz (requires-python:{}) z{} (from {}){})r   formatr   r   r   str)r   rpr#   r#   r$   __str__T   s    zLink.__str__c                 C   s
   d | S )Nz	<Link {}>)r&   r   r#   r#   r$   __repr__`   s    zLink.__repr__c                 C   s   | j S N)r   r*   r#   r#   r$   r    d   s    zLink.urlc                 C   sT   | j d}t|}|s,t| j\}}|S t|}|sPJ djf i t	 |S )N/z&URL {self._url!r} produced no filename)
pathrstrip	posixpathbasenamer   netlocr   unquoter&   locals)r   r.   namer2   	user_passr#   r#   r$   filenamei   s    

zLink.filenamec                 C   s
   t | jS r,   )r
   r    r*   r#   r#   r$   	file_pathy   s    zLink.file_pathc                 C   s   | j jS r,   )r   schemer*   r#   r#   r$   r9   ~   s    zLink.schemec                 C   s   | j jS )z4
        This can contain auth information.
        )r   r2   r*   r#   r#   r$   r2      s    zLink.netlocc                 C   s   t | jjS r,   )r   r3   r   r.   r*   r#   r#   r$   r.      s    z	Link.pathc                 C   s   t t| jdS )Nr-   )r   r0   r1   r.   r/   r*   r#   r#   r$   r      s    zLink.splitextc                 C   s   |   d S N   )r   r*   r#   r#   r$   ext   s    zLink.extc                 C   s$   | j \}}}}}t||||d fS r,   )r   r   
urlunsplit)r   r9   r2   r.   queryfragmentr#   r#   r$   url_without_fragment   s    zLink.url_without_fragmentz[#&]egg=([^&]*)c                 C   s    | j | j}|sd S |dS r:   )_egg_fragment_researchr   groupr   matchr#   r#   r$   egg_fragment   s    zLink.egg_fragmentz[#&]subdirectory=([^&]*)c                 C   s    | j | j}|sd S |dS r:   )_subdirectory_fragment_rerB   r   rC   rD   r#   r#   r$   subdirectory_fragment   s    zLink.subdirectory_fragmentz2(sha1|sha224|sha384|sha256|sha512|md5)=([a-f0-9]+)c                 C   s    | j | j}|r|dS d S )N   _hash_rerB   r   rC   rD   r#   r#   r$   hash   s    
z	Link.hashc                 C   s    | j | j}|r|dS d S r:   rJ   rD   r#   r#   r$   	hash_name   s    
zLink.hash_namec                 C   s$   t | jddd ddd S )N#r;   r   ?)r0   r1   r   splitr*   r#   r#   r$   show_url   s    zLink.show_urlc                 C   s
   | j dkS )Nfile)r9   r*   r#   r#   r$   is_file   s    zLink.is_filec                 C   s   | j otj| jS r,   )rS   osr.   isdirr8   r*   r#   r#   r$   is_existing_dir   s    zLink.is_existing_dirc                 C   s
   | j tkS r,   )r<   r   r*   r#   r#   r$   is_wheel   s    zLink.is_wheelc                 C   s   ddl m} | j|jv S )Nr   )vcs)pip._internal.vcsrX   r9   all_schemes)r   rX   r#   r#   r$   is_vcs   s    zLink.is_vcsc                 C   s
   | j d uS r,   )r   r*   r#   r#   r$   	is_yanked   s    zLink.is_yankedc                 C   s
   | j d uS r,   )rM   r*   r#   r#   r$   has_hash   s    zLink.has_hashc                 C   s@   |du s| j sdS | jdus J | jdus.J |j| j| jdS )zG
        Return True if the link has a hash and it is allowed.
        NF)
hex_digest)r]   rM   rL   is_hash_allowed)r   hashesr#   r#   r$   r_      s
    zLink.is_hash_allowed)NNNT)$__name__
__module____qualname____doc__	__slots__r   r)   r+   propertyr    r7   r8   r9   r2   r.   r   r<   r@   recompilerA   rF   rG   rH   rK   rL   rM   rQ   rS   rV   rW   r[   r\   r]   r_   __classcell__r#   r#   r!   r$   r      sj       /



















r   )rT   r0   rg   Zpip._vendor.six.moves.urllibr   r   pip._internal.utils.filetypesr   pip._internal.utils.miscr   r   r   pip._internal.utils.modelsr   pip._internal.utils.typingr   pip._internal.utils.urlsr	   r
   typingr   r   r   r   pip._internal.index.collectorr   pip._internal.utils.hashesr   r   r#   r#   r#   r$   <module>   s   