Skip to content

refactor: move preset command handlers to presets/_commands.py (PR-6/8)#2826

Open
darion-yaphet wants to merge 2 commits into
github:mainfrom
darion-yaphet:refactor/split-init-pr6
Open

refactor: move preset command handlers to presets/_commands.py (PR-6/8)#2826
darion-yaphet wants to merge 2 commits into
github:mainfrom
darion-yaphet:refactor/split-init-pr6

Conversation

@darion-yaphet
Copy link
Copy Markdown
Contributor

Summary

PR-6 of the __init__.py split (continues PR-5's integration co-location). Moves the preset command group out of src/specify_cli/__init__.py into a co-located presets/_commands.py, trimming __init__.py toward a thin registration layer.

Two commits:

  1. presets.pypresets/ package — pure structural move so command handlers can live beside the preset domain logic (mirrors integrations/). presets.py becomes presets/__init__.py; package-relative imports rebased one level deeper. Public import surface (from specify_cli.presets import ...) unchanged.
  2. Move handlers to presets/_commands.py — the preset_app / preset_catalog_app Typer groups and all 12 handlers (list, add, remove, search, resolve, info, set-priority, enable, disable, catalog list/add/remove) move out; __init__.py registers them via _register_preset_cmds(app).

__init__.py drops ~620 lines in the preset region.

Design notes

  • Handlers lazy-import root helpers (_require_specify_project, get_speckit_version, _locate_bundled_preset, _display_project_path) via from .. import inside each function, so test monkeypatching of specify_cli.<helper> keeps working — same pattern PR-5 used.
  • _locate_bundled_preset kept as an explicit re-export in __init__.py for that resolution path.

Test plan

  • python -c "import specify_cli" — OK
  • specify preset --help — full command surface intact
  • uvx ruff check src/ — All checks passed
  • Full suite: 3344 passed, 40 skipped
  • No patch-path updates needed (lazy imports preserve monkeypatch targets)

Pure structural move to mirror integrations/. presets.py becomes
presets/__init__.py with relative imports rebased one level deeper.
No behavior change; public import surface (from .presets import ...)
preserved. Prepares for co-locating preset command handlers in PR-6/8.
Cut the preset_app / preset_catalog_app Typer groups and all 12 command
handlers out of __init__.py into presets/_commands.py, exposing register(app)
— mirrors the integration co-location from PR-5. __init__.py now registers
via _register_preset_cmds(app), dropping ~620 lines (3282 -> 2663).

Handlers lazy-import root helpers (_require_specify_project, get_speckit_version,
_locate_bundled_preset, _display_project_path) via 'from .. import' so test
monkeypatching of specify_cli.<helper> keeps working. _locate_bundled_preset
kept as an explicit re-export in __init__.py for that resolution path.

CLI surface and public imports unchanged. Full suite: 3162 passed, 40 skipped.
@darion-yaphet darion-yaphet requested a review from mnriem as a code owner June 3, 2026 02:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant