See `the packaging docs on entry points
<https://packaging.python.org/specifications/entry-points/>`_
for more information.
+
+ >>> ep = EntryPoint(
+ ... name=None, group=None, value='package.module:attr [extra1, extra2]')
+ >>> ep.module
+ 'package.module'
+ >>> ep.attr
+ 'attr'
+ >>> ep.extras
+ ['extra1', 'extra2']
"""
pattern = re.compile(
@property
def extras(self):
match = self.pattern.match(self.value)
- return list(re.finditer(r'\w+', match.group('extras') or ''))
+ return re.findall(r'\w+', match.group('extras') or '')
@classmethod
def _from_config(cls, config):
def _read_egg_info_reqs(self):
source = self.read_text('requires.txt')
- return source and self._deps_from_requires_text(source)
+ return None if source is None else self._deps_from_requires_text(source)
@classmethod
def _deps_from_requires_text(cls, source):
for dep in deps
)
+ def test_requires_egg_info_empty(self):
+ fixtures.build_files(
+ {
+ 'requires.txt': '',
+ },
+ self.site_dir.joinpath('egginfo_pkg.egg-info'),
+ )
+ deps = requires('egginfo-pkg')
+ assert deps == []
+
def test_requires_dist_info(self):
deps = requires('distinfo-pkg')
assert len(deps) == 2