Skip to content

Commit

Permalink
show/plugins: fix type hint issues
Browse files Browse the repository at this point in the history
  • Loading branch information
abn committed May 7, 2022
1 parent ae1081a commit 53e9298
Showing 1 changed file with 31 additions and 21 deletions.
52 changes: 31 additions & 21 deletions src/poetry/console/commands/self/show/plugins.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,24 @@
from __future__ import annotations

from collections import defaultdict
import dataclasses

from typing import TYPE_CHECKING
from typing import DefaultDict

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


if TYPE_CHECKING:
from entrypoints import EntryPoint
from poetry.core.packages.package import Package


@dataclasses.dataclass
class PluginPackage:
package: Package
plugins: list[EntryPoint] = dataclasses.field(default_factory=list)
application_plugins: list[EntryPoint] = dataclasses.field(default_factory=list)


class SelfShowPluginsCommand(SelfCommand):
name = "self show plugins"
description = "Shows information about the currently installed plugins."
Expand All @@ -32,13 +40,7 @@ def _system_project_handle(self) -> int:
from poetry.utils.helpers import canonicalize_name
from poetry.utils.helpers import pluralize

plugins: DefaultDict[str, dict[str, Package | list[str]]] = defaultdict(
lambda: {
"package": None,
"plugins": [],
"application_plugins": [],
}
)
plugins: dict[str, PluginPackage] = {}

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

packages_by_name = {pkg.name: pkg for pkg in installed_repository.packages}
packages_by_name: dict[str, Package] = {
pkg.name: pkg for pkg in installed_repository.packages
}

for entry_point in entry_points:
plugin = entry_point.load()
category = "plugins"
if issubclass(plugin, ApplicationPlugin):
category = "application_plugins"

package = packages_by_name[canonicalize_name(entry_point.distro.name)]
plugins[package.pretty_name]["package"] = package
plugins[package.pretty_name][category].append(entry_point)

name = package.pretty_name
info = plugins.get(name) or PluginPackage(package=package)

if issubclass(plugin, ApplicationPlugin):
info.application_plugins.append(entry_point)
else:
info.plugins.append(entry_point)

plugins[name] = info

for name, info in plugins.items():
package = info["package"]
package = info.package
description = " " + package.description if package.description else ""
self.line("")
self.line(f" • <c1>{name}</c1> (<c2>{package.version}</c2>){description}")
provide_line = " "
if info["plugins"]:
count = len(info["plugins"])

if info.plugins:
count = len(info.plugins)
provide_line += f" <info>{count}</info> plugin{pluralize(count)}"

if info["application_plugins"]:
if info["plugins"]:
if info.application_plugins:
if info.plugins:
provide_line += " and"

count = len(info["application_plugins"])
count = len(info.application_plugins)
provide_line += (
f" <info>{count}</info> application plugin{pluralize(count)}"
)
Expand Down

0 comments on commit 53e9298

Please sign in to comment.