Skip to content

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

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

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

Conversation

@rlundeen2

@rlundeen2 rlundeen2 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

@rlundeen2 rlundeen2 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>
@rlundeen2 rlundeen2 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.

@rlundeen2 rlundeen2 changed the title REFACTOR: Migrate CLI to use pyrit.modes REFACTOR: Migrate CLI to use pyrit.models Jun 15, 2026
@rlundeen2

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
rlundeen2 and others added 3 commits June 22, 2026 15:49
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
@rlundeen2 rlundeen2 changed the title REFACTOR: Migrate CLI to use pyrit.models REFACTOR Breaking: Migrate CLI to use pyrit.models Jun 30, 2026
rlundeen2 and others added 4 commits June 29, 2026 18:18
…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
@rlundeen2 rlundeen2 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
@rlundeen2 rlundeen2 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