Skip to content

REFACTOR Breaking: Migrate CLI to use pyrit.models - #1997

Merged
Richard Lundeen (richlundeen) merged 9 commits into
microsoft:mainfrom
richlundeen:rlundeen2/phase-16-pyrit-models-plan
Jun 30, 2026
Merged

REFACTOR Breaking: Migrate CLI to use pyrit.models#1997
Richard Lundeen (richlundeen) merged 9 commits into
microsoft:mainfrom
richlundeen:rlundeen2/phase-16-pyrit-models-plan

Conversation

@richlundeen

@richlundeen Richard Lundeen (richlundeen) commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

This PR migrates the CLI to use pyrit.models (now that it is a lot thinner) instead of dictionaries.

Also, this PR adds pyrit/models/catalog package (target, scenario, initializer) as the canonical typed catalog models - there were previously defined in the backend, but are needed by the API and are not presentation specific.

This is phase 16 of this pyrit.models plan: https://gist.github.com/rlundeen2/3e8daa8e12a11b4b6e52587b3c9b1dca

@richlundeen
Richard Lundeen (richlundeen) force-pushed the rlundeen2/phase-16-pyrit-models-plan branch from ed441d2 to 37b5cfb Compare June 12, 2026 21:23
…hase 16)

Add pyrit/models/catalog package (target, scenario, initializer) as the canonical typed catalog models. Rewrite the CLI api_client and output to consume typed objects instead of dict[str, Any] payloads, and update backend mappers/routes/services plus tests to import the canonical types. Remove backend re-export shims so backend models hold only REST framing types.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@richlundeen
Richard Lundeen (richlundeen) force-pushed the rlundeen2/phase-16-pyrit-models-plan branch from 37b5cfb to e72af5f Compare June 12, 2026 21:56
@romanlutz

Copy link
Copy Markdown
Contributor

The title and description both say pyrit.modes somehow which is confusing me. You meant models I think (?) but it's consistent enough that I want to get that clarified first.

@richlundeen Richard Lundeen (richlundeen) changed the title REFACTOR: Migrate CLI to use pyrit.modes REFACTOR: Migrate CLI to use pyrit.models Jun 15, 2026
@richlundeen

Copy link
Copy Markdown
Contributor Author

The title and description both say pyrit.modes somehow which is confusing me. You meant models I think (?) but it's consistent enough that I want to get that clarified first.

Yep, meant to be models, sorry!

…rit-models-plan

# Conflicts:
#	pyrit/backend/mappers/target_mappers.py
#	pyrit/backend/routes/scenarios.py
#	pyrit/cli/_output.py
#	pyrit/cli/api_client.py
#	tests/unit/cli/test_output.py
Comment thread pyrit/models/catalog/__init__.py Outdated
Comment thread pyrit/models/catalog/target.py
Comment thread pyrit/models/catalog/target.py Outdated
Co-authored-by: hannahwestra25 <hannahwestra@microsoft.com>
…rit-models-plan

# Conflicts:
#	pyrit/backend/routes/scenarios.py
#	pyrit/cli/_output.py
#	tests/unit/backend/test_scenario_run_service.py
#	tests/unit/cli/test_output.py
Mirrors the target.py fix: these catalog models ARE the FastAPI REST

response models, so Field(..., description=...) belongs on them and surfaces

in the OpenAPI schema. Removes the misleading docstring claim that

descriptions live in the backend layer.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comment thread pyrit/backend/models/__init__.py
Comment thread pyrit/backend/models/scenarios.py
Comment thread pyrit/cli/pyrit_scan.py Outdated
Comment thread pyrit/cli/pyrit_scan.py Outdated
Comment thread pyrit/cli/pyrit_shell.py Outdated
Comment thread pyrit/cli/pyrit_shell.py Outdated
Comment thread pyrit/cli/pyrit_scan.py
@richlundeen Richard Lundeen (richlundeen) changed the title REFACTOR: Migrate CLI to use pyrit.models REFACTOR Breaking: Migrate CLI to use pyrit.models Jun 30, 2026
…s in CLI

Addresses PR review: when GET /scenarios/runs/{id}/results fails to fetch or

deserialize (e.g. a malformed server payload), the CLI now prints a serious

error and surfaces the exception (via _print_cli_exception, with a DEBUG

traceback) instead of silently falling back to the summary. Also replaces

string status literals with ScenarioRunState enum comparisons in pyrit_scan

and pyrit_shell (lazy-imported at point-of-use to keep the --help import

path free of pyrit.models per the CLI import guards).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
A COMPLETED run whose detailed results cannot be fetched or deserialized

now returns exit code 1 (after loudly surfacing the error) instead of 0,

so scripts and CI see a non-zero status. Updates the test harness to

exercise the real results happy path and renames the failure-path test.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… defaults

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…rit-models-plan

# Conflicts:
#	pyrit/cli/_cli_args.py
#	pyrit/cli/pyrit_scan.py
Comment thread pyrit/cli/pyrit_shell.py
@richlundeen
Richard Lundeen (richlundeen) added this pull request to the merge queue Jun 30, 2026
Merged via the queue into microsoft:main with commit f08ea83 Jun 30, 2026
53 checks passed
@richlundeen
Richard Lundeen (richlundeen) deleted the rlundeen2/phase-16-pyrit-models-plan branch June 30, 2026 21:07
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.

4 participants