import functools import operator import itertools from .errors import OptionError from .extern.jaraco.text import yield_lines from .extern.jaraco.functools import pass_none from ._importlib import metadata from ._itertools import ensure_unique from .extern.more_itertools import consume def ensure_valid(ep): """ Exercise one of the dynamic properties to trigger the pattern match. """ try: ep.extras except AttributeError as ex: msg = ( f"Problems to parse {ep}.\nPlease ensure entry-point follows the spec: " "https://packaging.python.org/en/latest/specifications/entry-points/" ) raise OptionError(msg) from ex def load_group(value, group): """ Given a value of an entry point or series of entry points, return each as an EntryPoint. """ # normalize to a single sequence of lines lines = yield_lines(value) text = f'[{group}]\n' + '\n'.join(lines) return metadata.EntryPoints._from_text(text) def by_group_and_name(ep): return ep.group, ep.name def validate(eps: metadata.EntryPoints): """ Ensure entry points are unique by group and name and validate each. """ consume(map(ensure_valid, ensure_unique(eps, key=by_group_and_name))) return eps @functools.singledispatch def load(eps): """ Given a Distribution.entry_points, produce EntryPoints. """ groups = itertools.chain.from_iterable( load_group(value, group) for group, value in eps.items()) return validate(metadata.EntryPoints(groups)) @load.register(str) def _(eps): r""" >>> ep, = load('[console_scripts]\nfoo=bar') >>> ep.group 'console_scripts' >>> ep.name 'foo' >>> ep.value 'bar' """ return validate(metadata.EntryPoints(metadata.EntryPoints._from_text(eps))) load.register(type(None), lambda x: x) @pass_none def render(eps: metadata.EntryPoints): by_group = operator.attrgetter('group') groups = itertools.groupby(sorted(eps, key=by_group), by_group) return '\n'.join( f'[{group}]\n{render_items(items)}\n' for group, items in groups ) def render_items(eps): return '\n'.join( f'{ep.name} = {ep.value}' for ep in sorted(eps) )
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
_distutils | Folder | 0755 |
|
|
_vendor | Folder | 0755 |
|
|
command | Folder | 0755 |
|
|
config | Folder | 0755 |
|
|
extern | Folder | 0755 |
|
|
__init__.py | File | 8.23 KB | 0644 |
|
_deprecation_warning.py | File | 218 B | 0644 |
|
_entry_points.py | File | 2.23 KB | 0644 |
|
_imp.py | File | 2.34 KB | 0644 |
|
_importlib.py | File | 1.28 KB | 0644 |
|
_itertools.py | File | 675 B | 0644 |
|
_path.py | File | 749 B | 0644 |
|
_reqs.py | File | 501 B | 0644 |
|
archive_util.py | File | 7.17 KB | 0644 |
|
build_meta.py | File | 19.14 KB | 0644 |
|
dep_util.py | File | 949 B | 0644 |
|
depends.py | File | 5.37 KB | 0644 |
|
discovery.py | File | 20.31 KB | 0644 |
|
dist.py | File | 44.19 KB | 0644 |
|
errors.py | File | 2.41 KB | 0644 |
|
extension.py | File | 5.46 KB | 0644 |
|
glob.py | File | 4.76 KB | 0644 |
|
installer.py | File | 3.73 KB | 0644 |
|
launch.py | File | 812 B | 0644 |
|
logging.py | File | 1.2 KB | 0644 |
|
monkey.py | File | 4.74 KB | 0644 |
|
msvc.py | File | 46.61 KB | 0644 |
|
namespaces.py | File | 3.02 KB | 0644 |
|
package_index.py | File | 39.38 KB | 0644 |
|
py34compat.py | File | 245 B | 0644 |
|
sandbox.py | File | 14.01 KB | 0644 |
|
script (dev).tmpl | File | 218 B | 0644 |
|
script.tmpl | File | 138 B | 0644 |
|
unicode_utils.py | File | 941 B | 0644 |
|
version.py | File | 144 B | 0644 |
|
wheel.py | File | 8.18 KB | 0644 |
|
windows_support.py | File | 718 B | 0644 |
|