From 322969979d7e828d300374fb58e442ac9f55ac5d Mon Sep 17 00:00:00 2001 From: Stuart Wheaton Date: Fri, 21 Feb 2025 21:53:33 -0500 Subject: [PATCH] disallow DOS set_queued in remote mode --- fiftyone/factory/repos/delegated_operation.py | 4 +++ tests/unittests/operators/delegated_tests.py | 28 ++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/fiftyone/factory/repos/delegated_operation.py b/fiftyone/factory/repos/delegated_operation.py index 6e4e7f4c849..48344214919 100644 --- a/fiftyone/factory/repos/delegated_operation.py +++ b/fiftyone/factory/repos/delegated_operation.py @@ -331,6 +331,10 @@ def update_run_state( } } elif run_state == ExecutionRunState.QUEUED: + if self.is_remote: + raise PermissionError( + "Cannot set queued run_state in remote context" + ) update = { "$set": { "run_state": run_state, diff --git a/tests/unittests/operators/delegated_tests.py b/tests/unittests/operators/delegated_tests.py index a6496ce0b72..58bc5751195 100644 --- a/tests/unittests/operators/delegated_tests.py +++ b/tests/unittests/operators/delegated_tests.py @@ -1344,15 +1344,41 @@ def test_queue_op_remote_service( self, mock_is_remote_service, mock_get_operator, mock_operator_exists ): db = delegated_operation.MongoDelegatedOperationRepo() + self.assertTrue(db.is_remote) dos = DelegatedOperationService(repo=db) ctx = ExecutionContext() ctx.request_params = {"foo": "bar"} + + ##### doc = dos.queue_operation( operator="@voxelfiftyone/operator/foo", label=mock_get_operator.return_value.name, delegation_target="test_target", context=ctx.serialize(), ) + ##### + self.docs_to_delete.append(doc) - self.assertTrue(db.is_remote) self.assertEqual(doc.run_state, ExecutionRunState.SCHEDULED) + + @patch.object( + delegated_operation, + "is_remote_service", + return_value=True, + ) + def test_set_queue_remote_service( + self, + mock_is_remote_service, + mock_get_operator, + mock_operator_exists, + ): + mock_is_remote_service.return_value = True + db = delegated_operation.MongoDelegatedOperationRepo() + self.assertTrue(db.is_remote) + dos = DelegatedOperationService(repo=db) + + op_id = bson.ObjectId() + + ##### + self.assertRaises(PermissionError, dos.set_queued, op_id) + #####