codeant-ai-for-open-source[bot] commented on code in PR #40130: URL: https://github.com/apache/superset/pull/40130#discussion_r3510302018
########## superset/migrations/versions/2026-05-08_12-10_3a8e6f2c1b95_add_deleted_at_to_tables.py: ########## @@ -0,0 +1,54 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +"""Add deleted_at column and index to tables for soft-delete. + +Adds a nullable ``deleted_at`` column and an index on it to the +``tables`` table to support soft deletion of datasets. Companion to +the ``SoftDeleteMixin`` infrastructure shipped in PR #39977. + +Revision ID: 3a8e6f2c1b95 +Revises: 78a40c08b4be +Create Date: 2026-05-08 12:10:00.000000 +""" + +from sqlalchemy import Column, DateTime + +from superset.migrations.shared.utils import ( + add_columns, + create_index, + drop_columns, + drop_index, +) + +# revision identifiers, used by Alembic. +revision = "3a8e6f2c1b95" +down_revision = "78a40c08b4be" Review Comment: ✅ **Customized review instruction saved!** **Instruction:** > Avoid flagging missing explicit type annotations for Alembic revision metadata variables in migration scripts when the types are obvious from context; keep this relaxed in one-time migration files. **Applied to:** - `**/migration*/**` --- 💡 *To manage or update this instruction, visit: [CodeAnt AI Settings](https://app.codeant.ai/org/settings/learnings)* ########## superset/datasets/filters.py: ########## @@ -51,3 +57,40 @@ def apply(self, query: Query, value: bool) -> Query: ) ) return query + + +class DatasetDeletedStateFilter( # pylint: disable=too-few-public-methods + BaseDeletedStateFilter +): + """Rison filter for the GET list that exposes soft-deleted datasets. + + Soft-deleted rows are additionally scoped to the **restore audience**: only + the dataset's owners (or admins) may enumerate them. This mirrors + ``RestoreDatasetCommand``'s ``raise_for_ownership`` check, so a read-access + non-owner (who can see the dataset via ``datasource_access``) cannot list + soft-deleted datasets they could never restore. Live rows are unaffected — + they keep their normal ``DatasourceFilter`` visibility. The ownership + scoping is part of the cross-entity deleted-state contract: only the + restore audience may enumerate soft-deleted rows (kept consistent with the + deleted-state filters in the dashboard and chart soft-delete rollouts). + """ + + arg_name = "dataset_deleted_state" + model = SqlaTable + + def apply(self, query: Query, value: Any) -> Query: + query = super().apply(query, value) + normalized = str(value).lower().strip() if value is not None else "" Review Comment: ✅ **Customized review instruction saved!** **Instruction:** > Do not require explicit type annotations for clearly derived local variables in Python when the type is unambiguous from context, including local/test-scaffolding variables. **Applied to:** - `**/*.py` --- 💡 *To manage or update this instruction, visit: [CodeAnt AI Settings](https://app.codeant.ai/org/settings/learnings)* ########## tests/integration_tests/datasets/api_tests.py: ########## @@ -191,19 +193,34 @@ def create_virtual_datasets(self): @pytest.fixture def create_datasets(self): with self.create_app().app_context(): + # Purge any soft-deleted rows that occupy the unique constraint + stale = self.get_fixture_datasets() Review Comment: ✅ **Customized review instruction saved!** **Instruction:** > Do not flag missing explicit type annotations for local/test-scaffolding variables in test files when the type is already unambiguous from context and adding annotations would only add noise. **Applied to:** - `**/test/**` - `**/tests/**` - `**/*test*.<ext>` --- 💡 *To manage or update this instruction, visit: [CodeAnt AI Settings](https://app.codeant.ai/org/settings/learnings)* ########## superset/migrations/versions/2026-05-08_12-10_3a8e6f2c1b95_add_deleted_at_to_tables.py: ########## @@ -0,0 +1,54 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +"""Add deleted_at column and index to tables for soft-delete. + +Adds a nullable ``deleted_at`` column and an index on it to the +``tables`` table to support soft deletion of datasets. Companion to +the ``SoftDeleteMixin`` infrastructure shipped in PR #39977. + +Revision ID: 3a8e6f2c1b95 +Revises: 78a40c08b4be +Create Date: 2026-05-08 12:10:00.000000 +""" + +from sqlalchemy import Column, DateTime + +from superset.migrations.shared.utils import ( + add_columns, + create_index, + drop_columns, + drop_index, +) + +# revision identifiers, used by Alembic. +revision = "3a8e6f2c1b95" +down_revision = "78a40c08b4be" + +TABLE_NAME = "tables" +INDEX_NAME = f"ix_{TABLE_NAME}_deleted_at" Review Comment: ✅ **Customized review instruction saved!** **Instruction:** > Do not require explicit type annotations for obvious module-level string constants in Alembic migration files when the types are already unambiguous and the annotations would add noise. **Applied to:** - `**/migration*/**` --- 💡 *To manage or update this instruction, visit: [CodeAnt AI Settings](https://app.codeant.ai/org/settings/learnings)* -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
