
0c@_ô  ã               @   s  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 d Z e j d	 ƒ Z d
 d d d d g Z Gd d „  d e ƒ Z d d d „ Z d d d „ Z d d „  Z d d „  Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z  e	 ree e e  e f Z! Gd d
 „  d
 e ƒ Z" d S)z	 PEP 610 é    N)Úsix)Úparse)ÚMYPY_CHECK_RUNNING)ÚAnyÚDictÚIterableÚOptionalÚTypeÚTypeVarÚUnionÚTzdirect_url.jsonz.^\$\{[A-Za-z0-9-_]+\}(:\$\{[A-Za-z0-9-_]+\})?$Ú	DirectUrlÚDirectUrlValidationErrorÚDirInfoÚArchiveInfoÚVcsInfoc               @   s   e  Z d  Z d S)r   N)Ú__name__Ú
__module__Ú__qualname__© r   r   ú>/tmp/pip-build-jynh7p1z/pip/pip/_internal/models/direct_url.pyr      s   c             C   sf   | |  k r | S|  | } t  j r8 | t k r8 t  j } t | | ƒ sb t d j | | | ƒ ƒ ‚ | S)z3Get value from dictionary and verify expected type.z-{!r} has unexpected type for {} (expected {}))r   ÚPY2ÚstrÚstring_typesÚ
isinstancer   Úformat)ÚdÚexpected_typeÚkeyÚdefaultÚvaluer   r   r   Ú_get"   s    
	r!   c             C   s:   t  |  | | | ƒ } | d  k r6 t d j | ƒ ƒ ‚ | S)Nz{} must have a value)r!   r   r   )r   r   r   r   r    r   r   r   Ú_get_required3   s    r"   c             C   sa   d d „  |  Dƒ }  |  s% t  d ƒ ‚ t |  ƒ d k rC t  d ƒ ‚ |  d d  k	 sY t ‚ |  d S)Nc             S   s"   g  |  ] } | d  k	 r | ‘ q S)Nr   )Ú.0Úinfor   r   r   ú
<listcomp>=   s   	 z#_exactly_one_of.<locals>.<listcomp>z/missing one of archive_info, dir_info, vcs_infoé   z1more than one of archive_info, dir_info, vcs_infor   )r   ÚlenÚAssertionError)Zinfosr   r   r   Ú_exactly_one_of;   s    		r)   c              K   s   d d „  |  j  ƒ  Dƒ S)z Make dict excluding None values.c             S   s+   i  |  ]! \ } } | d  k	 r | | “ q S)Nr   )r#   ÚkÚvr   r   r   ú
<dictcomp>M   s   	 z _filter_none.<locals>.<dictcomp>)Úitems)Úkwargsr   r   r   Ú_filter_noneJ   s    r/   c               @   sI   e  Z d  Z d Z d d d d d „ Z e d d „  ƒ Z d d „  Z d S)	r   Úvcs_infoNc             C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S)N)ÚvcsÚrequested_revisionÚ	commit_idÚresolved_revisionÚresolved_revision_type)Úselfr1   r3   r2   r4   r5   r   r   r   Ú__init__S   s
    				zVcsInfo.__init__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)Nr1   r3   r2   r4   r5   )r"   r   r!   )Úclsr   r   r   r   Ú
_from_dicta   s    zVcsInfo._from_dictc             C   s4   t  d |  j d |  j d |  j d |  j d |  j ƒ S)Nr1   r2   r3   r4   r5   )r/   r1   r2   r3   r4   r5   )r6   r   r   r   Ú_to_dictn   s    				zVcsInfo._to_dict)r   r   r   Únamer7   Úclassmethodr9   r:   r   r   r   r   r   P   s   c               @   sC   e  Z d  Z d Z d d d „ Z e d d „  ƒ Z d d „  Z d S)	r   Úarchive_infoNc             C   s   | |  _  d  S)N)Úhash)r6   r>   r   r   r   r7   |   s    zArchiveInfo.__init__c             C   s)   | d  k r d  S|  d t  | t d ƒ ƒ S)Nr>   )r!   r   )r8   r   r   r   r   r9   ‚   s    zArchiveInfo._from_dictc             C   s   t  d |  j ƒ S)Nr>   )r/   r>   )r6   r   r   r   r:   ‰   s    zArchiveInfo._to_dict)r   r   r   r;   r7   r<   r9   r:   r   r   r   r   r   y   s   c               @   sC   e  Z d  Z d Z d d d „ Z e d d „  ƒ Z d d „  Z d	 S)
r   Údir_infoFc             C   s   | |  _  d  S)N)Úeditable)r6   r@   r   r   r   r7   ‘   s    zDirInfo.__init__c             C   s/   | d  k r d  S|  d t  | t d d d ƒƒ S)Nr@   r   F)r"   Úbool)r8   r   r   r   r   r9   —   s    zDirInfo._from_dictc             C   s   t  d |  j p d  ƒ S)Nr@   )r/   r@   )r6   r   r   r   r:       s    zDirInfo._to_dictN)r   r   r   r;   r7   r<   r9   r:   r   r   r   r   r   Ž   s   	c               @   s…   e  Z d  Z d d d „ Z d d „  Z e d d „  ƒ Z d d	 „  Z e d
 d „  ƒ Z	 d d „  Z
 e d d „  ƒ Z d d „  Z d S)r   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)Úurlr$   Úsubdirectory)r6   rB   r$   rC   r   r   r   r7   «   s    		zDirectUrl.__init__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)Nú@r&   Úgit)Úsplitr   r$   r   r1   Ú
ENV_VAR_REÚmatch)r6   ÚnetlocÚ	user_passZnetloc_no_user_passr   r   r   Ú_remove_auth_from_netlocµ   s    z"DirectUrl._remove_auth_from_netlocc             C   sR   t  j |  j ƒ } |  j | j ƒ } t  j | j | | j | j | j	 f ƒ } | S)z¯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.
        )
Úurllib_parseÚurlsplitrB   rK   rI   Ú
urlunsplitÚschemeÚpathÚqueryÚfragment)r6   ZpurlrI   Zsurlr   r   r   Úredacted_urlÄ   s
    $zDirectUrl.redacted_urlc             C   s   |  j  |  j ƒ  ƒ d  S)N)Ú	from_dictÚto_dict)r6   r   r   r   ÚvalidateÒ   s    zDirectUrl.validatec             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)NrB   rC   r$   r=   r?   r0   )
r   r"   r   r!   r)   r   r9   Údictr   r   )r8   r   r   r   r   rT   Ö   s    zDirectUrl.from_dictc             C   s8   t  d |  j d |  j ƒ } |  j j ƒ  | |  j j <| S)NrB   rC   )r/   rS   rC   r$   r:   r;   )r6   Úresr   r   r   rU   å   s
    	zDirectUrl.to_dictc             C   s   |  j  t j | ƒ ƒ S)N)rT   ÚjsonÚloads)r8   Úsr   r   r   Ú	from_jsonî   s    zDirectUrl.from_jsonc             C   s   t  j |  j ƒ  d d ƒS)NÚ	sort_keysT)rY   ÚdumpsrU   )r6   r   r   r   Úto_jsonó   s    zDirectUrl.to_json)r   r   r   r7   rK   ÚpropertyrS   rV   r<   rT   rU   r\   r_   r   r   r   r   r   ©   s   	)#Ú__doc__rY   ÚreZpip._vendorr   Zpip._vendor.six.moves.urllibr   rL   Zpip._internal.utils.typingr   Ztypingr   r   r   r   r	   r
   r   r   ZDIRECT_URL_METADATA_NAMEÚcompilerG   Ú__all__Ú	Exceptionr   r!   r"   r)   r/   Úobjectr   r   r   ZInfoTyper   r   r   r   r   Ú<module>   s4   4	)