Path: blob/main/test/lib/python3.9/site-packages/setuptools/_entry_points.py
4798 views
import functools1import operator2import itertools34from .extern.jaraco.text import yield_lines5from .extern.jaraco.functools import pass_none6from ._importlib import metadata7from ._itertools import ensure_unique8from .extern.more_itertools import consume91011def ensure_valid(ep):12"""13Exercise one of the dynamic properties to trigger14the pattern match.15"""16ep.extras171819def load_group(value, group):20"""21Given a value of an entry point or series of entry points,22return each as an EntryPoint.23"""24# normalize to a single sequence of lines25lines = yield_lines(value)26text = f'[{group}]\n' + '\n'.join(lines)27return metadata.EntryPoints._from_text(text)282930def by_group_and_name(ep):31return ep.group, ep.name323334def validate(eps: metadata.EntryPoints):35"""36Ensure entry points are unique by group and name and validate each.37"""38consume(map(ensure_valid, ensure_unique(eps, key=by_group_and_name)))39return eps404142@functools.singledispatch43def load(eps):44"""45Given a Distribution.entry_points, produce EntryPoints.46"""47groups = itertools.chain.from_iterable(48load_group(value, group)49for group, value in eps.items())50return validate(metadata.EntryPoints(groups))515253@load.register(str)54def _(eps):55r"""56>>> ep, = load('[console_scripts]\nfoo=bar')57>>> ep.group58'console_scripts'59>>> ep.name60'foo'61>>> ep.value62'bar'63"""64return validate(metadata.EntryPoints(metadata.EntryPoints._from_text(eps)))656667load.register(type(None), lambda x: x)686970@pass_none71def render(eps: metadata.EntryPoints):72by_group = operator.attrgetter('group')73groups = itertools.groupby(sorted(eps, key=by_group), by_group)7475return '\n'.join(76f'[{group}]\n{render_items(items)}\n'77for group, items in groups78)798081def render_items(eps):82return '\n'.join(83f'{ep.name} = {ep.value}'84for ep in sorted(eps)85)868788