@@ -153,6 +153,27 @@ def __reduce__(self):
153153 )
154154
155155
156+ class EntryPoints (tuple ):
157+ """
158+ A collection of EntryPoint objects, retrievable by name.
159+ """
160+
161+ def __getitem__ (self , name ) -> EntryPoint :
162+ try :
163+ return next (ep for ep in self if ep .name == name )
164+ except Exception :
165+ raise KeyError (name )
166+
167+
168+ class GroupedEntryPoints (tuple ):
169+ """
170+ A collection of EntryPoint objects, retrievable by group.
171+ """
172+
173+ def __getitem__ (self , group ) -> EntryPoints :
174+ return EntryPoints (ep for ep in self if ep .group == group )
175+
176+
156177class PackagePath (pathlib .PurePosixPath ):
157178 """A reference to a path in a package"""
158179
@@ -308,7 +329,8 @@ def version(self):
308329
309330 @property
310331 def entry_points (self ):
311- return list (EntryPoint ._from_text_for (self .read_text ('entry_points.txt' ), self ))
332+ eps = EntryPoint ._from_text_for (self .read_text ('entry_points.txt' ), self )
333+ return GroupedEntryPoints (eps )
312334
313335 @property
314336 def files (self ):
@@ -647,10 +669,7 @@ def entry_points():
647669 :return: EntryPoint objects for all installed packages.
648670 """
649671 eps = itertools .chain .from_iterable (dist .entry_points for dist in distributions ())
650- by_group = operator .attrgetter ('group' )
651- ordered = sorted (eps , key = by_group )
652- grouped = itertools .groupby (ordered , by_group )
653- return {group : tuple (eps ) for group , eps in grouped }
672+ return GroupedEntryPoints (eps )
654673
655674
656675def files (distribution_name ):
0 commit comments