Skip to content

Commit 53e9298

Browse files
committed
show/plugins: fix type hint issues
1 parent ae1081a commit 53e9298

File tree

1 file changed

+31
-21
lines changed

1 file changed

+31
-21
lines changed

src/poetry/console/commands/self/show/plugins.py

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
11
from __future__ import annotations
22

3-
from collections import defaultdict
3+
import dataclasses
4+
45
from typing import TYPE_CHECKING
5-
from typing import DefaultDict
66

77
from poetry.console.commands.self.self_command import SelfCommand
88

99

1010
if TYPE_CHECKING:
11+
from entrypoints import EntryPoint
1112
from poetry.core.packages.package import Package
1213

1314

15+
@dataclasses.dataclass
16+
class PluginPackage:
17+
package: Package
18+
plugins: list[EntryPoint] = dataclasses.field(default_factory=list)
19+
application_plugins: list[EntryPoint] = dataclasses.field(default_factory=list)
20+
21+
1422
class SelfShowPluginsCommand(SelfCommand):
1523
name = "self show plugins"
1624
description = "Shows information about the currently installed plugins."
@@ -32,13 +40,7 @@ def _system_project_handle(self) -> int:
3240
from poetry.utils.helpers import canonicalize_name
3341
from poetry.utils.helpers import pluralize
3442

35-
plugins: DefaultDict[str, dict[str, Package | list[str]]] = defaultdict(
36-
lambda: {
37-
"package": None,
38-
"plugins": [],
39-
"application_plugins": [],
40-
}
41-
)
43+
plugins: dict[str, PluginPackage] = {}
4244

4345
system_env = EnvManager.get_system_env(naive=True)
4446
entry_points = PluginManager(ApplicationPlugin.group).get_plugin_entry_points(
@@ -48,33 +50,41 @@ def _system_project_handle(self) -> int:
4850
system_env, with_dependencies=True
4951
)
5052

51-
packages_by_name = {pkg.name: pkg for pkg in installed_repository.packages}
53+
packages_by_name: dict[str, Package] = {
54+
pkg.name: pkg for pkg in installed_repository.packages
55+
}
5256

5357
for entry_point in entry_points:
5458
plugin = entry_point.load()
55-
category = "plugins"
56-
if issubclass(plugin, ApplicationPlugin):
57-
category = "application_plugins"
5859

5960
package = packages_by_name[canonicalize_name(entry_point.distro.name)]
60-
plugins[package.pretty_name]["package"] = package
61-
plugins[package.pretty_name][category].append(entry_point)
61+
62+
name = package.pretty_name
63+
info = plugins.get(name) or PluginPackage(package=package)
64+
65+
if issubclass(plugin, ApplicationPlugin):
66+
info.application_plugins.append(entry_point)
67+
else:
68+
info.plugins.append(entry_point)
69+
70+
plugins[name] = info
6271

6372
for name, info in plugins.items():
64-
package = info["package"]
73+
package = info.package
6574
description = " " + package.description if package.description else ""
6675
self.line("")
6776
self.line(f" • <c1>{name}</c1> (<c2>{package.version}</c2>){description}")
6877
provide_line = " "
69-
if info["plugins"]:
70-
count = len(info["plugins"])
78+
79+
if info.plugins:
80+
count = len(info.plugins)
7181
provide_line += f" <info>{count}</info> plugin{pluralize(count)}"
7282

73-
if info["application_plugins"]:
74-
if info["plugins"]:
83+
if info.application_plugins:
84+
if info.plugins:
7585
provide_line += " and"
7686

77-
count = len(info["application_plugins"])
87+
count = len(info.application_plugins)
7888
provide_line += (
7989
f" <info>{count}</info> application plugin{pluralize(count)}"
8090
)

0 commit comments

Comments
 (0)