GeezerVison is showing github.com — feat(cli): Add `feast projects delete` command by mailtoboggavarapu-coder · Pull Request #6302 · feast-dev/feast
Conversation
Summary
Closes #5095
Exposes project deletion through the CLI by adding a new feast projects delete <name> subcommand to the existing projects group.
What's changed
Added project_delete command to sdk/python/feast/cli/projects.py:
Usage: feast projects delete [OPTIONS] NAME
Delete a project and all its resources from the registry.
This removes the project entry from the registry. Individual objects
(feature views, entities, data sources) that belong to the project
are also purged when commit=True (the default).
Options:
-y, --yes Skip confirmation prompt and delete immediately.
--help Show this message and exit.
Design notes
- Uses
store._registry.delete_project(name, commit=True) directly since FeatureStore does not yet expose a delete_project public method (the abstract method exists in BaseRegistry and is implemented in all concrete registries)
- Adds an interactive confirmation prompt with
click.confirm — can be skipped with --yes / -y for scripting
- Raises
SystemExit(1) on FeastObjectNotFoundException to match the pattern used by describe
Example
# Interactive (prompts for confirmation)
feast projects delete my-project
# Non-interactive
feast projects delete my-project --yes
Checklist
- Added
delete command to projects_cmd group
- Confirmation prompt with
--yes bypass flag
- Error handling for non-existent projects
- Follows existing CLI patterns in
projects.py
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
Hi team! 👋
This adds the feast projects delete CLI command requested in #5095.
The implementation directly calls store._registry.delete_project() since the abstract method is already fully implemented in all concrete registries (SQL, file, GCS, etc.) — there just wasn't a CLI surface for it yet.
A few design choices I'd love feedback on:
- Confirmation prompt — I added an interactive
click.confirm that can be bypassed with --yes/-y. Is this the right UX, or would you prefer a different safety mechanism?
- Registry access — I call
store._registry.delete_project() directly since there's no public FeatureStore.delete_project() method yet. Happy to add a public wrapper on FeatureStore if that's preferred.
Would appreciate a review when you get a chance! Happy to adjust based on feedback. 🙏
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
This comment was marked as resolved.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
Thanks for the thorough review, @devin-ai-integration!
Fix applied in the latest commit:
- Imported
ProjectNotFoundException from feast.errors
- Updated the
except clause to catch both FeastObjectNotFoundException and ProjectNotFoundException, since registry implementations raise the latter when a project does not exist.
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
Hi team! 👋 Friendly ping on this PR adding feast projects delete CLI command. Happy to address any feedback!
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
Hi team! 👋 Friendly ping on this PR adding feast projects delete CLI command (issue #5095). Happy to address any feedback!
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
ntkathole
changed the title
feat(cli): add feast projects delete command
feat(cli): Add feast projects delete command
Apr 22, 2026
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
This comment was marked as resolved.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
Hi team! Checking in on this PR adding the feast projects delete CLI command. The branch has been updated with the latest from master. Let me know if you'd like any changes!
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Exposes project deletion via the CLI. The new `feast projects delete <name>`
command calls `store._registry.delete_project()` which is already implemented
in all concrete registries. Adds an interactive confirmation prompt that can
be bypassed with --yes/-y for scripted workflows.
- Adds type guard (`assert store._registry is not None`) for mypy.
- Catches both FeastObjectNotFoundException and ProjectNotFoundException so
the CLI exits cleanly (exit code 1) for either variant raised by concrete
registry implementations.
Squashed history: this commit consolidates the previous unsigned commits on
the branch into a single DCO-signed commit, per DCO requirements.
Signed-off-by: Venkateswarlu Boggavarapu <[email protected]>
|
Hi @ntkathole — thanks for the nudge! The PR checks have now been addressed:
- DCO: The branch has been rebased onto the latest
master and squashed into a single DCO-signed commit (Signed-off-by: Venkateswarlu Boggavarapu <[email protected]>). DCO is now ✅ passing.
- Lint / ruff: The
projects.py changes pass ruff format --check and ruff check locally. The integration/unit-test lanes are currently gated skipped on this PR (path filters), but the code itself is formatter-clean.
- mypy: The
store._registry is not None guard was already added in the previous round to satisfy the union-attr error.
Ready for another look whenever you have time — thanks again!
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
…t_delete
store._registry is always None until accessed via the lazy-init registry
property. Using store._registry directly caused project_delete to always
crash with an AssertionError.
Fixes: Devin Review finding in feast-dev#6302
Signed-off-by: Venkateswarlu Boggavarapu <[email protected]>
|
Thanks for the Devin review! Fixed the store._registry crash in the latest commit:
- Removed the
assert store._registry is not None guard (would always fail)
- Changed
store._registry.delete_project(...) → store.registry.delete_project(...) to use the lazy-init property
The registry property in feature_store.py handles initialization on first access, so this now works correctly.
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
Closing this PR in favour of #6318 which has a clean single-commit history with a properly matched DCO sign-off (author name = Signed-off-by name). The DCO check was failing here because one commit had mailtoboggavarapu-coder as the git author name while the Signed-off-by said Venkateswarlu Boggavarapu. PR #6318 fixes this with a fresh single commit. All the same changes are included.
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Assignees
No one assigned
Milestone
No milestone
Development
Successfully merging this pull request may close these issues.
Expose project deletion to CLI
Uh oh!
There was an error while loading. Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
|