Skip to content

Commit

Permalink
Shift archive and settings commands to cli package
Browse files Browse the repository at this point in the history
Update esak to v2
  • Loading branch information
Buried-In-Code committed Nov 28, 2024
1 parent 61651dc commit c20d4b6
Show file tree
Hide file tree
Showing 8 changed files with 131 additions and 79 deletions.
1 change: 1 addition & 0 deletions .github/workflows/rich-codex.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on:
paths:
- README.md
- perdoo/__main__.py
- perdoo/cli/**
workflow_dispatch:

permissions:
Expand Down
32 changes: 28 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,22 +30,46 @@ Unlike other tagging tools, Perdoo employs a manual approach when metadata files
![`uv run Perdoo --help`](docs/img/perdoo-commands.svg)

</details>
<details><summary>Perdoo Import</summary>
<details><summary>Perdoo import</summary>

<!-- RICH-CODEX hide_command: true -->
![`uv run Perdoo import --help`](docs/img/perdoo-import.svg)

</details>
<details><summary>Perdoo Settings</summary>
<details><summary>Perdoo archive Commands</summary>

<!-- RICH-CODEX hide_command: true -->
![`uv run Perdoo archive --help`](docs/img/perdoo-archive-commands.svg)

</details>
<details><summary>Perdoo archive view</summary>

<!-- RICH-CODEX hide_command: true -->
![`uv run Perdoo archive view --help`](docs/img/perdoo-archive-view.svg)

</details>
<details><summary>Perdoo settings Commands</summary>

<!-- RICH-CODEX hide_command: true -->
![`uv run Perdoo settings --help`](docs/img/perdoo-settings.svg)

</details>
<details><summary>Perdoo View</summary>
<details><summary>Perdoo settings view Commands</summary>

<!-- RICH-CODEX hide_command: true -->
![`uv run Perdoo settings view --help`](docs/img/perdoo-settings-view.svg)

</details>
<details><summary>Perdoo settings locate Commands</summary>

<!-- RICH-CODEX hide_command: true -->
![`uv run Perdoo settings locate --help`](docs/img/perdoo-settings-locate.svg)

</details>
<details><summary>Perdoo settings update Commands</summary>

<!-- RICH-CODEX hide_command: true -->
![`uv run Perdoo view --help`](docs/img/perdoo-view.svg)
![`uv run Perdoo settings update --help`](docs/img/perdoo-settings-update.svg)

</details>

Expand Down
77 changes: 5 additions & 72 deletions perdoo/__main__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import logging
from argparse import SUPPRESS
from datetime import date
from enum import Enum
from pathlib import Path
Expand All @@ -11,6 +10,7 @@

from perdoo import __version__, setup_logging
from perdoo.archives import CBRArchive, get_archive
from perdoo.cli import archive_app, settings_app
from perdoo.console import CONSOLE
from perdoo.main import (
clean_archive,
Expand All @@ -24,16 +24,11 @@
from perdoo.metadata.metron_info import InformationSource
from perdoo.services import BaseService, Comicvine, League, Marvel, Metron
from perdoo.settings import Service, Services, Settings
from perdoo.utils import (
IssueSearch,
Search,
SeriesSearch,
delete_empty_folders,
flatten_dict,
list_files,
)
from perdoo.utils import IssueSearch, Search, SeriesSearch, delete_empty_folders, list_files

app = Typer(help="CLI tool for managing comic collections and settings.")
app.add_typer(archive_app, name="archive")
app.add_typer(settings_app, name="settings")
LOGGER = logging.getLogger("perdoo")


Expand Down Expand Up @@ -67,68 +62,6 @@ def common(
raise Exit


@app.command(name="settings", help="Manage settings.")
def config(
key: Annotated[
str | None, Argument(show_default=False, help="The config key to retrieve or modify.")
] = None,
value: Annotated[
str | None, Argument(show_default=False, help="The value to set for the specified key.")
] = SUPPRESS,
reset: Annotated[
bool,
Option(
"--reset",
help="Reset the specified config key to its default value. If no key is provided, reset all settings.", # noqa: E501
),
] = False,
) -> None:
if key:
settings = Settings.load()
if reset:
settings_dict = flatten_dict(content=Settings().model_dump())
if key in settings_dict:
settings.update(key=key, value=settings_dict[key])
settings.save()
CONSOLE.print(f"'{key}' Reset")
else:
CONSOLE.print(f"No Config key: '{key}'", style="logging.level.critical")
elif value is not SUPPRESS:
settings.update(key=key, value=value)
settings.save()
CONSOLE.print(f"Updated '{key}' to {value}")
else:
settings_dict = flatten_dict(content=settings.model_dump())
CONSOLE.print(settings_dict.get(key, f"No Config key: '{key}'"))
elif reset:
Settings().save()
CONSOLE.print("Settings reset")
else:
Settings.display()


@app.command(help="View the ComicInfo/MetronInfo inside a Comic archive.")
def view(
target: Annotated[
Path,
Argument(dir_okay=False, exists=True, show_default=False, help="Comic to view details of."),
],
hide_comic_info: Annotated[
bool, Option("--hide-comic-info", help="Don't show the ComicInfo details.")
] = False,
hide_metron_info: Annotated[
bool, Option("--hide-metron-info", help="Don't show the MetronInfo details.")
] = False,
) -> None:
archive = get_archive(target)
CONSOLE.print(f"Archive format: '{type(archive).__name__[:3]}'")
metron_info, comic_info = get_metadata(archive)
if not hide_comic_info:
comic_info.display()
if not hide_metron_info:
metron_info.display()


def get_services(settings: Services) -> dict[Service, BaseService]:
output = {}
if settings.comicvine.api_key:
Expand Down Expand Up @@ -251,8 +184,8 @@ def run(
extras={
"target": target,
"flags.skip-convert": skip_convert,
"flags.skip-clean": skip_clean,
"flags.sync": sync,
"flags.skip-clean": skip_clean,
"flags.skip-rename": skip_rename,
"flags.skip-organize": skip_organize,
}
Expand Down
4 changes: 4 additions & 0 deletions perdoo/cli/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
__all__ = ["archive_app", "settings_app"]

from perdoo.cli.archive import app as archive_app
from perdoo.cli.settings import app as settings_app
34 changes: 34 additions & 0 deletions perdoo/cli/archive.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
__all__ = ["app"]

from pathlib import Path
from typing import Annotated

from typer import Argument, Option, Typer

from perdoo.archives import get_archive
from perdoo.console import CONSOLE
from perdoo.metadata import get_metadata

app = Typer()


@app.command(help="View the ComicInfo/MetronInfo inside a Comic archive.")
def view(
target: Annotated[
Path,
Argument(dir_okay=False, exists=True, show_default=False, help="Comic to view details of."),
],
hide_comic_info: Annotated[
bool, Option("--hide-comic-info", help="Don't show the ComicInfo details.")
] = False,
hide_metron_info: Annotated[
bool, Option("--hide-metron-info", help="Don't show the MetronInfo details.")
] = False,
) -> None:
archive = get_archive(path=target)
CONSOLE.print(f"Archive format: '{type(archive).__name__[:3]}'")
metron_info, comic_info = get_metadata(archive=archive)
if not hide_comic_info:
comic_info.display()
if not hide_metron_info:
metron_info.display()
56 changes: 56 additions & 0 deletions perdoo/cli/settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
__all__ = ["app"]

from argparse import SUPPRESS
from typing import Annotated

from typer import Argument, Option, Typer

from perdoo.console import CONSOLE
from perdoo.settings import Settings
from perdoo.utils import flatten_dict

app = Typer()


@app.command()
def view() -> None:
settings = Settings.load()
settings.display()


@app.command(name="locate")
def locate() -> None:
CONSOLE.print(Settings._file) # noqa: SLF001


@app.command(name="update")
def update(
key: Annotated[str | None, Argument(show_default=False, help="The setting to update.")] = None,
value: Annotated[
str | None, Argument(show_default=False, help="The value to update the setting to.")
] = SUPPRESS,
reset: Annotated[
bool,
Option(
"--reset",
help="Reset the specified setting to its default value. If no key is provided, reset all settings.", # noqa: E501
),
] = False,
) -> None:
if reset:
Settings().save()
CONSOLE.print("Settings reset")
elif key:
settings = Settings.load()
if reset:
settings_dict = flatten_dict(content=Settings().model_dump())
if key in settings_dict:
settings.update(key=key, value=settings_dict[key])
settings.save()
CONSOLE.print(f"'{key}' Reset")
else:
CONSOLE.print(f"No Config key: '{key}'", style="logging.level.critical")
elif value is not SUPPRESS:
settings.update(key=key, value=value)
settings.save()
CONSOLE.print(f"Updated '{key}' to {value}")
4 changes: 2 additions & 2 deletions perdoo/services/marvel.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
import logging
from datetime import datetime

from esak.comic import Comic
from esak.exceptions import ApiError
from esak.series import Series
from esak.schemas.comic import Comic
from esak.schemas.series import Series
from esak.session import Session as Esak
from esak.sqlite_cache import SqliteCache
from natsort import humansorted, ns
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ classifiers = [
]
dependencies = [
"comicfn2dict >= 0.2.4",
"esak >= 1.3.2",
"esak >= 2.0.0",
"himon >= 0.6.1",
"lxml >= 5.3.0",
"mokkari >= 3.4.0",
Expand Down

0 comments on commit c20d4b6

Please sign in to comment.