def __init__(self, path): self.path = path if _cache_enabled and path in _cache_path_egg: self.metadata = _cache_path_egg[path].metadata self.name = self.metadata['Name'] self.version = self.metadata['Version'] return requires = None if path.endswith('.egg'): if os.path.isdir(path): meta_path = os.path.join(path, 'EGG-INFO', 'PKG-INFO') self.metadata = Metadata(path=meta_path) req_path = os.path.join(path, 'EGG-INFO', 'requires.txt') requires = parse_requires(req_path) else: # FIXME handle the case where zipfile is not available zipf = zipimport.zipimporter(path) fileobj = StringIO( zipf.get_data('EGG-INFO/PKG-INFO').decode('utf8')) self.metadata = Metadata(fileobj=fileobj) try: requires = zipf.get_data('EGG-INFO/requires.txt') except IOError: requires = None self.name = self.metadata['Name'] self.version = self.metadata['Version'] elif path.endswith('.egg-info'): if os.path.isdir(path): path = os.path.join(path, 'PKG-INFO') req_path = os.path.join(path, 'requires.txt') requires = parse_requires(req_path) self.metadata = Metadata(path=path) self.name = self.metadata['Name'] self.version = self.metadata['Version'] else: raise ValueError('path must end with .egg-info or .egg, got %r' % path) if requires: if self.metadata['Metadata-Version'] == '1.1': # we can't have 1.1 metadata *and* Setuptools requires for field in ('Obsoletes', 'Requires', 'Provides'): if field in self.metadata: del self.metadata[field] self.metadata['Requires-Dist'] += requires if _cache_enabled: _cache_path_egg[self.path] = self
def __init__(self, path): self.path = path if _cache_enabled and path in _cache_path_egg: self.metadata = _cache_path_egg[path].metadata self.name = self.metadata['Name'] self.version = self.metadata['Version'] return requires = None if path.endswith('.egg'): if os.path.isdir(path): meta_path = os.path.join(path, 'EGG-INFO', 'PKG-INFO') self.metadata = Metadata(path=meta_path) req_path = os.path.join(path, 'EGG-INFO', 'requires.txt') requires = parse_requires(req_path) else: # FIXME handle the case where zipfile is not available zipf = zipimport.zipimporter(path) fileobj = StringIO( zipf.get_data('EGG-INFO/PKG-INFO').decode('utf8')) self.metadata = Metadata(fileobj=fileobj) try: requires = zipf.get_data('EGG-INFO/requires.txt') except IOError: requires = None self.name = self.metadata['Name'] self.version = self.metadata['Version'] elif path.endswith('.egg-info'): if os.path.isdir(path): path = os.path.join(path, 'PKG-INFO') req_path = os.path.join(path, 'requires.txt') requires = parse_requires(req_path) self.metadata = Metadata(path=path) self.name = self.metadata['Name'] self.version = self.metadata['Version'] else: raise ValueError('path must end with .egg-info or .egg, got %r' % path) if requires: if self.metadata['Metadata-Version'] == '1.1': # we can't have 1.1 metadata *and* Setuptools requires for field in ('Obsoletes', 'Requires', 'Provides'): if field in self.metadata: del self.metadata[field] self.metadata['Requires-Dist'] += requires if _cache_enabled: _cache_path_egg[self.path] = self
def test_parse_requires(self): req_file = os.path.join(os.path.dirname(__file__), 'requires.txt') expected_requires = ['setuptools', 'zope.browser', 'zope.component', 'zope.configuration', 'zope.contenttype', 'zope.event', 'zope.exceptions', 'zope.i18n', 'zope.interface', 'zope.location', 'zope.proxy', 'zope.security'] requires = parse_requires(req_file) self.assertEqual(requires, expected_requires)