3 ig@sBdZddlZddlZddlZddlmZmZmZm Z m Z m Z m Z dddddgZ e d Zd Zejd ZGd ddeZdeeefe eee ee ed ddZdeeefe eee eed ddZee dddddZeeeefdddZGdddZGdddZGdddZe eeefZGdddZdS)z PEP 610 N)AnyDictIterableOptionalTypeTypeVarUnion DirectUrlDirectUrlValidationErrorDirInfo ArchiveInfoVcsInfoTzdirect_url.jsonz.^\$\{[A-Za-z0-9-_]+\}(:\$\{[A-Za-z0-9-_]+\})?$c@s eZdZdS)r N)__name__ __module__ __qualname__rr>/tmp/pip-build-88gy_88q/pip/pip/_internal/models/direct_url.pyr s)d expected_typekeydefaultreturncCs4||kr |S||}t||s0tdj||||S)z3Get value from dictionary and verify expected type.z-{!r} has unexpected type for {} (expected {})) isinstancer format)rrrrvaluerrr_gets  rcCs(t||||}|dkr$t|d|S)Nz must have a value)rr )rrrrrrrr _get_required)srInfoType)infosrcCsFdd|D}|stdt|dkr.td|ddk s>t|dS)NcSsg|]}|dk r|qS)Nr).0inforrr 3sz#_exactly_one_of..z/missing one of archive_info, dir_info, vcs_infoz1more than one of archive_info, dir_info, vcs_infor)r lenAssertionError)rrrr_exactly_one_of2s r&)kwargsrcKsdd|jDS)z Make dict excluding None values.cSsi|]\}}|dk r||qS)Nr)r kvrrr Bsz _filter_none..)items)r'rrr _filter_none@sr,c@speZdZdZd eeeeeeeeddddZeeeee feddddZ eee fd d d Z dS) r vcs_infoN)vcs commit_idrequested_revisionresolved_revisionresolved_revision_typercCs"||_||_||_||_||_dS)N)r.r0r/r1r2)selfr.r/r0r1r2rrr__init__Hs zVcsInfo.__init__)rrc CsF|dkr dS|t|tdt|tdt|tdt|tdt|tddS)Nr.r/r0r1r2)r.r/r0r1r2)rstrr)clsrrrr _from_dictVs    zVcsInfo._from_dict)rcCst|j|j|j|j|jdS)N)r.r0r/r1r2)r,r.r0r/r1r2)r3rrr_to_dictbs zVcsInfo._to_dict)NNN) rrrnamer5rr4 classmethodrrr7r8rrrrr Es" c@s`eZdZdZd eeddddZeeeee feddddZ eee fd d d Z dS) r archive_infoN)hashrcCs ||_dS)N)r<)r3r<rrrr4oszArchiveInfo.__init__)rrcCs|dkr dS|t|tddS)Nr<)r<)rr5)r6rrrrr7uszArchiveInfo._from_dict)rcCs t|jdS)N)r<)r,r<)r3rrrr8{szArchiveInfo._to_dict)N) rrrr9rr5r4r:rrr7r8rrrrr ls "c@s\eZdZdZd eddddZeeee e fedddd Z ee e fd d d Z dS)r dir_infoFN)editablercCs ||_dS)N)r>)r3r>rrrr4szDirInfo.__init__)rrcCs"|dkr dS|t|tddddS)Nr>F)r)r>)rbool)r6rrrrr7szDirInfo._from_dict)rcCst|jp ddS)N)r>)r,r>)r3rrrr8szDirInfo._to_dict)F) rrrr9r?r4r:rrr5rr7r8rrrrr s "c@seZdZdeeeeddddZeedddZeedd d Z ddd d Z e e ee fdd ddZe ee fdddZe eddddZedddZedddZdS)r N)urlr! subdirectoryrcCs||_||_||_dS)N)r@r!rA)r3r@r!rArrrr4szDirectUrl.__init__)netlocrcCsRd|kr |S|jdd\}}t|jtr@|jjdkr@|dkr@|Stj|rN|S|S)N@r#git)splitrr!r r. ENV_VAR_REmatch)r3rB user_passZnetloc_no_user_passrrr_remove_auth_from_netlocs   z"DirectUrl._remove_auth_from_netloc)rcCs<tjj|j}|j|j}tjj|j||j|j |j f}|S)zurl 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. ) urllibparseurlsplitr@rIrB urlunsplitschemepathqueryfragment)r3purlrBsurlrrr redacted_urls  zDirectUrl.redacted_urlcCs|j|jdS)N) from_dictto_dict)r3rrrvalidateszDirectUrl.validate)rrc CsRtt|tdt|tdttjt|tdtjt|tdt jt|tdgdS)Nr@rAr;r=r-)r@rAr!) r rr5rr&r r7dictr r )r6rrrrrUs  zDirectUrl.from_dictcCs&t|j|jd}|jj||jj<|S)N)r@rA)r,rTrAr!r8r9)r3resrrrrVs  zDirectUrl.to_dict)srcCs|jtj|S)N)rUjsonloads)r6rZrrr from_jsonszDirectUrl.from_jsoncCstj|jddS)NT) sort_keys)r[dumpsrV)r3rrrto_jsonszDirectUrl.to_jsoncCst|jto|jjS)N)rr!r r>)r3rrris_local_editableszDirectUrl.is_local_editable)N)rrrr5rrr4rIpropertyrTrWr:rrrUrVr]r`r?rarrrrr s   )N)N)__doc__r[re urllib.parserJZtypingrrrrrrr__all__rZDIRECT_URL_METADATA_NAMEcompilerF Exceptionr r5rrr&r,r r r rr rrrrs0$ '