ó vĘ_c@sūddlZddlZddlZddlmZddlmZddlm Z m Z m Z ddl m Z ddlmZddlmZmZerįddlmZmZmZmZdd lmZdd lmZnd e fd „ƒYZdS( i’’’’N(tparse(tWHEEL_EXTENSION(tredact_auth_from_urltsplit_auth_from_netloctsplitext(tKeyBasedCompareMixin(tMYPY_CHECK_RUNNING(t path_to_urlt url_to_path(tOptionaltTexttTupletUnion(tHTMLPage(tHashestLinkcBs£eZdZddddddgZd"d"d"ed„Zd„Zd „Ze d „ƒZ e d „ƒZ e d „ƒZ e d „ƒZ e d„ƒZe d„ƒZd„Ze d„ƒZe d„ƒZejdƒZe d„ƒZejdƒZe d„ƒZejdƒZe d„ƒZe d„ƒZe d„ƒZe d„ƒZd„Ze d„ƒZe d„ƒZ e d„ƒZ!e d „ƒZ"d!„Z#RS(#s?Represents a parsed link from a Package Index's simple URL t _parsed_urlt_urlt comes_fromtrequires_pythont yanked_reasontcache_link_parsingcCsŒ|jdƒrt|ƒ}ntj|ƒ|_||_||_|rN|nd|_||_ t t |ƒj d|dt ƒ||_ dS(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. :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. s\\tkeytdefining_classN(t startswithRt urllib_parseturlsplitRRRtNoneRRtsuperRt__init__R(tselfturlRRRR((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pyR$s   cCsc|jrdj|jƒ}nd}|jrLdjt|jƒ|j|ƒStt|jƒƒSdS(Ns (requires-python:{})ts{} (from {}){}(RtformatRRRtstr(Rtrp((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pyt__str__Ss  cCs dj|ƒS(Ns (R!(R((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pyt__repr___scCs|jS(N(R(R((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pyRcscCsS|jjdƒ}tj|ƒ}|s@t|jƒ\}}|Stj|ƒ}|S(Nt/(tpathtrstript posixpathtbasenameRtnetlocRtunquote(RR'tnameR+t user_pass((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pytfilenamehscCs t|jƒS(N(RR(R((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pyt file_pathxscCs |jjS(N(Rtscheme(R((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pyR1}scCs |jjS(s4 This can contain auth information. (RR+(R((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pyR+‚scCstj|jjƒS(N(RR,RR'(R((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pyR'ŠscCsttj|jjdƒƒƒS(NR&(RR)R*R'R((R((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pyRscCs|jƒdS(Ni(R(R((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pytext“scCs4|j\}}}}}tj||||dfƒS(N(RRt urlunsplitR(RR1R+R'tquerytfragment((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pyturl_without_fragment˜ss[#&]egg=([^&]*)cCs,|jj|jƒ}|sdS|jdƒS(Ni(t_egg_fragment_retsearchRRtgroup(Rtmatch((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pyt egg_fragment ss[#&]subdirectory=([^&]*)cCs,|jj|jƒ}|sdS|jdƒS(Ni(t_subdirectory_fragment_reR8RRR9(RR:((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pytsubdirectory_fragmentŖss2(sha1|sha224|sha384|sha256|sha512|md5)=([a-f0-9]+)cCs,|jj|jƒ}|r(|jdƒSdS(Ni(t_hash_reR8RR9R(RR:((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pythash¶s cCs,|jj|jƒ}|r(|jdƒSdS(Ni(R>R8RR9R(RR:((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pyt hash_name¾s cCs0tj|jjddƒdjddƒdƒS(Nt#iit?(R)R*Rtsplit(R((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pytshow_urlĘscCs |jdkS(Ntfile(R1(R((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pytis_fileĖscCs|jotjj|jƒS(N(RFtosR'tisdirR0(R((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pytis_existing_dirŠscCs |jtkS(N(R2R(R((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pytis_wheelŌscCs ddlm}|j|jkS(Ni’’’’(tvcs(tpip._internal.vcsRKR1t all_schemes(RRK((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pytis_vcsŁscCs |jdk S(N(RR(R((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pyt is_yankedąscCs |jdk S(N(R@R(R((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pythas_hashåscCs3|dks|j rtS|j|jd|jƒS(sG Return True if the link has a hash and it is allowed. t hex_digestN(RRPtFalsetis_hash_allowedR@R?(Rthashes((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pyRSźsN($t__name__t __module__t__doc__t __slots__RtTrueRR$R%tpropertyRR/R0R1R+R'RR2R6tretcompileR7R;R<R=R>R?R@RDRFRIRJRNRORPRS(((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pyRsL  )    (RGR)R[tpip._vendor.six.moves.urllibRRtpip._internal.utils.filetypesRtpip._internal.utils.miscRRRtpip._internal.utils.modelsRtpip._internal.utils.typingRtpip._internal.utils.urlsRRttypingR R R R tpip._internal.index.collectorR tpip._internal.utils.hashesRR(((sJ/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/models/link.pyts   "