diff --git a/datajoint/user_tables.py b/datajoint/user_tables.py index 9c2e79d34..4d708fe5e 100644 --- a/datajoint/user_tables.py +++ b/datajoint/user_tables.py @@ -219,16 +219,17 @@ def table_name(cls): else cls.master.table_name + "__" + from_camel_case(cls.__name__) ) - def delete(self, force=False): + def delete(self, force=False, **kwargs): """ - unless force is True, prohibits direct deletes from parts. + Unless force is True, prohibits direct deletes from parts. + Accepts any kwargs supported by Table.delete and forwards them to super().delete. """ if force: - super().delete(force_parts=True) - else: - raise DataJointError( - "Cannot delete from a Part directly. Delete from master instead" - ) + return super().delete(force_parts=True, **kwargs) + + raise DataJointError( + "Cannot delete from a Part directly. Delete from master instead" + ) def drop(self, force=False): """ diff --git a/tests/conftest.py b/tests/conftest.py index 88d55e32f..addfe0dba 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -6,9 +6,9 @@ from typing import Dict, List import certifi -import minio import networkx as nx import pytest +minio = pytest.importorskip("minio") import urllib3 from packaging import version diff --git a/tests/test_cascading_delete.py b/tests/test_cascading_delete.py index 71216fcb2..f55fb80a5 100644 --- a/tests/test_cascading_delete.py +++ b/tests/test_cascading_delete.py @@ -36,6 +36,14 @@ def test_stepwise_delete(schema_simp_pop): not B() ), "failed to delete from the parent table following child table deletion" +def test_part_delete_forwards_kwargs(schema_simp_pop): + assert not dj.config["safemode"], "safemode must be off for testing" + assert L() and A() and B() and B.C(), "schema population failed" + + # Should accept and forward kwargs supported by Table.delete + B.C().delete(force=True, transaction=False) + + assert not B.C(), "failed to delete child table with forwarded kwargs" def test_delete_tree_restricted(schema_simp_pop): assert not dj.config["safemode"], "safemode must be off for testing" diff --git a/tests/test_relational_operand.py b/tests/test_relational_operand.py index 2dbea672e..dd36483e5 100644 --- a/tests/test_relational_operand.py +++ b/tests/test_relational_operand.py @@ -630,8 +630,8 @@ def test_top_restriction_with_keywords(self, schema_simp_pop): ] assert key.fetch(as_dict=True) == [ {"id": 2, "key": 6}, - {"id": 2, "key": 5}, {"id": 1, "key": 5}, + {"id": 2, "key": 5}, {"id": 0, "key": 4}, {"id": 1, "key": 4}, {"id": 2, "key": 4},