| 123456789101112131415161718192021222324252627282930313233 |
- import functools
- import operator
- import packaging.requirements
- # from coherent.build.discovery
- def extras_from_dep(dep):
- try:
- markers = packaging.requirements.Requirement(dep).marker._markers
- except AttributeError:
- markers = ()
- return set(
- marker[2].value
- for marker in markers
- if isinstance(marker, tuple) and marker[0].value == 'extra'
- )
- def extras_from_deps(deps):
- """
- >>> extras_from_deps(['requests'])
- set()
- >>> extras_from_deps(['pytest; extra == "test"'])
- {'test'}
- >>> sorted(extras_from_deps([
- ... 'requests',
- ... 'pytest; extra == "test"',
- ... 'pytest-cov; extra == "test"',
- ... 'sphinx; extra=="doc"']))
- ['doc', 'test']
- """
- return functools.reduce(operator.or_, map(extras_from_dep, deps), set())
|