This is an automated email from the ASF dual-hosted git repository.

shahar1 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 8751c754116 Move SnowparkContainerJobOperator template-field 
validation to execute (#70332)
8751c754116 is described below

commit 8751c754116978732163e1f7037059efe5d6773c
Author: Justin Pakzad <[email protected]>
AuthorDate: Fri Jul 24 03:50:35 2026 -0400

    Move SnowparkContainerJobOperator template-field validation to execute 
(#70332)
---
 .../providers/snowflake/operators/snowpark_containers.py       | 10 +++++-----
 .../tests/unit/snowflake/operators/test_snowpark_containers.py |  3 ++-
 scripts/ci/prek/validate_operators_init_exemptions.txt         |  1 -
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git 
a/providers/snowflake/src/airflow/providers/snowflake/operators/snowpark_containers.py
 
b/providers/snowflake/src/airflow/providers/snowflake/operators/snowpark_containers.py
index 971be06543a..1564e57b997 100644
--- 
a/providers/snowflake/src/airflow/providers/snowflake/operators/snowpark_containers.py
+++ 
b/providers/snowflake/src/airflow/providers/snowflake/operators/snowpark_containers.py
@@ -163,11 +163,6 @@ class SnowparkContainerJobOperator(BaseOperator):
         # Set after the job is submitted, parsed from the job submission 
response.
         self.job_name: str | None = None
 
-        if self.spec_text and (self.spec or self.spec_stage):
-            raise ValueError("Cannot specify both 'spec_text' and 
'spec'/'spec_stage'")
-        if not self.spec_text and not (self.spec and self.spec_stage):
-            raise ValueError("Must provide either 'spec_text' or both 'spec' 
and 'spec_stage'")
-
     @cached_property
     def _hook(self) -> SnowflakeHook:
         return SnowflakeHook(
@@ -237,6 +232,11 @@ class SnowparkContainerJobOperator(BaseOperator):
 
     def execute(self, context: Context) -> str:
         """Submit and optionally wait for a Snowpark Container Services job."""
+        if self.spec_text and (self.spec or self.spec_stage):
+            raise ValueError("Cannot specify both 'spec_text' and 
'spec'/'spec_stage'")
+        if not self.spec_text and not (self.spec and self.spec_stage):
+            raise ValueError("Must provide either 'spec_text' or both 'spec' 
and 'spec_stage'")
+
         self.job_name = self._submit_job()
         if not self.job_name:
             raise RuntimeError("Job name was not returned")
diff --git 
a/providers/snowflake/tests/unit/snowflake/operators/test_snowpark_containers.py
 
b/providers/snowflake/tests/unit/snowflake/operators/test_snowpark_containers.py
index 3b10bfea06d..af6114f6616 100644
--- 
a/providers/snowflake/tests/unit/snowflake/operators/test_snowpark_containers.py
+++ 
b/providers/snowflake/tests/unit/snowflake/operators/test_snowpark_containers.py
@@ -72,8 +72,9 @@ class TestSnowparkContainerJobOperator:
         ),
     )
     def test_invalid_spec_combinations(self, kwargs, match):
+        op = _make_operator(**kwargs)
         with pytest.raises(ValueError, match=match):
-            _make_operator(**kwargs)
+            op.execute(context=None)
 
     def test_build_sql_with_spec_stage(self):
         op = _make_operator()
diff --git a/scripts/ci/prek/validate_operators_init_exemptions.txt 
b/scripts/ci/prek/validate_operators_init_exemptions.txt
index 3203e08b306..ebf6526cc10 100644
--- a/scripts/ci/prek/validate_operators_init_exemptions.txt
+++ b/scripts/ci/prek/validate_operators_init_exemptions.txt
@@ -72,7 +72,6 @@ 
providers/microsoft/psrp/src/airflow/providers/microsoft/psrp/operators/psrp.py:
 providers/neo4j/src/airflow/providers/neo4j/operators/neo4j.py::Neo4jOperator
 
providers/oracle/src/airflow/providers/oracle/transfers/oracle_to_oracle.py::OracleToOracleOperator
 
providers/papermill/src/airflow/providers/papermill/operators/papermill.py::PapermillOperator
-providers/snowflake/src/airflow/providers/snowflake/operators/snowpark_containers.py::SnowparkContainerJobOperator
 providers/ssh/src/airflow/providers/ssh/operators/ssh.py::SSHOperator
 
providers/ssh/src/airflow/providers/ssh/operators/ssh_remote_job.py::SSHRemoteJobOperator
 
providers/standard/src/airflow/providers/standard/operators/bash.py::BashOperator

Reply via email to