Log file path to plugin when it fails to load and remove debug statements

This commit is contained in:
Timmy Welch 2024-02-11 13:18:03 -08:00
parent e14714e26b
commit a1e4cec94f
3 changed files with 43 additions and 16 deletions

View File

@ -15,6 +15,7 @@
# limitations under the License.
from __future__ import annotations
import importlib.util
import io
import itertools
import logging
@ -33,6 +34,7 @@ from comicapi.metadata import Metadata
from comictaggerlib.ctversion import version
if TYPE_CHECKING:
from importlib.machinery import ModuleSpec
from importlib.metadata import EntryPoint
logger = logging.getLogger(__name__)
@ -50,7 +52,6 @@ def load_archive_plugins(local_plugins: Sequence[EntryPoint] = tuple()) -> None:
builtin: list[type[Archiver]] = []
# A list is used first matching plugin wins
for ep in itertools.chain(local_plugins, entry_points(group="comicapi.archiver")):
logger.warning(ep)
try:
archiver: type[Archiver] = ep.load()
if ep.module.startswith("comicapi"):
@ -58,7 +59,14 @@ def load_archive_plugins(local_plugins: Sequence[EntryPoint] = tuple()) -> None:
else:
archivers.append(archiver)
except Exception:
logger.exception("Failed to load archive plugin: %s", ep.name)
try:
spec = importlib.util.find_spec(ep.module)
except ValueError:
spec = None
if spec and spec.has_location:
logger.exception("Failed to load archive plugin: %s from %s", ep.name, spec.origin)
else:
logger.exception("Failed to load archive plugin: %s", ep.name)
archivers.extend(builtin)
@ -69,10 +77,13 @@ def load_metadata_plugins(version: str = f"ComicAPI/{version}", local_plugins: S
else:
from importlib.metadata import entry_points
builtin: dict[str, Metadata] = {}
styles: dict[str, Metadata] = {}
styles: dict[str, tuple[Metadata, ModuleSpec | None]] = {}
# A dict is used, last plugin wins
for ep in itertools.chain(entry_points(group="comicapi.metadata"), local_plugins):
logger.warning(ep)
try:
spec = importlib.util.find_spec(ep.module)
except ValueError:
spec = None
try:
style: type[Metadata] = ep.load()
if style.enabled:
@ -80,19 +91,36 @@ def load_metadata_plugins(version: str = f"ComicAPI/{version}", local_plugins: S
builtin[style.short_name] = style(version)
else:
if style.short_name in styles:
logger.warning(
"Plugin %s is overriding the existing metadata plugin for %s tags",
ep.module,
style.short_name,
)
styles[style.short_name] = style(version)
if spec and spec.has_location:
logger.warning(
"Plugin %s from %s is overriding the existing metadata plugin for %s tags",
ep.module,
spec.origin,
style.short_name,
)
else:
logger.warning(
"Plugin %s is overriding the existing metadata plugin for %s tags",
ep.module,
style.short_name,
)
styles[style.short_name] = (style(version), spec)
except Exception:
logger.exception("Failed to load metadata plugin: %s", ep.name)
if spec and spec.has_location:
logger.exception("Failed to load metadata plugin: %s from %s", ep.name, spec.origin)
else:
logger.exception("Failed to load metadata plugin: %s", ep.name)
for style_name in set(builtin.keys()).intersection(styles):
logger.warning("Builtin metadata for %s tags are being overridden by a plugin", style_name)
spec = styles[style_name][1]
if spec and spec.has_location:
logger.warning(
"Builtin metadata for %s tags are being overridden by a plugin from %s", style_name, spec.origin
)
else:
logger.warning("Builtin metadata for %s tags are being overridden by a plugin", style_name)
metadata_styles.clear()
metadata_styles.update(builtin)
metadata_styles.update(styles)
metadata_styles.update({s[0]: s[1][0] for s in styles.items()})
class ComicArchive:

View File

@ -12,7 +12,7 @@ import re
from collections.abc import Generator
from typing import Any, NamedTuple
LOG = logging.getLogger(__name__)
logger = logging.getLogger(__name__)
NORMALIZE_PACKAGE_NAME_RE = re.compile(r"[-_.]+")
PLUGIN_GROUPS = frozenset(("comictagger.talker", "comicapi.archiver", "comicapi.metadata"))
@ -144,7 +144,7 @@ def _classify_plugins(plugins: list[Plugin]) -> Plugins:
elif p.entry_point.group == "comicapi.archiver":
archivers.append(p)
else:
LOG.warning(NotImplementedError(f"what plugin type? {p}"))
logger.warning(NotImplementedError(f"what plugin type? {p}"))
return Plugins(
metadata=metadata,

View File

@ -125,7 +125,6 @@ class App:
def load_plugins(self, opts: argparse.Namespace) -> None:
local_plugins = plugin_finder.find_plugins(opts.config.user_plugin_dir)
self._extend_plugin_paths(local_plugins)
logger.warning(sys.path)
comicapi.comicarchive.load_archive_plugins(local_plugins=[p.entry_point for p in local_plugins.archivers])
comicapi.comicarchive.load_metadata_plugins(