From 741a75fe4ec5579f9315e8df3cdbe7d327c7cfbc Mon Sep 17 00:00:00 2001 From: Dr Alex Mitre <30060514+mitre88@users.noreply.github.com> Date: Mon, 27 Jul 2026 09:44:53 -0600 Subject: [PATCH] Use ValueError when no ArangoDB collection operation is specified Calling ArangoDBCollectionOperator without any operation is an input-validation error, so it should not raise the broad AirflowException the community is actively reducing. Follows the clean-up pattern of #66279. --- generated/known_airflow_exceptions.txt | 1 - .../airflow/providers/arangodb/operators/arangodb.py | 4 ++-- .../tests/unit/arangodb/operators/test_arangodb.py | 12 ++++++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/generated/known_airflow_exceptions.txt b/generated/known_airflow_exceptions.txt index 1fb461854905d..a32d9a35799b5 100644 --- a/generated/known_airflow_exceptions.txt +++ b/generated/known_airflow_exceptions.txt @@ -147,7 +147,6 @@ providers/apache/pinot/src/airflow/providers/apache/pinot/hooks/pinot.py::1 providers/apache/spark/src/airflow/providers/apache/spark/hooks/spark_sql.py::2 providers/apache/spark/src/airflow/providers/apache/spark/hooks/spark_submit.py::10 providers/arangodb/src/airflow/providers/arangodb/hooks/arangodb.py::9 -providers/arangodb/src/airflow/providers/arangodb/operators/arangodb.py::1 providers/atlassian/jira/src/airflow/providers/atlassian/jira/hooks/jira.py::1 providers/celery/src/airflow/providers/celery/executors/celery_executor_utils.py::2 providers/celery/src/airflow/providers/celery/executors/default_celery.py::2 diff --git a/providers/arangodb/src/airflow/providers/arangodb/operators/arangodb.py b/providers/arangodb/src/airflow/providers/arangodb/operators/arangodb.py index 06273f486c4db..a2bf3a164e033 100644 --- a/providers/arangodb/src/airflow/providers/arangodb/operators/arangodb.py +++ b/providers/arangodb/src/airflow/providers/arangodb/operators/arangodb.py @@ -21,7 +21,7 @@ from typing import TYPE_CHECKING, Any from airflow.providers.arangodb.hooks.arangodb import ArangoDBHook -from airflow.providers.common.compat.sdk import AirflowException, BaseOperator +from airflow.providers.common.compat.sdk import BaseOperator if TYPE_CHECKING: from airflow.providers.common.compat.sdk import Context @@ -112,7 +112,7 @@ def execute(self, context: Context): self.delete_collection, ] ): - raise AirflowException("At least one operation must be specified.") + raise ValueError("At least one operation must be specified.") if self.documents_to_insert: self.log.info( diff --git a/providers/arangodb/tests/unit/arangodb/operators/test_arangodb.py b/providers/arangodb/tests/unit/arangodb/operators/test_arangodb.py index 9963f007a384a..87f87167c073b 100644 --- a/providers/arangodb/tests/unit/arangodb/operators/test_arangodb.py +++ b/providers/arangodb/tests/unit/arangodb/operators/test_arangodb.py @@ -18,6 +18,8 @@ from unittest import mock +import pytest + from airflow.providers.arangodb.operators.arangodb import AQLOperator, ArangoDBCollectionOperator @@ -47,3 +49,13 @@ def test_insert_documents(self, mock_hook): op.execute(mock.MagicMock()) mock_hook.assert_called_once_with(arangodb_conn_id="arangodb_default") mock_hook.return_value.insert_documents.assert_called_once_with("students", documents_to_insert) + + @mock.patch("airflow.providers.arangodb.operators.arangodb.ArangoDBHook") + def test_no_operation_fails(self, mock_hook): + op = ArangoDBCollectionOperator( + task_id="noop_task", + collection_name="students", + ) + with pytest.raises(ValueError, match="At least one operation must be specified."): + op.execute(mock.MagicMock()) + mock_hook.return_value.insert_documents.assert_not_called()