1
- """Package resource API
1
+ """
2
+ Package resource API
2
3
--------------------
3
4
4
5
A resource is a logical file contained within a package, or a logical
@@ -1717,7 +1718,14 @@ def find_distributions(path_item, only=False):
1717
1718
finder = _find_adapter (_distribution_finders , importer )
1718
1719
return finder (importer , path_item , only )
1719
1720
1720
- def find_in_zip (importer , path_item , only = False ):
1721
+ def find_eggs_in_zip (importer , path_item , only = False ):
1722
+ """
1723
+ Find eggs in zip files; possibly multiple nested eggs.
1724
+ """
1725
+ if importer .archive .endswith ('.whl' ):
1726
+ # wheels are not supported with this finder
1727
+ # they don't have PKG-INFO metadata, and won't ever contain eggs
1728
+ return
1721
1729
metadata = EggMetadata (importer )
1722
1730
if metadata .has_metadata ('PKG-INFO' ):
1723
1731
yield Distribution .from_filename (path_item , metadata = metadata )
@@ -1726,10 +1734,10 @@ def find_in_zip(importer, path_item, only=False):
1726
1734
for subitem in metadata .resource_listdir ('/' ):
1727
1735
if subitem .endswith ('.egg' ):
1728
1736
subpath = os .path .join (path_item , subitem )
1729
- for dist in find_in_zip (zipimport .zipimporter (subpath ), subpath ):
1737
+ for dist in find_eggs_in_zip (zipimport .zipimporter (subpath ), subpath ):
1730
1738
yield dist
1731
1739
1732
- register_finder (zipimport .zipimporter , find_in_zip )
1740
+ register_finder (zipimport .zipimporter , find_eggs_in_zip )
1733
1741
1734
1742
def find_nothing (importer , path_item , only = False ):
1735
1743
return ()
@@ -2032,7 +2040,7 @@ def require(self, env=None, installer=None):
2032
2040
list (map (working_set .add ,
2033
2041
working_set .resolve (self .dist .requires (self .extras ),env ,installer )))
2034
2042
2035
- # @classmethod
2043
+ @classmethod
2036
2044
def parse (cls , src , dist = None ):
2037
2045
"""Parse a single entry point from string `src`
2038
2046
@@ -2064,9 +2072,7 @@ def parse(cls, src, dist=None):
2064
2072
else :
2065
2073
return cls (name .strip (), value .strip (), attrs , extras , dist )
2066
2074
2067
- parse = classmethod (parse )
2068
-
2069
- #@classmethod
2075
+ @classmethod
2070
2076
def parse_group (cls , group , lines , dist = None ):
2071
2077
"""Parse an entry point group"""
2072
2078
if not MODULE (group ):
@@ -2079,9 +2085,7 @@ def parse_group(cls, group, lines, dist=None):
2079
2085
this [ep .name ]= ep
2080
2086
return this
2081
2087
2082
- parse_group = classmethod (parse_group )
2083
-
2084
- #@classmethod
2088
+ @classmethod
2085
2089
def parse_map (cls , data , dist = None ):
2086
2090
"""Parse a map of entry point groups"""
2087
2091
if isinstance (data ,dict ):
@@ -2100,8 +2104,6 @@ def parse_map(cls, data, dist=None):
2100
2104
maps [group ] = cls .parse_group (group , lines , dist )
2101
2105
return maps
2102
2106
2103
- parse_map = classmethod (parse_map )
2104
-
2105
2107
2106
2108
def _remove_md5_fragment (location ):
2107
2109
if not location :
@@ -2128,7 +2130,7 @@ def __init__(self, location=None, metadata=None, project_name=None,
2128
2130
self .precedence = precedence
2129
2131
self ._provider = metadata or empty_provider
2130
2132
2131
- # @classmethod
2133
+ @classmethod
2132
2134
def from_location (cls ,location ,basename ,metadata = None ,** kw ):
2133
2135
project_name , version , py_version , platform = [None ]* 4
2134
2136
basename , ext = os .path .splitext (basename )
@@ -2144,7 +2146,6 @@ def from_location(cls,location,basename,metadata=None,**kw):
2144
2146
location , metadata , project_name = project_name , version = version ,
2145
2147
py_version = py_version , platform = platform , ** kw
2146
2148
)
2147
- from_location = classmethod (from_location )
2148
2149
2149
2150
hashcmp = property (
2150
2151
lambda self : (
@@ -2177,26 +2178,23 @@ def __ne__(self, other):
2177
2178
# metadata until/unless it's actually needed. (i.e., some distributions
2178
2179
# may not know their name or version without loading PKG-INFO)
2179
2180
2180
- # @property
2181
+ @property
2181
2182
def key (self ):
2182
2183
try :
2183
2184
return self ._key
2184
2185
except AttributeError :
2185
2186
self ._key = key = self .project_name .lower ()
2186
2187
return key
2187
- key = property (key )
2188
2188
2189
- # @property
2189
+ @property
2190
2190
def parsed_version (self ):
2191
2191
try :
2192
2192
return self ._parsed_version
2193
2193
except AttributeError :
2194
2194
self ._parsed_version = pv = parse_version (self .version )
2195
2195
return pv
2196
2196
2197
- parsed_version = property (parsed_version )
2198
-
2199
- #@property
2197
+ @property
2200
2198
def version (self ):
2201
2199
try :
2202
2200
return self ._version
@@ -2209,9 +2207,8 @@ def version(self):
2209
2207
raise ValueError (
2210
2208
"Missing 'Version:' header and/or %s file" % self .PKG_INFO , self
2211
2209
)
2212
- version = property (version )
2213
2210
2214
- # @property
2211
+ @property
2215
2212
def _dep_map (self ):
2216
2213
try :
2217
2214
return self .__dep_map
@@ -2229,7 +2226,6 @@ def _dep_map(self):
2229
2226
extra = safe_extra (extra ) or None
2230
2227
dm .setdefault (extra ,[]).extend (parse_requirements (reqs ))
2231
2228
return dm
2232
- _dep_map = property (_dep_map )
2233
2229
2234
2230
def requires (self ,extras = ()):
2235
2231
"""List of Requirements needed for this distro if `extras` are used"""
@@ -2287,13 +2283,12 @@ def __getattr__(self,attr):
2287
2283
raise AttributeError (attr )
2288
2284
return getattr (self ._provider , attr )
2289
2285
2290
- # @classmethod
2286
+ @classmethod
2291
2287
def from_filename (cls ,filename ,metadata = None , ** kw ):
2292
2288
return cls .from_location (
2293
2289
_normalize_cached (filename ), os .path .basename (filename ), metadata ,
2294
2290
** kw
2295
2291
)
2296
- from_filename = classmethod (from_filename )
2297
2292
2298
2293
def as_requirement (self ):
2299
2294
"""Return a ``Requirement`` that matches this distribution exactly"""
@@ -2400,10 +2395,9 @@ def clone(self,**kw):
2400
2395
kw .setdefault ('metadata' , self ._provider )
2401
2396
return self .__class__ (** kw )
2402
2397
2403
- # @property
2398
+ @property
2404
2399
def extras (self ):
2405
2400
return [dep for dep in self ._dep_map if dep ]
2406
- extras = property (extras )
2407
2401
2408
2402
2409
2403
class DistInfoDistribution (Distribution ):
@@ -2607,7 +2601,7 @@ def __hash__(self):
2607
2601
2608
2602
def __repr__ (self ): return "Requirement.parse(%r)" % str (self )
2609
2603
2610
- # @staticmethod
2604
+ @staticmethod
2611
2605
def parse (s ):
2612
2606
reqs = list (parse_requirements (s ))
2613
2607
if reqs :
@@ -2616,8 +2610,6 @@ def parse(s):
2616
2610
raise ValueError ("Expected only one requirement" , s )
2617
2611
raise ValueError ("No requirements found" , s )
2618
2612
2619
- parse = staticmethod (parse )
2620
-
2621
2613
state_machine = {
2622
2614
# =><
2623
2615
'<' : '--T' ,
0 commit comments