o 7]h$@s$ddlZddlZddlZddlZddlZddlZddlmZm Z m Z m Z m Z m Z mZddlmZddlmZddlmZmZddlmZddlmZmZmZddlmZdd lm Z m!Z!d d l"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(e)e*Z+Gd d d e Z,GdddZ-Gddde#Z.Gddde%Z/dS)N) CollectionIterableIteratorListMapping NamedTupleOptional) pkg_resources) Requirement)NormalizedNamecanonicalize_name)parse) InvalidWheelNoneMetadataErrorUnsupportedWheel) display_path) parse_wheelread_wheel_metadata_file)BaseDistributionBaseEntryPointBaseEnvironmentDistributionVersionInfoPathWheelc@s&eZdZUeed<eed<eed<dS) EntryPointnamevaluegroupN)__name__ __module__ __qualname__str__annotations__r$r$F/usr/lib/python3/dist-packages/pip/_internal/metadata/pkg_resources.pyrs  rc@seZdZdZdeeefdeddfddZdedefd d Z dedefd d Z dede efd dZ dedefddZ dedeefddZdededdfddZdS) WheelMetadatazIMetadataProvider that reads metadata files from a dictionary. This also maps metadata decoding exceptions to our internal exception type. metadata wheel_namereturnNcCs||_||_dSN) _metadata _wheel_name)selfr'r(r$r$r%__init__*s zWheelMetadata.__init__rcCs ||jvSr*)r+r-rr$r$r% has_metadata. zWheelMetadata.has_metadatac CsHz|j|WSty#}ztd|jd|d|dd}~ww)NzError decoding metadata for z: z in z file)r+decodeUnicodeDecodeErrorrr,)r-rer$r$r% get_metadata1szWheelMetadata.get_metadatacCst||Sr*)r yield_linesr5r/r$r$r%get_metadata_lines:z WheelMetadata.get_metadata_linescCsdSNFr$r/r$r$r%metadata_isdir=zWheelMetadata.metadata_isdircCsgSr*r$r/r$r$r%metadata_listdir@r;zWheelMetadata.metadata_listdir script_name namespacecCsdSr*r$)r-r=r>r$r$r% run_scriptCr;zWheelMetadata.run_script)rr r!__doc__rr"bytesr.boolr0r5rr7r:rr<r?r$r$r$r%r&$s r&c@sDeZdZdejddfddZededdfddZed e d eddfd d Z e de efd dZ e de efddZe defddZe defddZe defddZdedefddZdedeejfddZdedefddZdeefddZe dej j!fd d!Z"d(d#e#edee$fd$d%Z%deefd&d'Z&dS)) Distributiondistr)NcC ||_dSr*)_distr-rDr$r$r%r.Hr1zDistribution.__init__ directoryc Cs|tj}tj|\}}t||}|dr%tj}tj |d}n|ds,Jtj }tj |ddd}||||d}||S)Nz .egg-inforz .dist-info-) project_namer') rstriposseppathsplitr PathMetadataendswithrCsplitextDistInfoDistribution) clsrHdist_dirbase_dir dist_dir_namer'dist_cls dist_namerDr$r$r%from_directoryKs   zDistribution.from_directorywheelrc sz)|t|\}fddD}Wdn1s#wYWn(tjy=}zt|j||d}~wtyQ}z t|d|d}~wwtj |jt ||j|d}||S)aLoad the distribution from a given wheel. :raises InvalidWheel: Whenever loading of the wheel causes a :py:exc:`zipfile.BadZipFile` exception to be thrown. :raises UnsupportedWheel: If the wheel is a valid zip, but malformed internally. cs4i|]}|dr|dddt|qS)/r) startswithrOr).0rNinfo_dirzfr$r% ks z+Distribution.from_wheel..Nz has an invalid wheel, )locationr'rJ) as_zipfilernamelistzipfile BadZipFilerrdrr rSr&)rTr[r_ metadata_textr4rDr$r`r% from_wheel_s*   zDistribution.from_wheelcC|jjSr*)rFrdr-r$r$r%rd{zDistribution.locationcCrlr*)rFegg_informr$r$r% info_locationrnzDistribution.info_locationcCs&zt|jjjWStyYdSwr9)rBrF _providerrNAttributeErrorrmr$r$r%installed_by_distutilss  z#Distribution.installed_by_distutilscC t|jjSr*)r rFrJrmr$r$r%canonical_name zDistribution.canonical_namecCrtr*) parse_versionrFversionrmr$r$r%rxrvzDistribution.versionrNcCs|jt|Sr*)rFr0r")r-rNr$r$r%is_filer8zDistribution.is_fileccsVt|}|j|st||j|st||j|D] }t||VqdSr*) r"rFr0FileNotFoundErrorisdirNotADirectoryErrorr<pathlib PurePosixPath)r-rNrchildr$r$r%iterdirs  zDistribution.iterdircCs>t|}|j|st||j|}|durt|||Sr*)r"rFr0rzr5r)r-rNrcontentr$r$r% read_texts   zDistribution.read_textccs\|jD]#\}}|D]\}}t|d\}}}t|||dVqqdS)N=)rrr)rF get_entry_mapitemsr" partitionrstrip)r-rentriesr entry_pointrirr$r$r%iter_entry_pointsszDistribution.iter_entry_pointscCst|jtjr d}nd}z||}Wnty2|jr#t|j}nt|j}t d|d}Ynwt j }|||S)z :raises NoneMetadataError: if the distribution reports `has_metadata()` True but `get_metadata()` returns None. METADATAzPKG-INFOzNo metadata found in %s) isinstancerFr rSrrzrdrreprloggerwarningemailparser FeedParserfeedclose)r- metadata_namer'displaying_path feed_parserr$r$r%r's      zDistribution.metadatar$extrascCs"|r t||jj}|j|Sr*) frozenset intersectionrFrrequires)r-rr$r$r%iter_dependenciess zDistribution.iter_dependenciescCrlr*)rFrrmr$r$r%iter_provided_extrassz!Distribution.iter_provided_extras)r$)'rr r!r rCr. classmethodr"rZrrkpropertyrrdrprBrsr rurrxrryrr}r~rrrrrrmessageMessager'rr rrr$r$r$r%rCGs0   rCc@seZdZdejddfddZedefddZede e e defd d Z d e de e fd d Zd e de e fddZdee fddZdS) Environmentwsr)NcCrEr*)_ws)r-rr$r$r%r.r1zEnvironment.__init__cCs |tjSr*)r working_set)rTr$r$r%defaults zEnvironment.defaultpathscCs|t|Sr*)r WorkingSet)rTrr$r$r% from_pathsszEnvironment.from_pathsrcCs,t|}|D] }|j|kr|SqdS)zFind a distribution matching the ``name`` in the environment. This searches from *all* distributions available in the environment, to match the behavior of ``pkg_resources.get_distribution()``. N)r iter_distributionsru)r-rrurDr$r$r%_search_distributions   z Environment._search_distributioncCsD||}|r |Sz|j|Wn tjyYdSw||Sr*)rrrequirer DistributionNotFound)r-rrDr$r$r%get_distributions   zEnvironment.get_distributionccs|jD]}t|VqdSr*)rrCrGr$r$r%_iter_distributionss  zEnvironment._iter_distributions)rr r!r rr.rrrrrr"rrrrrrr$r$r$r%rs r)0 email.messager email.parserloggingrLr}rgtypingrrrrrrr pip._vendorr "pip._vendor.packaging.requirementsr pip._vendor.packaging.utilsr r pip._vendor.packaging.versionr rwpip._internal.exceptionsrrrpip._internal.utils.miscrpip._internal.utils.wheelrrbaserrrrrr getLoggerrrrr&rCrr$r$r$r%s*$      #