From 47666cfd83de928c8c753fe891e4c4b9cf3cb4a6 Mon Sep 17 00:00:00 2001 From: sarpit2907 Date: Wed, 7 Jan 2026 17:25:29 +0530 Subject: [PATCH 1/3] tests: fix expected ordering in relational_operand (#1205) --- tests/test_relational_operand.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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}, From e0089998653591e28a4a8af72b902e9fdf19c14e Mon Sep 17 00:00:00 2001 From: sarpit2907 Date: Wed, 7 Jan 2026 17:41:42 +0530 Subject: [PATCH 2/3] tests: skip minio-dependent tests when minio is not installed --- tests/conftest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 92bc5576673f398cf9847b293e023b0ed996194a Mon Sep 17 00:00:00 2001 From: sarpit2907 Date: Wed, 7 Jan 2026 18:51:25 +0530 Subject: [PATCH 3/3] Part.delete: forward kwargs to super.delete --- datajoint/user_tables.py | 15 ++++++++------- tests/test_cascading_delete.py | 8 ++++++++ 2 files changed, 16 insertions(+), 7 deletions(-) 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/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"