This is an automated email from the ASF dual-hosted git repository.
potiuk 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 c199b1a105 Move Pydantic classes for ORM objects to serialization
(#30484)
c199b1a105 is described below
commit c199b1a10563a11cf24436e38cb167ae82c01601
Author: Jarek Potiuk <[email protected]>
AuthorDate: Thu Apr 6 08:44:23 2023 +0200
Move Pydantic classes for ORM objects to serialization (#30484)
The Pydantic classes are really part of the serialization
mechanism and they should be moved there, rather than kept in
the core packages they serialize, following our serialization
approach.
---
airflow/models/pydantic/__init__.py | 16 ----------------
airflow/{jobs => serialization}/pydantic/__init__.py | 0
airflow/{jobs => serialization}/pydantic/base_job.py | 2 +-
airflow/{models => serialization}/pydantic/dag_run.py | 2 +-
airflow/{models => serialization}/pydantic/dataset.py | 0
.../{models => serialization}/pydantic/taskinstance.py | 0
airflow/serialization/serialized_objects.py | 8 ++++----
pyproject.toml | 5 +----
tests/api_internal/endpoints/test_rpc_api_endpoint.py | 2 +-
tests/api_internal/test_internal_api_call.py | 2 +-
tests/{models => serialization}/test_pydantic_models.py | 8 ++++----
tests/serialization/test_serialized_objects.py | 2 +-
12 files changed, 14 insertions(+), 33 deletions(-)
diff --git a/airflow/models/pydantic/__init__.py
b/airflow/models/pydantic/__init__.py
deleted file mode 100644
index 13a83393a9..0000000000
--- a/airflow/models/pydantic/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
diff --git a/airflow/jobs/pydantic/__init__.py
b/airflow/serialization/pydantic/__init__.py
similarity index 100%
rename from airflow/jobs/pydantic/__init__.py
rename to airflow/serialization/pydantic/__init__.py
diff --git a/airflow/jobs/pydantic/base_job.py
b/airflow/serialization/pydantic/base_job.py
similarity index 95%
rename from airflow/jobs/pydantic/base_job.py
rename to airflow/serialization/pydantic/base_job.py
index bad9aeca48..a5c5556d53 100644
--- a/airflow/jobs/pydantic/base_job.py
+++ b/airflow/serialization/pydantic/base_job.py
@@ -20,7 +20,7 @@ from typing import Optional
from pydantic import BaseModel as BaseModelPydantic
-from airflow.models.pydantic.taskinstance import TaskInstancePydantic
+from airflow.serialization.pydantic.taskinstance import TaskInstancePydantic
class BaseJobPydantic(BaseModelPydantic):
diff --git a/airflow/models/pydantic/dag_run.py
b/airflow/serialization/pydantic/dag_run.py
similarity index 95%
rename from airflow/models/pydantic/dag_run.py
rename to airflow/serialization/pydantic/dag_run.py
index e2d44296b9..f7d390e731 100644
--- a/airflow/models/pydantic/dag_run.py
+++ b/airflow/serialization/pydantic/dag_run.py
@@ -20,7 +20,7 @@ from typing import List, Optional
from pydantic import BaseModel as BaseModelPydantic
-from airflow.models.pydantic.dataset import DatasetEventPydantic
+from airflow.serialization.pydantic.dataset import DatasetEventPydantic
class DagRunPydantic(BaseModelPydantic):
diff --git a/airflow/models/pydantic/dataset.py
b/airflow/serialization/pydantic/dataset.py
similarity index 100%
rename from airflow/models/pydantic/dataset.py
rename to airflow/serialization/pydantic/dataset.py
diff --git a/airflow/models/pydantic/taskinstance.py
b/airflow/serialization/pydantic/taskinstance.py
similarity index 100%
rename from airflow/models/pydantic/taskinstance.py
rename to airflow/serialization/pydantic/taskinstance.py
diff --git a/airflow/serialization/serialized_objects.py
b/airflow/serialization/serialized_objects.py
index b3d783ad69..45ef83f927 100644
--- a/airflow/serialization/serialized_objects.py
+++ b/airflow/serialization/serialized_objects.py
@@ -39,7 +39,6 @@ from airflow.configuration import conf
from airflow.datasets import Dataset
from airflow.exceptions import AirflowException, RemovedInAirflow3Warning,
SerializationError
from airflow.jobs.base_job import BaseJob
-from airflow.jobs.pydantic.base_job import BaseJobPydantic
from airflow.models.baseoperator import BaseOperator, BaseOperatorLink
from airflow.models.connection import Connection
from airflow.models.dag import DAG, create_timetable
@@ -48,9 +47,6 @@ from airflow.models.expandinput import EXPAND_INPUT_EMPTY,
ExpandInput, create_e
from airflow.models.mappedoperator import MappedOperator
from airflow.models.operator import Operator
from airflow.models.param import Param, ParamsDict
-from airflow.models.pydantic.dag_run import DagRunPydantic
-from airflow.models.pydantic.dataset import DatasetPydantic
-from airflow.models.pydantic.taskinstance import TaskInstancePydantic
from airflow.models.taskinstance import SimpleTaskInstance, TaskInstance
from airflow.models.taskmixin import DAGNode
from airflow.models.xcom_arg import XComArg, deserialize_xcom_arg,
serialize_xcom_arg
@@ -58,6 +54,10 @@ from airflow.providers_manager import ProvidersManager
from airflow.serialization.enums import DagAttributeTypes as DAT, Encoding
from airflow.serialization.helpers import serialize_template_field
from airflow.serialization.json_schema import Validator, load_dag_schema
+from airflow.serialization.pydantic.base_job import BaseJobPydantic
+from airflow.serialization.pydantic.dag_run import DagRunPydantic
+from airflow.serialization.pydantic.dataset import DatasetPydantic
+from airflow.serialization.pydantic.taskinstance import TaskInstancePydantic
from airflow.settings import DAGS_FOLDER, json
from airflow.timetables.base import Timetable
from airflow.utils.code_utils import get_python_source
diff --git a/pyproject.toml b/pyproject.toml
index 0a5f4eddb6..0568ed62f9 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -139,10 +139,7 @@ known-third-party = [
# The Pydantic representations of SqlAlchemy Models are not parsed well with
Pydantic
# when __future__.annotations is used so we need to skip them from upgrading
-"airflow/models/pydantic/taskinstance.py" = ["I002"]
-"airflow/models/pydantic/dag_run.py" = ["I002"]
-"airflow/models/pydantic/dataset.py" = ["I002"]
-"airflow/jobs/pydantic/base_job.py" = ["I002"]
+"airflow/serialization/pydantic/*.py" = ["I002"]
# Ignore pydoc style from these
"*.pyi" = ["D"]
diff --git a/tests/api_internal/endpoints/test_rpc_api_endpoint.py
b/tests/api_internal/endpoints/test_rpc_api_endpoint.py
index 9e09376dd6..39f3af7388 100644
--- a/tests/api_internal/endpoints/test_rpc_api_endpoint.py
+++ b/tests/api_internal/endpoints/test_rpc_api_endpoint.py
@@ -23,9 +23,9 @@ from unittest import mock
import pytest
from flask import Flask
-from airflow.models.pydantic.taskinstance import TaskInstancePydantic
from airflow.models.taskinstance import TaskInstance
from airflow.operators.empty import EmptyOperator
+from airflow.serialization.pydantic.taskinstance import TaskInstancePydantic
from airflow.serialization.serialized_objects import BaseSerialization
from airflow.utils.state import State
from airflow.www import app
diff --git a/tests/api_internal/test_internal_api_call.py
b/tests/api_internal/test_internal_api_call.py
index e7cd488e66..a70e5d6993 100644
--- a/tests/api_internal/test_internal_api_call.py
+++ b/tests/api_internal/test_internal_api_call.py
@@ -25,9 +25,9 @@ import pytest
import requests
from airflow.api_internal.internal_api_call import InternalApiConfig,
internal_api_call
-from airflow.models.pydantic.taskinstance import TaskInstancePydantic
from airflow.models.taskinstance import TaskInstance
from airflow.operators.empty import EmptyOperator
+from airflow.serialization.pydantic.taskinstance import TaskInstancePydantic
from airflow.serialization.serialized_objects import BaseSerialization
from airflow.utils.state import State
from tests.test_utils.config import conf_vars
diff --git a/tests/models/test_pydantic_models.py
b/tests/serialization/test_pydantic_models.py
similarity index 94%
rename from tests/models/test_pydantic_models.py
rename to tests/serialization/test_pydantic_models.py
index bc36e0cda4..d81401315c 100644
--- a/tests/models/test_pydantic_models.py
+++ b/tests/serialization/test_pydantic_models.py
@@ -20,16 +20,16 @@ from __future__ import annotations
from pydantic import parse_raw_as
from airflow.jobs.local_task_job import LocalTaskJob
-from airflow.jobs.pydantic.base_job import BaseJobPydantic
from airflow.models.dataset import (
DagScheduleDatasetReference,
DatasetEvent,
DatasetModel,
TaskOutletDatasetReference,
)
-from airflow.models.pydantic.dag_run import DagRunPydantic
-from airflow.models.pydantic.dataset import DatasetEventPydantic
-from airflow.models.pydantic.taskinstance import TaskInstancePydantic
+from airflow.serialization.pydantic.base_job import BaseJobPydantic
+from airflow.serialization.pydantic.dag_run import DagRunPydantic
+from airflow.serialization.pydantic.dataset import DatasetEventPydantic
+from airflow.serialization.pydantic.taskinstance import TaskInstancePydantic
from airflow.utils import timezone
from airflow.utils.state import State
from airflow.utils.types import DagRunType
diff --git a/tests/serialization/test_serialized_objects.py
b/tests/serialization/test_serialized_objects.py
index 7ccf16bb6a..8981cafcc4 100644
--- a/tests/serialization/test_serialized_objects.py
+++ b/tests/serialization/test_serialized_objects.py
@@ -20,9 +20,9 @@ from __future__ import annotations
import pytest
from airflow.exceptions import SerializationError
-from airflow.models.pydantic.taskinstance import TaskInstancePydantic
from airflow.models.taskinstance import TaskInstance
from airflow.operators.empty import EmptyOperator
+from airflow.serialization.pydantic.taskinstance import TaskInstancePydantic
from airflow.utils.state import State
from tests import REPO_ROOT