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 b3014293344 Raise the datamodel-code-generator floor for the codegen
toolchain (#70670)
b3014293344 is described below
commit b3014293344d7e0fdce8bc62e9b6bb97c39baca2
Author: Jarek Potiuk <[email protected]>
AuthorDate: Thu Jul 30 08:29:39 2026 +0200
Raise the datamodel-code-generator floor for the codegen toolchain (#70670)
* Raise the datamodel-code-generator floor for the codegen toolchain
The codegen dependency groups pinned datamodel-code-generator==0.41.0. A
number of published advisories affect releases in that range; the highest
fix floor among them is 0.64.0, so require >=0.71.0 to resolve clear of
all of them with headroom rather than landing on the boundary release.
The newer generator no longer emits a spurious "= None" default for
fields the OpenAPI spec lists as required but nullable, so the
regenerated models now match the spec instead of silently accepting
payloads that omit those fields. This is a client-side rendering change
only -- no schema, route, or API version is touched, so no Cadwyn
migration is involved. Test fixtures that relied on the old leniency now
pass those fields explicitly; two of them were silently dropping a value
by passing "schema_=" rather than the "schema" alias.
* Carry the regenerated model shape into the remaining call sites
The regenerated models drop the implicit `= None` for spec-required nullable
fields, so every construction has to name them. Three test call sites and
the
TypeScript SDK's generated types were still relying on the old leniency.
The fernet-key rotation test is a third instance of the `schema_=` mistake
the
generator's leniency used to hide: the value was being dropped, not passed.
`ts-sdk/src/generated/supervisor.ts` derives from the same supervisor schema
snapshot, so it moves with it.
---
.../airflow/api_fastapi/execution_api/AGENTS.md | 4 +-
.../cli/commands/test_rotate_fernet_key_command.py | 2 +-
.../tests/unit/dag_processing/test_processor.py | 8 +
airflow-ctl/pyproject.toml | 2 +-
.../airflowctl/api/datamodels/auth_generated.py | 2 +-
.../src/airflowctl/api/datamodels/generated.py | 391 ++++++++--------
.../tests/airflow_ctl/api/test_operations.py | 115 ++++-
.../ctl/commands/test_connections_command.py | 4 +-
.../airflow_ctl/ctl/commands/test_dag_command.py | 9 +
.../airflow_ctl/ctl/commands/test_task_command.py | 16 +
.../ctl/commands/test_variable_command.py | 5 +-
devel-common/src/tests_common/pytest_plugin.py | 3 +
.../tests/unit/amazon/aws/hooks/test_base_aws.py | 6 +
.../unit/openlineage/plugins/test_listener.py | 14 +-
task-sdk/pyproject.toml | 2 +-
.../src/airflow/sdk/api/datamodels/_generated.py | 106 ++---
.../airflow/sdk/execution_time/schema/schema.json | 494 +++++++++++----------
task-sdk/tests/conftest.py | 2 +
task-sdk/tests/task_sdk/api/test_client.py | 14 +
task-sdk/tests/task_sdk/bases/test_hook.py | 2 +
.../tests/task_sdk/definitions/test_connection.py | 11 +-
.../execution_time/test_callback_supervisor.py | 22 +-
.../tests/task_sdk/execution_time/test_comms.py | 1 +
.../tests/task_sdk/execution_time/test_context.py | 50 ++-
.../task_sdk/execution_time/test_context_cache.py | 17 +-
.../tests/task_sdk/execution_time/test_secrets.py | 3 +
.../task_sdk/execution_time/test_supervisor.py | 80 +++-
.../task_sdk/execution_time/test_task_runner.py | 9 +
ts-sdk/src/generated/supervisor.ts | 194 ++++----
uv.lock | 17 +-
30 files changed, 969 insertions(+), 636 deletions(-)
diff --git a/airflow-core/src/airflow/api_fastapi/execution_api/AGENTS.md
b/airflow-core/src/airflow/api_fastapi/execution_api/AGENTS.md
index aff91c070d9..4cacd2368ba 100644
--- a/airflow-core/src/airflow/api_fastapi/execution_api/AGENTS.md
+++ b/airflow-core/src/airflow/api_fastapi/execution_api/AGENTS.md
@@ -16,7 +16,7 @@ Workers and API servers deploy independently, so backward
compatibility is criti
3. Regenerate Task SDK models:
```bash
-cd task-sdk && python dev/generate_task_sdk_models.py
+uv run --active --group codegen --project apache-airflow-task-sdk --directory
task-sdk -s dev/generate_task_sdk_models.py
```
4. Add tests for both the new and previous API versions.
@@ -44,7 +44,7 @@ Adding a new Execution API feature touches multiple packages.
All of these must
5. **Task SDK client** — add the client method in
`task-sdk/src/airflow/sdk/api/client.py`.
6. **Supervisor** — handle the new message in
`task-sdk/src/airflow/sdk/execution_time/supervisor.py`.
7. **Dag processor & triggerer exclusions** — these use
`InProcessExecutionAPI` and have explicit message type unions. Add new types to
their handler or exclusion lists in `airflow/dag_processing/processor.py` and
`airflow/jobs/triggerer_job_runner.py`.
-8. **Regenerate models** — `cd task-sdk && python
dev/generate_task_sdk_models.py`.
+8. **Regenerate models** — `uv run --active --group codegen --project
apache-airflow-task-sdk --directory task-sdk -s
dev/generate_task_sdk_models.py`.
9. **Tests** — if the new message type requires an API endpoint, add tests in
all of these:
- `airflow-core/tests/unit/api_fastapi/execution_api/` — endpoint tests
- `task-sdk/tests/task_sdk/api/test_client.py` — client method tests
diff --git
a/airflow-core/tests/unit/cli/commands/test_rotate_fernet_key_command.py
b/airflow-core/tests/unit/cli/commands/test_rotate_fernet_key_command.py
index b2c5ad1b140..ec661a156f2 100644
--- a/airflow-core/tests/unit/cli/commands/test_rotate_fernet_key_command.py
+++ b/airflow-core/tests/unit/cli/commands/test_rotate_fernet_key_command.py
@@ -123,7 +123,7 @@ class TestRotateFernetKeyCommand:
host=conn.host,
login=conn.login,
password=conn.password,
- schema_=conn.schema,
+ schema=conn.schema,
port=conn.port,
extra=conn.extra,
)
diff --git a/airflow-core/tests/unit/dag_processing/test_processor.py
b/airflow-core/tests/unit/dag_processing/test_processor.py
index dd7f603b35b..776dec298f0 100644
--- a/airflow-core/tests/unit/dag_processing/test_processor.py
+++ b/airflow-core/tests/unit/dag_processing/test_processor.py
@@ -2211,6 +2211,10 @@ class TestDagFileProcessorProcess:
conn_type="mysql",
password="super-secret-password",
extra='{"api_key":"super-secret-extra"}',
+ host=None,
+ schema=None,
+ login=None,
+ port=None,
)
with (
@@ -2241,6 +2245,10 @@ class TestDagFileProcessorProcess:
"conn_type": "mysql",
"password": "super-secret-password",
"extra": '{"api_key":"super-secret-extra"}',
+ "host": None,
+ "schema": None,
+ "login": None,
+ "port": None,
"type": "ConnectionResult",
}
diff --git a/airflow-ctl/pyproject.toml b/airflow-ctl/pyproject.toml
index 69433597179..170b637cf85 100644
--- a/airflow-ctl/pyproject.toml
+++ b/airflow-ctl/pyproject.toml
@@ -149,7 +149,7 @@ dev = [
"apache-airflow-devel-common",
]
codegen = [
- "datamodel-code-generator[http]==0.41.0",
+ "datamodel-code-generator[http]>=0.71.0",
"apache-airflow-devel-common"
]
diff --git a/airflow-ctl/src/airflowctl/api/datamodels/auth_generated.py
b/airflow-ctl/src/airflowctl/api/datamodels/auth_generated.py
index e8f12b9baef..9204ee0c583 100644
--- a/airflow-ctl/src/airflowctl/api/datamodels/auth_generated.py
+++ b/airflow-ctl/src/airflowctl/api/datamodels/auth_generated.py
@@ -1,6 +1,6 @@
# generated by datamodel-codegen:
# filename: v2-simple-auth-manager-generated.yaml
-# version: 0.41.0
+# version: 0.71.0
from __future__ import annotations
diff --git a/airflow-ctl/src/airflowctl/api/datamodels/generated.py
b/airflow-ctl/src/airflowctl/api/datamodels/generated.py
index a009679da6a..a4b7f60fdaf 100644
--- a/airflow-ctl/src/airflowctl/api/datamodels/generated.py
+++ b/airflow-ctl/src/airflowctl/api/datamodels/generated.py
@@ -1,6 +1,6 @@
# generated by datamodel-codegen:
# filename: v2-rest-api-generated.yaml
-# version: 0.41.0
+# version: 0.71.0
from __future__ import annotations
@@ -135,7 +135,7 @@ class BaseInfoResponse(BaseModel):
Base info serializer for responses.
"""
- status: Annotated[str | None, Field(title="Status")] = None
+ status: Annotated[str | None, Field(title="Status")]
class BulkActionNotOnExistence(str, Enum):
@@ -262,8 +262,8 @@ class ClearPartitionsResponse(BaseModel):
dry_run: Annotated[bool, Field(title="Dry Run")]
-class TaskIds(RootModel[list[Any]]):
- root: Annotated[list[Any], Field(max_length=2, min_length=2)]
+class TaskIds(RootModel[tuple[str, int]]):
+ root: Annotated[tuple[str, int], Field(max_length=2, min_length=2)]
class ClearTaskInstancesBody(BaseModel):
@@ -303,8 +303,8 @@ class ClearTaskInstancesBody(BaseModel):
note: Annotated[Note | None, Field(title="Note")] = None
-class Value(RootModel[list[Any]]):
- root: Annotated[list[Any], Field(max_length=2, min_length=2,
title="Value")]
+class Value(RootModel[tuple[str, str]]):
+ root: Annotated[tuple[str, str], Field(max_length=2, min_length=2,
title="Value")]
class ConfigOption(BaseModel):
@@ -362,14 +362,14 @@ class ConnectionResponse(BaseModel):
connection_id: Annotated[str, Field(title="Connection Id")]
conn_type: Annotated[str, Field(title="Conn Type")]
- description: Annotated[str | None, Field(title="Description")] = None
- host: Annotated[str | None, Field(title="Host")] = None
- login: Annotated[str | None, Field(title="Login")] = None
- schema_: Annotated[str | None, Field(alias="schema", title="Schema")] =
None
- port: Annotated[int | None, Field(title="Port")] = None
- password: Annotated[str | None, Field(title="Password")] = None
- extra: Annotated[str | None, Field(title="Extra")] = None
- team_name: Annotated[str | None, Field(title="Team Name")] = None
+ description: Annotated[str | None, Field(title="Description")]
+ host: Annotated[str | None, Field(title="Host")]
+ login: Annotated[str | None, Field(title="Login")]
+ schema_: Annotated[str | None, Field(alias="schema", title="Schema")]
+ port: Annotated[int | None, Field(title="Port")]
+ password: Annotated[str | None, Field(title="Password")]
+ extra: Annotated[str | None, Field(title="Extra")]
+ team_name: Annotated[str | None, Field(title="Team Name")]
class ConnectionTestQueuedResponse(BaseModel):
@@ -492,9 +492,9 @@ class DAGSourceResponse(BaseModel):
Dag Source serializer for responses.
"""
- content: Annotated[str | None, Field(title="Content")] = None
+ content: Annotated[str | None, Field(title="Content")]
dag_id: Annotated[str, Field(title="Dag Id")]
- version_number: Annotated[int | None, Field(title="Version Number")] = None
+ version_number: Annotated[int | None, Field(title="Version Number")]
dag_display_name: Annotated[str, Field(title="Dag Display Name")]
@@ -512,10 +512,8 @@ class DagProcessorInfoResponse(BaseModel):
DagProcessor info serializer for responses.
"""
- status: Annotated[str | None, Field(title="Status")] = None
- latest_dag_processor_heartbeat: Annotated[str | None, Field(title="Latest
Dag Processor Heartbeat")] = (
- None
- )
+ status: Annotated[str | None, Field(title="Status")]
+ latest_dag_processor_heartbeat: Annotated[str | None, Field(title="Latest
Dag Processor Heartbeat")]
class DagRunAssetReference(BaseModel):
@@ -528,13 +526,13 @@ class DagRunAssetReference(BaseModel):
)
run_id: Annotated[str, Field(title="Run Id")]
dag_id: Annotated[str, Field(title="Dag Id")]
- logical_date: Annotated[datetime | None, Field(title="Logical Date")] =
None
+ logical_date: Annotated[datetime | None, Field(title="Logical Date")]
start_date: Annotated[datetime, Field(title="Start Date")]
- end_date: Annotated[datetime | None, Field(title="End Date")] = None
+ end_date: Annotated[datetime | None, Field(title="End Date")]
state: Annotated[str, Field(title="State")]
- data_interval_start: Annotated[datetime | None, Field(title="Data Interval
Start")] = None
- data_interval_end: Annotated[datetime | None, Field(title="Data Interval
End")] = None
- partition_key: Annotated[str | None, Field(title="Partition Key")] = None
+ data_interval_start: Annotated[datetime | None, Field(title="Data Interval
Start")]
+ data_interval_end: Annotated[datetime | None, Field(title="Data Interval
End")]
+ partition_key: Annotated[str | None, Field(title="Partition Key")]
class DagRunMutableStates(str, Enum):
@@ -630,11 +628,11 @@ class DagVersionResponse(BaseModel):
id: Annotated[UUID, Field(title="Id")]
version_number: Annotated[int, Field(title="Version Number")]
dag_id: Annotated[str, Field(title="Dag Id")]
- bundle_name: Annotated[str | None, Field(title="Bundle Name")] = None
- bundle_version: Annotated[str | None, Field(title="Bundle Version")] = None
+ bundle_name: Annotated[str | None, Field(title="Bundle Name")]
+ bundle_version: Annotated[str | None, Field(title="Bundle Version")]
created_at: Annotated[datetime, Field(title="Created At")]
dag_display_name: Annotated[str, Field(title="Dag Display Name")]
- bundle_url: Annotated[str | None, Field(title="Bundle Url")] = None
+ bundle_url: Annotated[str | None, Field(title="Bundle Url")]
class DagWarningType(str, Enum):
@@ -656,9 +654,9 @@ class DryRunBackfillResponse(BaseModel):
Backfill serializer for responses in dry-run mode.
"""
- logical_date: Annotated[datetime | None, Field(title="Logical Date")] =
None
- partition_key: Annotated[str | None, Field(title="Partition Key")] = None
- partition_date: Annotated[datetime | None, Field(title="Partition Date")]
= None
+ logical_date: Annotated[datetime | None, Field(title="Logical Date")]
+ partition_key: Annotated[str | None, Field(title="Partition Key")]
+ partition_date: Annotated[datetime | None, Field(title="Partition Date")]
class EventLogResponse(BaseModel):
@@ -668,16 +666,16 @@ class EventLogResponse(BaseModel):
event_log_id: Annotated[int, Field(title="Event Log Id")]
when: Annotated[datetime, Field(title="When")]
- dag_id: Annotated[str | None, Field(title="Dag Id")] = None
- task_id: Annotated[str | None, Field(title="Task Id")] = None
- run_id: Annotated[str | None, Field(title="Run Id")] = None
- map_index: Annotated[int | None, Field(title="Map Index")] = None
- try_number: Annotated[int | None, Field(title="Try Number")] = None
+ dag_id: Annotated[str | None, Field(title="Dag Id")]
+ task_id: Annotated[str | None, Field(title="Task Id")]
+ run_id: Annotated[str | None, Field(title="Run Id")]
+ map_index: Annotated[int | None, Field(title="Map Index")]
+ try_number: Annotated[int | None, Field(title="Try Number")]
event: Annotated[str, Field(title="Event")]
- logical_date: Annotated[datetime | None, Field(title="Logical Date")] =
None
- owner: Annotated[str | None, Field(title="Owner")] = None
- owner_display_name: Annotated[str | None, Field(title="Owner Display
Name")] = None
- extra: Annotated[str | None, Field(title="Extra")] = None
+ logical_date: Annotated[datetime | None, Field(title="Logical Date")]
+ owner: Annotated[str | None, Field(title="Owner")]
+ owner_display_name: Annotated[str | None, Field(title="Owner Display
Name")]
+ extra: Annotated[str | None, Field(title="Extra")]
dag_display_name: Annotated[str | None, Field(title="Dag Display Name")] =
None
task_display_name: Annotated[str | None, Field(title="Task Display Name")]
= None
@@ -777,7 +775,7 @@ class ImportErrorResponse(BaseModel):
import_error_id: Annotated[int, Field(title="Import Error Id")]
timestamp: Annotated[datetime, Field(title="Timestamp")]
filename: Annotated[str, Field(title="Filename")]
- bundle_name: Annotated[str | None, Field(title="Bundle Name")] = None
+ bundle_name: Annotated[str | None, Field(title="Bundle Name")]
stack_trace: Annotated[str, Field(title="Stack Trace")]
@@ -787,15 +785,15 @@ class JobResponse(BaseModel):
"""
id: Annotated[int, Field(title="Id")]
- dag_id: Annotated[str | None, Field(title="Dag Id")] = None
- state: Annotated[str | None, Field(title="State")] = None
- job_type: Annotated[str | None, Field(title="Job Type")] = None
- start_date: Annotated[datetime | None, Field(title="Start Date")] = None
- end_date: Annotated[datetime | None, Field(title="End Date")] = None
- latest_heartbeat: Annotated[datetime | None, Field(title="Latest
Heartbeat")] = None
- executor_class: Annotated[str | None, Field(title="Executor Class")] = None
- hostname: Annotated[str | None, Field(title="Hostname")] = None
- unixname: Annotated[str | None, Field(title="Unixname")] = None
+ dag_id: Annotated[str | None, Field(title="Dag Id")]
+ state: Annotated[str | None, Field(title="State")]
+ job_type: Annotated[str | None, Field(title="Job Type")]
+ start_date: Annotated[datetime | None, Field(title="Start Date")]
+ end_date: Annotated[datetime | None, Field(title="End Date")]
+ latest_heartbeat: Annotated[datetime | None, Field(title="Latest
Heartbeat")]
+ executor_class: Annotated[str | None, Field(title="Executor Class")]
+ hostname: Annotated[str | None, Field(title="Hostname")]
+ unixname: Annotated[str | None, Field(title="Unixname")]
dag_display_name: Annotated[str | None, Field(title="Dag Display Name")] =
None
@@ -902,7 +900,7 @@ class PoolResponse(BaseModel):
scheduled_slots: Annotated[int, Field(title="Scheduled Slots")]
open_slots: Annotated[int, Field(title="Open Slots")]
deferred_slots: Annotated[int, Field(title="Deferred Slots")]
- team_name: Annotated[str | None, Field(title="Team Name")] = None
+ team_name: Annotated[str | None, Field(title="Team Name")]
class ProviderResponse(BaseModel):
@@ -913,7 +911,7 @@ class ProviderResponse(BaseModel):
package_name: Annotated[str, Field(title="Package Name")]
description: Annotated[str, Field(title="Description")]
version: Annotated[str, Field(title="Version")]
- documentation_url: Annotated[str | None, Field(title="Documentation Url")]
= None
+ documentation_url: Annotated[str | None, Field(title="Documentation Url")]
class QueuedEventResponse(BaseModel):
@@ -975,8 +973,8 @@ class SchedulerInfoResponse(BaseModel):
Scheduler info serializer for responses.
"""
- status: Annotated[str | None, Field(title="Status")] = None
- latest_scheduler_heartbeat: Annotated[str | None, Field(title="Latest
Scheduler Heartbeat")] = None
+ status: Annotated[str | None, Field(title="Status")]
+ latest_scheduler_heartbeat: Annotated[str | None, Field(title="Latest
Scheduler Heartbeat")]
class StructuredLogMessage(BaseModel):
@@ -1082,7 +1080,7 @@ class TaskInstancesLogResponse(BaseModel):
"""
content: Annotated[list[StructuredLogMessage] | list[str],
Field(title="Content")]
- continuation_token: Annotated[str | None, Field(title="Continuation
Token")] = None
+ continuation_token: Annotated[str | None, Field(title="Continuation
Token")]
class TaskOutletAssetReference(BaseModel):
@@ -1114,7 +1112,7 @@ class TaskStateStoreBody(BaseModel):
extra="forbid",
)
value: JsonValue
- expires_at: Annotated[datetime | str | None, Field(title="Expires At")] =
"default"
+ expires_at: Annotated[datetime | Literal["default"] | None,
Field(title="Expires At")] = "default"
class TaskStateStorePatchBody(BaseModel):
@@ -1136,7 +1134,7 @@ class TaskStateStoreResponse(BaseModel):
key: Annotated[str, Field(title="Key")]
value: JsonValue
updated_at: Annotated[datetime, Field(title="Updated At")]
- expires_at: Annotated[datetime | None, Field(title="Expires At")] = None
+ expires_at: Annotated[datetime | None, Field(title="Expires At")]
class TimeDelta(BaseModel):
@@ -1161,7 +1159,7 @@ class TriggerDAGRunPostBody(BaseModel):
dag_run_id: Annotated[str | None, Field(title="Dag Run Id")] = None
data_interval_start: Annotated[datetime | None, Field(title="Data Interval
Start")] = None
data_interval_end: Annotated[datetime | None, Field(title="Data Interval
End")] = None
- logical_date: Annotated[datetime | None, Field(title="Logical Date")] =
None
+ logical_date: Annotated[datetime | None, Field(title="Logical Date")]
run_after: Annotated[datetime | None, Field(title="Run After")] = None
conf: Annotated[dict[str, Any] | None, Field(title="Conf")] = None
note: Annotated[str | None, Field(title="Note")] = None
@@ -1176,10 +1174,10 @@ class TriggerResponse(BaseModel):
id: Annotated[int, Field(title="Id")]
classpath: Annotated[str, Field(title="Classpath")]
- kwargs: Annotated[str, Field(title="Kwargs")]
+ kwargs: Annotated[str, Field(deprecated=True, title="Kwargs")]
created_date: Annotated[datetime, Field(title="Created Date")]
- queue: Annotated[str | None, Field(title="Queue")] = None
- triggerer_id: Annotated[int | None, Field(title="Triggerer Id")] = None
+ queue: Annotated[str | None, Field(title="Queue")]
+ triggerer_id: Annotated[int | None, Field(title="Triggerer Id")]
class TriggererInfoResponse(BaseModel):
@@ -1187,8 +1185,8 @@ class TriggererInfoResponse(BaseModel):
Triggerer info serializer for responses.
"""
- status: Annotated[str | None, Field(title="Status")] = None
- latest_triggerer_heartbeat: Annotated[str | None, Field(title="Latest
Triggerer Heartbeat")] = None
+ status: Annotated[str | None, Field(title="Status")]
+ latest_triggerer_heartbeat: Annotated[str | None, Field(title="Latest
Triggerer Heartbeat")]
class UpdateHITLDetailPayload(BaseModel):
@@ -1229,9 +1227,9 @@ class VariableResponse(BaseModel):
key: Annotated[str, Field(title="Key")]
value: Annotated[str | None, Field(title="Value")] = None
- description: Annotated[str | None, Field(title="Description")] = None
+ description: Annotated[str | None, Field(title="Description")]
is_encrypted: Annotated[bool, Field(title="Is Encrypted")]
- team_name: Annotated[str | None, Field(title="Team Name")] = None
+ team_name: Annotated[str | None, Field(title="Team Name")]
class VersionInfo(BaseModel):
@@ -1240,7 +1238,7 @@ class VersionInfo(BaseModel):
"""
version: Annotated[str, Field(title="Version")]
- git_version: Annotated[str | None, Field(title="Git Version")] = None
+ git_version: Annotated[str | None, Field(title="Git Version")]
class XComCreateBody(BaseModel):
@@ -1263,7 +1261,7 @@ class XComResponse(BaseModel):
key: Annotated[str, Field(title="Key")]
timestamp: Annotated[datetime, Field(title="Timestamp")]
- logical_date: Annotated[datetime | None, Field(title="Logical Date")] =
None
+ logical_date: Annotated[datetime | None, Field(title="Logical Date")]
map_index: Annotated[int, Field(title="Map Index")]
task_id: Annotated[str, Field(title="Task Id")]
dag_id: Annotated[str, Field(title="Dag Id")]
@@ -1280,7 +1278,7 @@ class XComResponseNative(BaseModel):
key: Annotated[str, Field(title="Key")]
timestamp: Annotated[datetime, Field(title="Timestamp")]
- logical_date: Annotated[datetime | None, Field(title="Logical Date")] =
None
+ logical_date: Annotated[datetime | None, Field(title="Logical Date")]
map_index: Annotated[int, Field(title="Map Index")]
task_id: Annotated[str, Field(title="Task Id")]
dag_id: Annotated[str, Field(title="Dag Id")]
@@ -1298,7 +1296,7 @@ class XComResponseString(BaseModel):
key: Annotated[str, Field(title="Key")]
timestamp: Annotated[datetime, Field(title="Timestamp")]
- logical_date: Annotated[datetime | None, Field(title="Logical Date")] =
None
+ logical_date: Annotated[datetime | None, Field(title="Logical Date")]
map_index: Annotated[int, Field(title="Map Index")]
task_id: Annotated[str, Field(title="Task Id")]
dag_id: Annotated[str, Field(title="Dag Id")]
@@ -1306,7 +1304,7 @@ class XComResponseString(BaseModel):
dag_display_name: Annotated[str, Field(title="Dag Display Name")]
task_display_name: Annotated[str, Field(title="Task Display Name")]
run_after: Annotated[datetime, Field(title="Run After")]
- value: Annotated[str | None, Field(title="Value")] = None
+ value: Annotated[str | None, Field(title="Value")]
class XComUpdateBody(BaseModel):
@@ -1429,10 +1427,10 @@ class BackfillDagRunResponse(BaseModel):
backfill_id: Annotated[int, Field(ge=0, title="Backfill Id")]
dag_id: Annotated[str, Field(title="Dag Id")]
dag_run_id: Annotated[str | None, Field(title="Dag Run Id")] = None
- logical_date: Annotated[datetime | None, Field(title="Logical Date")] =
None
- partition_key: Annotated[str | None, Field(title="Partition Key")] = None
+ logical_date: Annotated[datetime | None, Field(title="Logical Date")]
+ partition_key: Annotated[str | None, Field(title="Partition Key")]
sort_ordinal: Annotated[int, Field(title="Sort Ordinal")]
- exception_reason: Annotated[str | None, Field(title="Exception Reason")] =
None
+ exception_reason: Annotated[str | None, Field(title="Exception Reason")]
dag_run_state: DagRunState | None = None
@@ -1469,12 +1467,12 @@ class BackfillResponse(BaseModel):
dag_id: Annotated[str, Field(title="Dag Id")]
from_date: Annotated[datetime, Field(title="From Date")]
to_date: Annotated[datetime, Field(title="To Date")]
- dag_run_conf: Annotated[dict[str, Any] | None, Field(title="Dag Run
Conf")] = None
+ dag_run_conf: Annotated[dict[str, Any] | None, Field(title="Dag Run Conf")]
is_paused: Annotated[bool, Field(title="Is Paused")]
reprocess_behavior: ReprocessBehavior
max_active_runs: Annotated[int, Field(title="Max Active Runs")]
created_at: Annotated[datetime, Field(title="Created At")]
- completed_at: Annotated[datetime | None, Field(title="Completed At")] =
None
+ completed_at: Annotated[datetime | None, Field(title="Completed At")]
updated_at: Annotated[datetime, Field(title="Updated At")]
dag_display_name: Annotated[str, Field(title="Dag Display Name")]
@@ -1786,33 +1784,31 @@ class DAGResponse(BaseModel):
dag_display_name: Annotated[str, Field(title="Dag Display Name")]
is_paused: Annotated[bool, Field(title="Is Paused")]
is_stale: Annotated[bool, Field(title="Is Stale")]
- last_parsed_time: Annotated[datetime | None, Field(title="Last Parsed
Time")] = None
- last_parse_duration: Annotated[float | None, Field(title="Last Parse
Duration")] = None
- last_expired: Annotated[datetime | None, Field(title="Last Expired")] =
None
- bundle_name: Annotated[str | None, Field(title="Bundle Name")] = None
- bundle_version: Annotated[str | None, Field(title="Bundle Version")] = None
- relative_fileloc: Annotated[str | None, Field(title="Relative Fileloc")] =
None
- fileloc: Annotated[str | None, Field(title="Fileloc")] = None
- description: Annotated[str | None, Field(title="Description")] = None
- timetable_summary: Annotated[str | None, Field(title="Timetable Summary")]
= None
- timetable_description: Annotated[str | None, Field(title="Timetable
Description")] = None
+ last_parsed_time: Annotated[datetime | None, Field(title="Last Parsed
Time")]
+ last_parse_duration: Annotated[float | None, Field(title="Last Parse
Duration")]
+ last_expired: Annotated[datetime | None, Field(title="Last Expired")]
+ bundle_name: Annotated[str | None, Field(title="Bundle Name")]
+ bundle_version: Annotated[str | None, Field(title="Bundle Version")]
+ relative_fileloc: Annotated[str | None, Field(title="Relative Fileloc")]
+ fileloc: Annotated[str | None, Field(title="Fileloc")]
+ description: Annotated[str | None, Field(title="Description")]
+ timetable_summary: Annotated[str | None, Field(title="Timetable Summary")]
+ timetable_description: Annotated[str | None, Field(title="Timetable
Description")]
timetable_partitioned: Annotated[bool, Field(title="Timetable
Partitioned")]
timetable_periodic: Annotated[bool, Field(title="Timetable Periodic")]
tags: Annotated[list[DagTagResponse], Field(title="Tags")]
max_active_tasks: Annotated[int, Field(title="Max Active Tasks")]
- max_active_runs: Annotated[int | None, Field(title="Max Active Runs")] =
None
+ max_active_runs: Annotated[int | None, Field(title="Max Active Runs")]
max_consecutive_failed_dag_runs: Annotated[int, Field(title="Max
Consecutive Failed Dag Runs")]
has_task_concurrency_limits: Annotated[bool, Field(title="Has Task
Concurrency Limits")]
has_import_errors: Annotated[bool, Field(title="Has Import Errors")]
- next_dagrun_logical_date: Annotated[datetime | None, Field(title="Next
Dagrun Logical Date")] = None
+ next_dagrun_logical_date: Annotated[datetime | None, Field(title="Next
Dagrun Logical Date")]
next_dagrun_data_interval_start: Annotated[
datetime | None, Field(title="Next Dagrun Data Interval Start")
- ] = None
- next_dagrun_data_interval_end: Annotated[
- datetime | None, Field(title="Next Dagrun Data Interval End")
- ] = None
- next_dagrun_run_after: Annotated[datetime | None, Field(title="Next Dagrun
Run After")] = None
- allowed_run_types: Annotated[list[DagRunType] | None, Field(title="Allowed
Run Types")] = None
+ ]
+ next_dagrun_data_interval_end: Annotated[datetime | None,
Field(title="Next Dagrun Data Interval End")]
+ next_dagrun_run_after: Annotated[datetime | None, Field(title="Next Dagrun
Run After")]
+ allowed_run_types: Annotated[list[DagRunType] | None, Field(title="Allowed
Run Types")]
owners: Annotated[list[str], Field(title="Owners")]
is_backfillable: Annotated[
bool, Field(description="Whether this Dag's schedule supports
backfilling.", title="Is Backfillable")
@@ -1839,26 +1835,26 @@ class DAGRunResponse(BaseModel):
dag_run_id: Annotated[str, Field(title="Dag Run Id")]
dag_id: Annotated[str, Field(title="Dag Id")]
- logical_date: Annotated[datetime | None, Field(title="Logical Date")] =
None
- queued_at: Annotated[datetime | None, Field(title="Queued At")] = None
- start_date: Annotated[datetime | None, Field(title="Start Date")] = None
- end_date: Annotated[datetime | None, Field(title="End Date")] = None
- duration: Annotated[float | None, Field(title="Duration")] = None
- data_interval_start: Annotated[datetime | None, Field(title="Data Interval
Start")] = None
- data_interval_end: Annotated[datetime | None, Field(title="Data Interval
End")] = None
+ logical_date: Annotated[datetime | None, Field(title="Logical Date")]
+ queued_at: Annotated[datetime | None, Field(title="Queued At")]
+ start_date: Annotated[datetime | None, Field(title="Start Date")]
+ end_date: Annotated[datetime | None, Field(title="End Date")]
+ duration: Annotated[float | None, Field(title="Duration")]
+ data_interval_start: Annotated[datetime | None, Field(title="Data Interval
Start")]
+ data_interval_end: Annotated[datetime | None, Field(title="Data Interval
End")]
run_after: Annotated[datetime, Field(title="Run After")]
- last_scheduling_decision: Annotated[datetime | None, Field(title="Last
Scheduling Decision")] = None
+ last_scheduling_decision: Annotated[datetime | None, Field(title="Last
Scheduling Decision")]
run_type: DagRunType
state: DagRunState
- triggered_by: DagRunTriggeredByType | None = None
- triggering_user_name: Annotated[str | None, Field(title="Triggering User
Name")] = None
- conf: Annotated[dict[str, Any] | None, Field(title="Conf")] = None
- note: Annotated[str | None, Field(title="Note")] = None
+ triggered_by: DagRunTriggeredByType | None
+ triggering_user_name: Annotated[str | None, Field(title="Triggering User
Name")]
+ conf: Annotated[dict[str, Any] | None, Field(title="Conf")]
+ note: Annotated[str | None, Field(title="Note")]
dag_versions: Annotated[list[DagVersionResponse], Field(title="Dag
Versions")]
- bundle_version: Annotated[str | None, Field(title="Bundle Version")] = None
+ bundle_version: Annotated[str | None, Field(title="Bundle Version")]
dag_display_name: Annotated[str, Field(title="Dag Display Name")]
- partition_key: Annotated[str | None, Field(title="Partition Key")] = None
- partition_date: Annotated[datetime | None, Field(title="Partition Date")]
= None
+ partition_key: Annotated[str | None, Field(title="Partition Key")]
+ partition_date: Annotated[datetime | None, Field(title="Partition Date")]
team_name: Annotated[str | None, Field(title="Team Name")] = None
@@ -2038,7 +2034,9 @@ class PluginResponse(BaseModel):
]
react_apps: Annotated[list[ReactAppResponse], Field(title="React Apps")]
appbuilder_views: Annotated[list[AppBuilderViewResponse],
Field(title="Appbuilder Views")]
- appbuilder_menu_items: Annotated[list[AppBuilderMenuItemResponse],
Field(title="Appbuilder Menu Items")]
+ appbuilder_menu_items: Annotated[
+ list[AppBuilderMenuItemResponse], Field(deprecated=True,
title="Appbuilder Menu Items")
+ ]
global_operator_extra_links: Annotated[list[str], Field(title="Global
Operator Extra Links")]
operator_extra_links: Annotated[list[str], Field(title="Operator Extra
Links")]
source: Annotated[str, Field(title="Source")]
@@ -2090,28 +2088,28 @@ class TaskInstanceHistoryResponse(BaseModel):
dag_id: Annotated[str, Field(title="Dag Id")]
dag_run_id: Annotated[str, Field(title="Dag Run Id")]
map_index: Annotated[int, Field(title="Map Index")]
- start_date: Annotated[datetime | None, Field(title="Start Date")] = None
- end_date: Annotated[datetime | None, Field(title="End Date")] = None
- duration: Annotated[float | None, Field(title="Duration")] = None
- state: TaskInstanceState | None = None
+ start_date: Annotated[datetime | None, Field(title="Start Date")]
+ end_date: Annotated[datetime | None, Field(title="End Date")]
+ duration: Annotated[float | None, Field(title="Duration")]
+ state: TaskInstanceState | None
try_number: Annotated[int, Field(title="Try Number")]
max_tries: Annotated[int, Field(title="Max Tries")]
task_display_name: Annotated[str, Field(title="Task Display Name")]
dag_display_name: Annotated[str, Field(title="Dag Display Name")]
- hostname: Annotated[str | None, Field(title="Hostname")] = None
- unixname: Annotated[str | None, Field(title="Unixname")] = None
+ hostname: Annotated[str | None, Field(title="Hostname")]
+ unixname: Annotated[str | None, Field(title="Unixname")]
pool: Annotated[str, Field(title="Pool")]
pool_slots: Annotated[int, Field(title="Pool Slots")]
- queue: Annotated[str | None, Field(title="Queue")] = None
- priority_weight: Annotated[int | None, Field(title="Priority Weight")] =
None
- operator: Annotated[str | None, Field(title="Operator")] = None
- operator_name: Annotated[str | None, Field(title="Operator Name")] = None
- queued_when: Annotated[datetime | None, Field(title="Queued When")] = None
- scheduled_when: Annotated[datetime | None, Field(title="Scheduled When")]
= None
- pid: Annotated[int | None, Field(title="Pid")] = None
- executor: Annotated[str | None, Field(title="Executor")] = None
+ queue: Annotated[str | None, Field(title="Queue")]
+ priority_weight: Annotated[int | None, Field(title="Priority Weight")]
+ operator: Annotated[str | None, Field(title="Operator")]
+ operator_name: Annotated[str | None, Field(title="Operator Name")]
+ queued_when: Annotated[datetime | None, Field(title="Queued When")]
+ scheduled_when: Annotated[datetime | None, Field(title="Scheduled When")]
+ pid: Annotated[int | None, Field(title="Pid")]
+ executor: Annotated[str | None, Field(title="Executor")]
executor_config: Annotated[str, Field(title="Executor Config")]
- dag_version: DagVersionResponse | None = None
+ dag_version: DagVersionResponse | None
class TaskInstanceResponse(BaseModel):
@@ -2124,35 +2122,35 @@ class TaskInstanceResponse(BaseModel):
dag_id: Annotated[str, Field(title="Dag Id")]
dag_run_id: Annotated[str, Field(title="Dag Run Id")]
map_index: Annotated[int, Field(title="Map Index")]
- logical_date: Annotated[datetime | None, Field(title="Logical Date")] =
None
+ logical_date: Annotated[datetime | None, Field(title="Logical Date")]
run_after: Annotated[datetime, Field(title="Run After")]
- start_date: Annotated[datetime | None, Field(title="Start Date")] = None
- end_date: Annotated[datetime | None, Field(title="End Date")] = None
- duration: Annotated[float | None, Field(title="Duration")] = None
- state: TaskInstanceState | None = None
+ start_date: Annotated[datetime | None, Field(title="Start Date")]
+ end_date: Annotated[datetime | None, Field(title="End Date")]
+ duration: Annotated[float | None, Field(title="Duration")]
+ state: TaskInstanceState | None
try_number: Annotated[int, Field(title="Try Number")]
max_tries: Annotated[int, Field(title="Max Tries")]
task_display_name: Annotated[str, Field(title="Task Display Name")]
dag_display_name: Annotated[str, Field(title="Dag Display Name")]
- hostname: Annotated[str | None, Field(title="Hostname")] = None
- unixname: Annotated[str | None, Field(title="Unixname")] = None
+ hostname: Annotated[str | None, Field(title="Hostname")]
+ unixname: Annotated[str | None, Field(title="Unixname")]
pool: Annotated[str, Field(title="Pool")]
pool_slots: Annotated[int, Field(title="Pool Slots")]
- queue: Annotated[str | None, Field(title="Queue")] = None
- priority_weight: Annotated[int | None, Field(title="Priority Weight")] =
None
- operator: Annotated[str | None, Field(title="Operator")] = None
- operator_name: Annotated[str | None, Field(title="Operator Name")] = None
- queued_when: Annotated[datetime | None, Field(title="Queued When")] = None
- scheduled_when: Annotated[datetime | None, Field(title="Scheduled When")]
= None
- pid: Annotated[int | None, Field(title="Pid")] = None
- executor: Annotated[str | None, Field(title="Executor")] = None
+ queue: Annotated[str | None, Field(title="Queue")]
+ priority_weight: Annotated[int | None, Field(title="Priority Weight")]
+ operator: Annotated[str | None, Field(title="Operator")]
+ operator_name: Annotated[str | None, Field(title="Operator Name")]
+ queued_when: Annotated[datetime | None, Field(title="Queued When")]
+ scheduled_when: Annotated[datetime | None, Field(title="Scheduled When")]
+ pid: Annotated[int | None, Field(title="Pid")]
+ executor: Annotated[str | None, Field(title="Executor")]
executor_config: Annotated[str, Field(title="Executor Config")]
- note: Annotated[str | None, Field(title="Note")] = None
- rendered_map_index: Annotated[str | None, Field(title="Rendered Map
Index")] = None
+ note: Annotated[str | None, Field(title="Note")]
+ rendered_map_index: Annotated[str | None, Field(title="Rendered Map
Index")]
rendered_fields: Annotated[dict[str, Any] | None, Field(title="Rendered
Fields")] = None
- trigger: TriggerResponse | None = None
- triggerer_job: JobResponse | None = None
- dag_version: DagVersionResponse | None = None
+ trigger: TriggerResponse | None
+ triggerer_job: JobResponse | None
+ dag_version: DagVersionResponse | None
team_name: Annotated[str | None, Field(title="Team Name")] = None
@@ -2161,32 +2159,32 @@ class TaskResponse(BaseModel):
Task serializer for responses.
"""
- task_id: Annotated[str | None, Field(title="Task Id")] = None
- task_display_name: Annotated[str | None, Field(title="Task Display Name")]
= None
- owner: Annotated[str | None, Field(title="Owner")] = None
- start_date: Annotated[datetime | None, Field(title="Start Date")] = None
- end_date: Annotated[datetime | None, Field(title="End Date")] = None
- trigger_rule: Annotated[str | None, Field(title="Trigger Rule")] = None
+ task_id: Annotated[str | None, Field(title="Task Id")]
+ task_display_name: Annotated[str | None, Field(title="Task Display Name")]
+ owner: Annotated[str | None, Field(title="Owner")]
+ start_date: Annotated[datetime | None, Field(title="Start Date")]
+ end_date: Annotated[datetime | None, Field(title="End Date")]
+ trigger_rule: Annotated[str | None, Field(title="Trigger Rule")]
depends_on_past: Annotated[bool, Field(title="Depends On Past")]
wait_for_downstream: Annotated[bool, Field(title="Wait For Downstream")]
- retries: Annotated[float | None, Field(title="Retries")] = None
- queue: Annotated[str | None, Field(title="Queue")] = None
- pool: Annotated[str | None, Field(title="Pool")] = None
- pool_slots: Annotated[float | None, Field(title="Pool Slots")] = None
- execution_timeout: TimeDelta | None = None
- retry_delay: TimeDelta | None = None
+ retries: Annotated[float | None, Field(title="Retries")]
+ queue: Annotated[str | None, Field(title="Queue")]
+ pool: Annotated[str | None, Field(title="Pool")]
+ pool_slots: Annotated[float | None, Field(title="Pool Slots")]
+ execution_timeout: TimeDelta | None
+ retry_delay: TimeDelta | None
retry_exponential_backoff: Annotated[float, Field(title="Retry Exponential
Backoff")]
- priority_weight: Annotated[float | None, Field(title="Priority Weight")] =
None
- weight_rule: Annotated[str | None, Field(title="Weight Rule")] = None
- ui_color: Annotated[str | None, Field(title="Ui Color")] = None
- ui_fgcolor: Annotated[str | None, Field(title="Ui Fgcolor")] = None
- template_fields: Annotated[list[str] | None, Field(title="Template
Fields")] = None
- downstream_task_ids: Annotated[list[str] | None, Field(title="Downstream
Task Ids")] = None
- doc_md: Annotated[str | None, Field(title="Doc Md")] = None
- operator_name: Annotated[str | None, Field(title="Operator Name")] = None
- params: Annotated[dict[str, Any] | None, Field(title="Params")] = None
- class_ref: Annotated[dict[str, Any] | None, Field(title="Class Ref")] =
None
- is_mapped: Annotated[bool | None, Field(title="Is Mapped")] = None
+ priority_weight: Annotated[float | None, Field(title="Priority Weight")]
+ weight_rule: Annotated[str | None, Field(title="Weight Rule")]
+ ui_color: Annotated[str | None, Field(title="Ui Color")]
+ ui_fgcolor: Annotated[str | None, Field(title="Ui Fgcolor")]
+ template_fields: Annotated[list[str] | None, Field(title="Template
Fields")]
+ downstream_task_ids: Annotated[list[str] | None, Field(title="Downstream
Task Ids")]
+ doc_md: Annotated[str | None, Field(title="Doc Md")]
+ operator_name: Annotated[str | None, Field(title="Operator Name")]
+ params: Annotated[dict[str, Any] | None, Field(title="Params")]
+ class_ref: Annotated[dict[str, Any] | None, Field(title="Class Ref")]
+ is_mapped: Annotated[bool | None, Field(title="Is Mapped")]
extra_links: Annotated[
list[str], Field(description="Extract and return extra_links.",
title="Extra Links")
]
@@ -2591,36 +2589,34 @@ class DAGDetailsResponse(BaseModel):
dag_display_name: Annotated[str, Field(title="Dag Display Name")]
is_paused: Annotated[bool, Field(title="Is Paused")]
is_stale: Annotated[bool, Field(title="Is Stale")]
- last_parsed_time: Annotated[datetime | None, Field(title="Last Parsed
Time")] = None
- last_parse_duration: Annotated[float | None, Field(title="Last Parse
Duration")] = None
- last_expired: Annotated[datetime | None, Field(title="Last Expired")] =
None
- bundle_name: Annotated[str | None, Field(title="Bundle Name")] = None
- bundle_version: Annotated[str | None, Field(title="Bundle Version")] = None
- relative_fileloc: Annotated[str | None, Field(title="Relative Fileloc")] =
None
- fileloc: Annotated[str | None, Field(title="Fileloc")] = None
- description: Annotated[str | None, Field(title="Description")] = None
- timetable_summary: Annotated[str | None, Field(title="Timetable Summary")]
= None
- timetable_description: Annotated[str | None, Field(title="Timetable
Description")] = None
+ last_parsed_time: Annotated[datetime | None, Field(title="Last Parsed
Time")]
+ last_parse_duration: Annotated[float | None, Field(title="Last Parse
Duration")]
+ last_expired: Annotated[datetime | None, Field(title="Last Expired")]
+ bundle_name: Annotated[str | None, Field(title="Bundle Name")]
+ bundle_version: Annotated[str | None, Field(title="Bundle Version")]
+ relative_fileloc: Annotated[str | None, Field(title="Relative Fileloc")]
+ fileloc: Annotated[str | None, Field(title="Fileloc")]
+ description: Annotated[str | None, Field(title="Description")]
+ timetable_summary: Annotated[str | None, Field(title="Timetable Summary")]
+ timetable_description: Annotated[str | None, Field(title="Timetable
Description")]
timetable_partitioned: Annotated[bool, Field(title="Timetable
Partitioned")]
timetable_periodic: Annotated[bool, Field(title="Timetable Periodic")]
tags: Annotated[list[DagTagResponse], Field(title="Tags")]
max_active_tasks: Annotated[int, Field(title="Max Active Tasks")]
- max_active_runs: Annotated[int | None, Field(title="Max Active Runs")] =
None
+ max_active_runs: Annotated[int | None, Field(title="Max Active Runs")]
max_consecutive_failed_dag_runs: Annotated[int, Field(title="Max
Consecutive Failed Dag Runs")]
has_task_concurrency_limits: Annotated[bool, Field(title="Has Task
Concurrency Limits")]
has_import_errors: Annotated[bool, Field(title="Has Import Errors")]
- next_dagrun_logical_date: Annotated[datetime | None, Field(title="Next
Dagrun Logical Date")] = None
+ next_dagrun_logical_date: Annotated[datetime | None, Field(title="Next
Dagrun Logical Date")]
next_dagrun_data_interval_start: Annotated[
datetime | None, Field(title="Next Dagrun Data Interval Start")
- ] = None
- next_dagrun_data_interval_end: Annotated[
- datetime | None, Field(title="Next Dagrun Data Interval End")
- ] = None
- next_dagrun_run_after: Annotated[datetime | None, Field(title="Next Dagrun
Run After")] = None
- allowed_run_types: Annotated[list[DagRunType] | None, Field(title="Allowed
Run Types")] = None
+ ]
+ next_dagrun_data_interval_end: Annotated[datetime | None,
Field(title="Next Dagrun Data Interval End")]
+ next_dagrun_run_after: Annotated[datetime | None, Field(title="Next Dagrun
Run After")]
+ allowed_run_types: Annotated[list[DagRunType] | None, Field(title="Allowed
Run Types")]
owners: Annotated[list[str], Field(title="Owners")]
catchup: Annotated[bool, Field(title="Catchup")]
- dag_run_timeout: Annotated[timedelta | None, Field(title="Dag Run
Timeout")] = None
+ dag_run_timeout: Annotated[timedelta | None, Field(title="Dag Run
Timeout")]
asset_expression: Annotated[
AssetExpressionAsset
| AssetExpressionAlias
@@ -2629,17 +2625,17 @@ class DAGDetailsResponse(BaseModel):
| AssetExpressionAll
| None,
Field(title="Asset Expression"),
- ] = None
- doc_md: Annotated[str | None, Field(title="Doc Md")] = None
- start_date: Annotated[datetime | None, Field(title="Start Date")] = None
- end_date: Annotated[datetime | None, Field(title="End Date")] = None
- is_paused_upon_creation: Annotated[bool | None, Field(title="Is Paused
Upon Creation")] = None
- params: Annotated[dict[str, Any] | None, Field(title="Params")] = None
+ ]
+ doc_md: Annotated[str | None, Field(title="Doc Md")]
+ start_date: Annotated[datetime | None, Field(title="Start Date")]
+ end_date: Annotated[datetime | None, Field(title="End Date")]
+ is_paused_upon_creation: Annotated[bool | None, Field(title="Is Paused
Upon Creation")]
+ params: Annotated[dict[str, Any] | None, Field(title="Params")]
render_template_as_native_obj: Annotated[bool, Field(title="Render
Template As Native Obj")]
- template_search_path: Annotated[list[str] | None, Field(title="Template
Search Path")] = None
- timezone: Annotated[str | None, Field(title="Timezone")] = None
- last_parsed: Annotated[datetime | None, Field(title="Last Parsed")] = None
- default_args: Annotated[dict[str, Any] | None, Field(title="Default
Args")] = None
+ template_search_path: Annotated[list[str] | None, Field(title="Template
Search Path")]
+ timezone: Annotated[str | None, Field(title="Timezone")]
+ last_parsed: Annotated[datetime | None, Field(title="Last Parsed")]
+ default_args: Annotated[dict[str, Any] | None, Field(title="Default Args")]
rerun_with_latest_version: Annotated[bool | None, Field(title="Rerun With
Latest Version")] = None
owner_links: Annotated[dict[str, str] | None, Field(title="Owner Links")]
= None
is_favorite: Annotated[bool | None, Field(title="Is Favorite")] = False
@@ -2651,13 +2647,14 @@ class DAGDetailsResponse(BaseModel):
concurrency: Annotated[
int,
Field(
+ deprecated=True,
description="Return max_active_tasks as
concurrency.\n\nDeprecated: Use max_active_tasks instead.",
title="Concurrency",
),
]
latest_dag_version: Annotated[
DagVersionResponse | None, Field(description="Return the latest
DagVersion.")
- ] = None
+ ]
AssetExpressionAll.model_rebuild()
diff --git a/airflow-ctl/tests/airflow_ctl/api/test_operations.py
b/airflow-ctl/tests/airflow_ctl/api/test_operations.py
index d20f08e77f4..d61a2ebf3b7 100644
--- a/airflow-ctl/tests/airflow_ctl/api/test_operations.py
+++ b/airflow-ctl/tests/airflow_ctl/api/test_operations.py
@@ -321,8 +321,14 @@ class TestAssetsOperations:
bundle_version="1",
created_at=datetime.datetime(2025, 1, 1, 0, 0, 0),
dag_display_name=dag_id,
+ bundle_url=None,
)
],
+ duration=None,
+ triggering_user_name=None,
+ bundle_version=None,
+ partition_key=None,
+ partition_date=None,
)
asset_create_event_body = CreateAssetEventsBody(asset_id=asset_id,
extra=None)
@@ -676,12 +682,14 @@ class TestConnectionsOperations:
connection_id=connection_id,
conn_type=conn_type,
host=host,
- schema_=schema_,
+ schema=schema_,
login=login,
password=password,
port=port,
extra=extra,
- )
+ description=None,
+ team_name=None,
+ ) # type: ignore[call-arg]
connections_response = ConnectionCollectionResponse(
connections=[connection_response],
@@ -707,7 +715,9 @@ class TestConnectionsOperations:
def test_get(self):
def handle_request(request: httpx.Request) -> httpx.Response:
assert request.url.path ==
f"/api/v2/connections/{self.connection_id}"
- return httpx.Response(200,
json=json.loads(self.connection_response.model_dump_json()))
+ return httpx.Response(
+ 200,
json=json.loads(self.connection_response.model_dump_json(by_alias=True))
+ )
client = make_api_client(transport=httpx.MockTransport(handle_request))
response = client.connections.get(self.connection_id)
@@ -716,7 +726,9 @@ class TestConnectionsOperations:
def test_list(self):
def handle_request(request: httpx.Request) -> httpx.Response:
assert request.url.path == "/api/v2/connections"
- return httpx.Response(200,
json=json.loads(self.connections_response.model_dump_json()))
+ return httpx.Response(
+ 200,
json=json.loads(self.connections_response.model_dump_json(by_alias=True))
+ )
client = make_api_client(transport=httpx.MockTransport(handle_request))
response = client.connections.list()
@@ -725,7 +737,9 @@ class TestConnectionsOperations:
def test_create(self):
def handle_request(request: httpx.Request) -> httpx.Response:
assert request.url.path == "/api/v2/connections"
- return httpx.Response(200,
json=json.loads(self.connection_response.model_dump_json()))
+ return httpx.Response(
+ 200,
json=json.loads(self.connection_response.model_dump_json(by_alias=True))
+ )
client = make_api_client(transport=httpx.MockTransport(handle_request))
response = client.connections.create(connection=self.connection)
@@ -747,7 +761,9 @@ class TestConnectionsOperations:
"schema": self.schema_,
}
assert "schema_" not in request_body
- return httpx.Response(200,
json=json.loads(self.connection_response.model_dump_json()))
+ return httpx.Response(
+ 200,
json=json.loads(self.connection_response.model_dump_json(by_alias=True))
+ )
client = make_api_client(transport=httpx.MockTransport(handle_request))
response = client.connections.create(connection=connection)
@@ -793,7 +809,9 @@ class TestConnectionsOperations:
def test_delete(self):
def handle_request(request: httpx.Request) -> httpx.Response:
assert request.url.path ==
f"/api/v2/connections/{self.connection_id}"
- return httpx.Response(200,
json=json.loads(self.connection_response.model_dump_json()))
+ return httpx.Response(
+ 200,
json=json.loads(self.connection_response.model_dump_json(by_alias=True))
+ )
client = make_api_client(transport=httpx.MockTransport(handle_request))
response = client.connections.delete(self.connection_id)
@@ -802,7 +820,9 @@ class TestConnectionsOperations:
def test_update(self):
def handle_request(request: httpx.Request) -> httpx.Response:
assert request.url.path ==
f"/api/v2/connections/{self.connection_id}"
- return httpx.Response(200,
json=json.loads(self.connection_response.model_dump_json()))
+ return httpx.Response(
+ 200,
json=json.loads(self.connection_response.model_dump_json(by_alias=True))
+ )
client = make_api_client(transport=httpx.MockTransport(handle_request))
response = client.connections.update(connection=self.connection)
@@ -831,7 +851,9 @@ class TestConnectionsOperations:
"team_name": None,
}
assert "schema_" not in request_body
- return httpx.Response(200,
json=json.loads(self.connection_response.model_dump_json()))
+ return httpx.Response(
+ 200,
json=json.loads(self.connection_response.model_dump_json(by_alias=True))
+ )
client = make_api_client(transport=httpx.MockTransport(handle_request))
response = client.connections.update(connection=connection)
@@ -916,6 +938,9 @@ class TestDagOperations:
file_token="file_token",
bundle_name="bundle_name",
is_stale=False,
+ last_parse_duration=None,
+ bundle_version=None,
+ allowed_run_types=None,
)
dag_details_response = DAGDetailsResponse(
@@ -959,6 +984,11 @@ class TestDagOperations:
concurrency=1,
bundle_name="bundle_name",
is_stale=False,
+ last_parse_duration=None,
+ bundle_version=None,
+ allowed_run_types=None,
+ default_args=None,
+ latest_dag_version=None,
)
dag_tag_collection_response = DAGTagCollectionResponse(
@@ -1003,6 +1033,7 @@ class TestDagOperations:
bundle_version="1",
created_at=datetime.datetime(2025, 1, 1, 0, 0, 0),
dag_display_name=dag_id,
+ bundle_url=None,
)
dag_version_collection_response = DAGVersionCollectionResponse(
@@ -1028,10 +1059,7 @@ class TestDagOperations:
)
# DagRun related
- trigger_dag_run = TriggerDAGRunPostBody(
- conf=None,
- note=None,
- )
+ trigger_dag_run = TriggerDAGRunPostBody(conf=None, note=None,
logical_date=None)
dag_id = "dag_id"
dag_run_id = "dag_run_id"
@@ -1061,8 +1089,14 @@ class TestDagOperations:
bundle_version="1",
created_at=datetime.datetime(2025, 1, 1, 0, 0, 0),
dag_display_name=dag_id,
+ bundle_url=None,
)
],
+ duration=None,
+ triggering_user_name=None,
+ bundle_version=None,
+ partition_key=None,
+ partition_date=None,
)
def test_get(self):
@@ -1218,8 +1252,14 @@ class TestDagRunOperations:
bundle_version="1",
created_at=datetime.datetime(2025, 1, 1, 0, 0, 0),
dag_display_name=dag_id,
+ bundle_url=None,
)
],
+ duration=None,
+ triggering_user_name=None,
+ bundle_version=None,
+ partition_key=None,
+ partition_date=None,
)
dag_run_collection_response = DAGRunCollectionResponse(
@@ -1565,6 +1605,7 @@ class TestPoolsOperations:
scheduled_slots=1,
open_slots=1,
deferred_slots=1,
+ team_name=None,
)
pool_response_collection = PoolCollectionResponse(
pools=[pool_response],
@@ -1624,9 +1665,7 @@ class TestPoolsOperations:
class TestProvidersOperations:
provider_response = ProviderResponse(
- package_name="package_name",
- version="version",
- description="description",
+ package_name="package_name", version="version",
description="description", documentation_url=None
)
provider_collection_response = ProviderCollectionResponse(
providers=[provider_response],
@@ -1659,6 +1698,25 @@ class TestTaskInstancesOperations:
pool="default_pool",
pool_slots=1,
executor_config="{}",
+ logical_date=None,
+ start_date=None,
+ end_date=None,
+ duration=None,
+ hostname=None,
+ unixname=None,
+ queue=None,
+ priority_weight=None,
+ operator=None,
+ operator_name=None,
+ queued_when=None,
+ scheduled_when=None,
+ pid=None,
+ executor=None,
+ note=None,
+ rendered_map_index=None,
+ trigger=None,
+ triggerer_job=None,
+ dag_version=None,
)
task_instance_collection_response = TaskInstanceCollectionResponse(
task_instances=[task_instance_response],
@@ -1698,6 +1756,26 @@ class TestTasksOperations:
pool="default_pool",
pool_slots=1,
executor_config="{}",
+ logical_date=None,
+ start_date=None,
+ end_date=None,
+ duration=None,
+ state=None,
+ hostname=None,
+ unixname=None,
+ queue=None,
+ priority_weight=None,
+ operator=None,
+ operator_name=None,
+ queued_when=None,
+ scheduled_when=None,
+ pid=None,
+ executor=None,
+ note=None,
+ rendered_map_index=None,
+ trigger=None,
+ triggerer_job=None,
+ dag_version=None,
)
task_instance_collection_response = TaskInstanceCollectionResponse(
task_instances=[task_instance_response],
@@ -1732,10 +1810,7 @@ class TestVariablesOperations:
}
)
variable_response = VariableResponse(
- key=key,
- value=value,
- description=description,
- is_encrypted=False,
+ key=key, value=value, description=description, is_encrypted=False,
team_name=None
)
variable_collection_response = VariableCollectionResponse(
variables=[variable_response],
diff --git
a/airflow-ctl/tests/airflow_ctl/ctl/commands/test_connections_command.py
b/airflow-ctl/tests/airflow_ctl/ctl/commands/test_connections_command.py
index ba803ddd8e0..452d6182e7d 100644
--- a/airflow-ctl/tests/airflow_ctl/ctl/commands/test_connections_command.py
+++ b/airflow-ctl/tests/airflow_ctl/ctl/commands/test_connections_command.py
@@ -51,7 +51,9 @@ class TestCliConnectionCommands:
port=1234,
extra="{}",
description="Test connection description",
- )
+ schema=None,
+ team_name=None,
+ ) # type: ignore[call-arg]
],
total_entries=1,
)
diff --git a/airflow-ctl/tests/airflow_ctl/ctl/commands/test_dag_command.py
b/airflow-ctl/tests/airflow_ctl/ctl/commands/test_dag_command.py
index 1425868e282..1ee613b85f8 100644
--- a/airflow-ctl/tests/airflow_ctl/ctl/commands/test_dag_command.py
+++ b/airflow-ctl/tests/airflow_ctl/ctl/commands/test_dag_command.py
@@ -73,6 +73,9 @@ class TestDagCommands:
file_token="file_token",
bundle_name="bundle_name",
is_stale=False,
+ last_parse_duration=None,
+ bundle_version=None,
+ allowed_run_types=None,
)
dag_response_unpaused = DAGResponse(
@@ -103,6 +106,9 @@ class TestDagCommands:
file_token="file_token",
bundle_name="bundle_name",
is_stale=False,
+ last_parse_duration=None,
+ bundle_version=None,
+ allowed_run_types=None,
)
dag_response_no_schedule = DAGResponse(
@@ -133,6 +139,9 @@ class TestDagCommands:
file_token="file_token",
bundle_name="bundle_name",
is_stale=False,
+ last_parse_duration=None,
+ bundle_version=None,
+ allowed_run_types=None,
)
@staticmethod
diff --git a/airflow-ctl/tests/airflow_ctl/ctl/commands/test_task_command.py
b/airflow-ctl/tests/airflow_ctl/ctl/commands/test_task_command.py
index cb134726711..ddd846b14cb 100644
--- a/airflow-ctl/tests/airflow_ctl/ctl/commands/test_task_command.py
+++ b/airflow-ctl/tests/airflow_ctl/ctl/commands/test_task_command.py
@@ -76,6 +76,22 @@ class TestStatesForDagRun:
pool="default_pool",
pool_slots=1,
executor_config="{}",
+ duration=None,
+ hostname=None,
+ unixname=None,
+ queue=None,
+ priority_weight=None,
+ operator=None,
+ operator_name=None,
+ queued_when=None,
+ scheduled_when=None,
+ pid=None,
+ executor=None,
+ note=None,
+ rendered_map_index=None,
+ trigger=None,
+ triggerer_job=None,
+ dag_version=None,
)
def _make_api_client(self, task_instances: list[TaskInstanceResponse]) ->
mock.MagicMock:
diff --git
a/airflow-ctl/tests/airflow_ctl/ctl/commands/test_variable_command.py
b/airflow-ctl/tests/airflow_ctl/ctl/commands/test_variable_command.py
index f573585935f..3e7b2714f94 100644
--- a/airflow-ctl/tests/airflow_ctl/ctl/commands/test_variable_command.py
+++ b/airflow-ctl/tests/airflow_ctl/ctl/commands/test_variable_command.py
@@ -41,10 +41,7 @@ class TestCliVariableCommands:
variable_collection_response = VariableCollectionResponse(
variables=[
VariableResponse(
- key=key,
- value=value,
- description=description,
- is_encrypted=False,
+ key=key, value=value, description=description,
is_encrypted=False, team_name=None
),
],
total_entries=1,
diff --git a/devel-common/src/tests_common/pytest_plugin.py
b/devel-common/src/tests_common/pytest_plugin.py
index f10a6d10dbc..f7f6e03acdd 100644
--- a/devel-common/src/tests_common/pytest_plugin.py
+++ b/devel-common/src/tests_common/pytest_plugin.py
@@ -2696,6 +2696,9 @@ def create_runtime_ti(mocked_parse):
"run_after": run_after, # type: ignore
"conf": conf,
"consumed_asset_events": [],
+ # Nullable-but-required in the generated schema, so they
must be
+ # passed explicitly; guarded for older Task SDKs that lack
them.
+ **{f: None for f in ("end_date", "partition_key") if f in
DagRun.model_fields},
**({"state": DagRunState.RUNNING} if "state" in
DagRun.model_fields else {}),
}
),
diff --git a/providers/amazon/tests/unit/amazon/aws/hooks/test_base_aws.py
b/providers/amazon/tests/unit/amazon/aws/hooks/test_base_aws.py
index e0984f88e24..be68d99af99 100644
--- a/providers/amazon/tests/unit/amazon/aws/hooks/test_base_aws.py
+++ b/providers/amazon/tests/unit/amazon/aws/hooks/test_base_aws.py
@@ -467,6 +467,12 @@ class TestAwsBaseHook:
mock_supervisor_comms.send.return_value = ConnectionResult(
conn_id="aws_default",
conn_type="aws",
+ host=None,
+ schema=None,
+ login=None,
+ password=None,
+ port=None,
+ extra=None,
)
with mock.patch.dict(os.environ, env_var, clear=True):
dag_run_key = self.fetch_tags()["DagRunKey"]
diff --git
a/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
b/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
index a6b4fa4af61..094db9cb582 100644
--- a/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
+++ b/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
@@ -1372,9 +1372,17 @@ class TestOpenLineageListenerAirflow3:
"run_type": DagRunType.MANUAL,
"run_after": timezone.datetime(2023, 1, 3, 13, 1,
1),
"consumed_asset_events": [],
- **(
- {"state": SdkDagRunState.RUNNING} if "state"
in SdkDagRun.model_fields else {}
- ),
+ # Nullable-but-required on newer SDKs, absent on
older ones.
+ **{
+ field: value
+ for field, value in (
+ ("state", SdkDagRunState.RUNNING),
+ ("data_interval_start", None),
+ ("data_interval_end", None),
+ ("partition_key", None),
+ )
+ if field in SdkDagRun.model_fields
+ },
}
),
task_reschedule_count=0,
diff --git a/task-sdk/pyproject.toml b/task-sdk/pyproject.toml
index fa2201dd9ab..34a43329247 100644
--- a/task-sdk/pyproject.toml
+++ b/task-sdk/pyproject.toml
@@ -215,7 +215,7 @@ exclude_also = [
[dependency-groups]
codegen = [
- "datamodel-code-generator[http]==0.41.0",
+ "datamodel-code-generator[http]>=0.71.0",
"openapi-spec-validator>=0.7.1",
"svcs>=25.1.0",
"rich>=13.6.0",
diff --git a/task-sdk/src/airflow/sdk/api/datamodels/_generated.py
b/task-sdk/src/airflow/sdk/api/datamodels/_generated.py
index 8e5bfc1d076..cc3c7eb0a8f 100644
--- a/task-sdk/src/airflow/sdk/api/datamodels/_generated.py
+++ b/task-sdk/src/airflow/sdk/api/datamodels/_generated.py
@@ -1,6 +1,6 @@
# generated by datamodel-codegen:
# filename: http://0.0.0.0:8080/execution/openapi.json
-# version: 0.41.0
+# version: 0.71.0
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -70,12 +70,12 @@ class ConnectionResponse(BaseModel):
conn_id: Annotated[str, Field(title="Conn Id")]
conn_type: Annotated[str, Field(title="Conn Type")]
- host: Annotated[str | None, Field(title="Host")] = None
- schema_: Annotated[str | None, Field(alias="schema", title="Schema")] =
None
- login: Annotated[str | None, Field(title="Login")] = None
- password: Annotated[str | None, Field(title="Password")] = None
- port: Annotated[int | None, Field(title="Port")] = None
- extra: Annotated[str | None, Field(title="Extra")] = None
+ host: Annotated[str | None, Field(title="Host")]
+ schema_: Annotated[str | None, Field(alias="schema", title="Schema")]
+ login: Annotated[str | None, Field(title="Login")]
+ password: Annotated[str | None, Field(title="Password")]
+ port: Annotated[int | None, Field(title="Port")]
+ extra: Annotated[str | None, Field(title="Extra")]
class ConnectionTestConnectionResponse(BaseModel):
@@ -116,12 +116,12 @@ class DagResponse(BaseModel):
dag_id: Annotated[str, Field(title="Dag Id")]
is_paused: Annotated[bool, Field(title="Is Paused")]
- bundle_name: Annotated[str | None, Field(title="Bundle Name")] = None
- bundle_version: Annotated[str | None, Field(title="Bundle Version")] = None
- relative_fileloc: Annotated[str | None, Field(title="Relative Fileloc")] =
None
- owners: Annotated[str | None, Field(title="Owners")] = None
+ bundle_name: Annotated[str | None, Field(title="Bundle Name")]
+ bundle_version: Annotated[str | None, Field(title="Bundle Version")]
+ relative_fileloc: Annotated[str | None, Field(title="Relative Fileloc")]
+ owners: Annotated[str | None, Field(title="Owners")]
tags: Annotated[list[str], Field(title="Tags")]
- next_dagrun: Annotated[AwareDatetime | None, Field(title="Next Dagrun")] =
None
+ next_dagrun: Annotated[AwareDatetime | None, Field(title="Next Dagrun")]
class DagRunAssetReference(BaseModel):
@@ -134,13 +134,13 @@ class DagRunAssetReference(BaseModel):
)
run_id: Annotated[str, Field(title="Run Id")]
dag_id: Annotated[str, Field(title="Dag Id")]
- logical_date: Annotated[AwareDatetime | None, Field(title="Logical Date")]
= None
+ logical_date: Annotated[AwareDatetime | None, Field(title="Logical Date")]
start_date: Annotated[AwareDatetime, Field(title="Start Date")]
- end_date: Annotated[AwareDatetime | None, Field(title="End Date")] = None
+ end_date: Annotated[AwareDatetime | None, Field(title="End Date")]
state: Annotated[str, Field(title="State")]
- data_interval_start: Annotated[AwareDatetime | None, Field(title="Data
Interval Start")] = None
- data_interval_end: Annotated[AwareDatetime | None, Field(title="Data
Interval End")] = None
- partition_key: Annotated[str | None, Field(title="Partition Key")] = None
+ data_interval_start: Annotated[AwareDatetime | None, Field(title="Data
Interval Start")]
+ data_interval_end: Annotated[AwareDatetime | None, Field(title="Data
Interval End")]
+ partition_key: Annotated[str | None, Field(title="Partition Key")]
class DagRunState(str, Enum):
@@ -254,10 +254,10 @@ class TIAwaitingInputStatePayload(BaseModel):
model_config = ConfigDict(
extra="forbid",
)
- state: Annotated[Literal["awaiting_input"] | None, Field(title="State")] =
"awaiting_input"
+ state: Annotated[Literal["awaiting_input"], Field(title="State")] =
"awaiting_input"
timeout: Annotated[timedelta | None, Field(title="Timeout")] = None
next_method: Annotated[str, Field(title="Next Method")]
- next_kwargs: Annotated[dict[str, JsonValue] | None, Field(title="Next
Kwargs")] = None
+ next_kwargs: Annotated[dict[str, JsonValue | None] | None,
Field(title="Next Kwargs")] = None
rendered_map_index: Annotated[str | None, Field(title="Rendered Map
Index")] = None
@@ -269,13 +269,13 @@ class TIDeferredStatePayload(BaseModel):
model_config = ConfigDict(
extra="forbid",
)
- state: Annotated[Literal["deferred"] | None, Field(title="State")] =
"deferred"
+ state: Annotated[Literal["deferred"], Field(title="State")] = "deferred"
classpath: Annotated[str, Field(title="Classpath")]
- trigger_kwargs: Annotated[dict[str, JsonValue] | str | None,
Field(title="Trigger Kwargs")] = None
+ trigger_kwargs: Annotated[dict[str, JsonValue | None] | str | None,
Field(title="Trigger Kwargs")] = None
trigger_timeout: Annotated[timedelta | None, Field(title="Trigger
Timeout")] = None
queue: Annotated[str | None, Field(title="Queue")] = None
next_method: Annotated[str, Field(title="Next Method")]
- next_kwargs: Annotated[dict[str, JsonValue] | None, Field(title="Next
Kwargs")] = None
+ next_kwargs: Annotated[dict[str, JsonValue | None] | None,
Field(title="Next Kwargs")] = None
rendered_map_index: Annotated[str | None, Field(title="Rendered Map
Index")] = None
@@ -287,7 +287,7 @@ class TIEnterRunningPayload(BaseModel):
model_config = ConfigDict(
extra="forbid",
)
- state: Annotated[Literal["running"] | None, Field(title="State")] =
"running"
+ state: Annotated[Literal["running"], Field(title="State")] = "running"
hostname: Annotated[str, Field(title="Hostname")]
unixname: Annotated[str, Field(title="Unixname")]
pid: Annotated[int, Field(title="Pid")]
@@ -314,7 +314,7 @@ class TIRescheduleStatePayload(BaseModel):
model_config = ConfigDict(
extra="forbid",
)
- state: Annotated[Literal["up_for_reschedule"] | None,
Field(title="State")] = "up_for_reschedule"
+ state: Annotated[Literal["up_for_reschedule"], Field(title="State")] =
"up_for_reschedule"
reschedule_date: Annotated[AwareDatetime, Field(title="Reschedule Date")]
end_date: Annotated[AwareDatetime, Field(title="End Date")]
@@ -327,7 +327,7 @@ class TIRetryStatePayload(BaseModel):
model_config = ConfigDict(
extra="forbid",
)
- state: Annotated[Literal["up_for_retry"] | None, Field(title="State")] =
"up_for_retry"
+ state: Annotated[Literal["up_for_retry"], Field(title="State")] =
"up_for_retry"
end_date: Annotated[AwareDatetime, Field(title="End Date")]
rendered_map_index: Annotated[str | None, Field(title="Rendered Map
Index")] = None
retry_delay_seconds: Annotated[float | None, Field(title="Retry Delay
Seconds")] = None
@@ -353,7 +353,7 @@ class TISuccessStatePayload(BaseModel):
model_config = ConfigDict(
extra="forbid",
)
- state: Annotated[Literal["success"] | None, Field(title="State")] =
"success"
+ state: Annotated[Literal["success"], Field(title="State")] = "success"
end_date: Annotated[AwareDatetime, Field(title="End Date")]
task_outlets: Annotated[list[AssetProfile] | None, Field(title="Task
Outlets")] = None
outlet_events: Annotated[list[dict[str, Any]] | None, Field(title="Outlet
Events")] = None
@@ -409,7 +409,7 @@ class TaskStateStorePutBody(BaseModel):
model_config = ConfigDict(
extra="forbid",
)
- value: JsonValue
+ value: JsonValue | None
expires_at: Annotated[AwareDatetime | None, Field(title="Expires At")] =
None
@@ -421,7 +421,7 @@ class TaskStateStoreResponse(BaseModel):
model_config = ConfigDict(
extra="forbid",
)
- value: JsonValue
+ value: JsonValue | None
class TaskStatesResponse(BaseModel):
@@ -497,7 +497,7 @@ class VariablePostBody(BaseModel):
model_config = ConfigDict(
extra="forbid",
)
- val: Annotated[str | None, Field(title="Val")] = None
+ val: Annotated[str | None, Field(title="Val")]
description: Annotated[str | None, Field(title="Description")] = None
@@ -510,7 +510,7 @@ class VariableResponse(BaseModel):
extra="forbid",
)
key: Annotated[str, Field(title="Key")]
- value: Annotated[str | None, Field(title="Value")] = None
+ value: Annotated[str | None, Field(title="Value")]
class XComResponse(BaseModel):
@@ -519,12 +519,12 @@ class XComResponse(BaseModel):
"""
key: Annotated[str, Field(title="Key")]
- value: JsonValue
+ value: JsonValue | None
-class XComSequenceIndexResponse(RootModel[JsonValue]):
+class XComSequenceIndexResponse(RootModel[JsonValue | None]):
root: Annotated[
- JsonValue,
+ JsonValue | None,
Field(
description="XCom schema with minimal structure for index-based
access.",
title="XComSequenceIndexResponse",
@@ -532,13 +532,13 @@ class XComSequenceIndexResponse(RootModel[JsonValue]):
]
-class XComSequenceSliceResponse(RootModel[list[JsonValue]]):
+class XComSequenceSliceResponse(RootModel[list[JsonValue | None]]):
"""
XCom schema with minimal structure for slice-based access.
"""
root: Annotated[
- list[JsonValue],
+ list[JsonValue | None],
Field(
description="XCom schema with minimal structure for slice-based
access.",
title="XComSequenceSliceResponse",
@@ -618,7 +618,7 @@ class AssetReferenceAssetEventDagRun(BaseModel):
)
name: Annotated[str, Field(title="Name")]
uri: Annotated[str, Field(title="Uri")]
- extra: Annotated[dict[str, JsonValue], Field(title="Extra")]
+ extra: Annotated[dict[str, JsonValue | None], Field(title="Extra")]
class AssetResponse(BaseModel):
@@ -629,7 +629,7 @@ class AssetResponse(BaseModel):
name: Annotated[str, Field(title="Name")]
uri: Annotated[str, Field(title="Uri")]
group: Annotated[str, Field(title="Group")]
- extra: Annotated[dict[str, JsonValue] | None, Field(title="Extra")] = None
+ extra: Annotated[dict[str, JsonValue | None] | None, Field(title="Extra")]
= None
class AssetStateStorePutBody(BaseModel):
@@ -640,7 +640,7 @@ class AssetStateStorePutBody(BaseModel):
model_config = ConfigDict(
extra="forbid",
)
- value: JsonValue
+ value: JsonValue | None
class AssetStateStoreResponse(BaseModel):
@@ -651,7 +651,7 @@ class AssetStateStoreResponse(BaseModel):
model_config = ConfigDict(
extra="forbid",
)
- value: JsonValue
+ value: JsonValue | None
class ConnectionTestResultBody(BaseModel):
@@ -688,8 +688,8 @@ class HITLDetailResponse(BaseModel):
response_received: Annotated[bool, Field(title="Response Received")]
responded_by_user: HITLUser | None = None
- responded_at: Annotated[AwareDatetime | None, Field(title="Responded At")]
= None
- chosen_options: Annotated[list[str] | None, Field(title="Chosen Options")]
= None
+ responded_at: Annotated[AwareDatetime | None, Field(title="Responded At")]
+ chosen_options: Annotated[list[str] | None, Field(title="Chosen Options")]
params_input: Annotated[dict[str, Any] | None, Field(title="Params
Input")] = None
@@ -719,11 +719,11 @@ class AssetEventDagRunReference(BaseModel):
extra="forbid",
)
asset: AssetReferenceAssetEventDagRun
- extra: Annotated[dict[str, JsonValue], Field(title="Extra")]
- source_task_id: Annotated[str | None, Field(title="Source Task Id")] = None
- source_dag_id: Annotated[str | None, Field(title="Source Dag Id")] = None
- source_run_id: Annotated[str | None, Field(title="Source Run Id")] = None
- source_map_index: Annotated[int | None, Field(title="Source Map Index")] =
None
+ extra: Annotated[dict[str, JsonValue | None], Field(title="Extra")]
+ source_task_id: Annotated[str | None, Field(title="Source Task Id")]
+ source_dag_id: Annotated[str | None, Field(title="Source Dag Id")]
+ source_run_id: Annotated[str | None, Field(title="Source Run Id")]
+ source_map_index: Annotated[int | None, Field(title="Source Map Index")]
source_aliases: Annotated[list[AssetAliasReferenceAssetEventDagRun],
Field(title="Source Aliases")]
timestamp: Annotated[AwareDatetime, Field(title="Timestamp")]
partition_key: Annotated[str | None, Field(title="Partition Key")] = None
@@ -736,7 +736,7 @@ class AssetEventResponse(BaseModel):
id: Annotated[int, Field(title="Id")]
timestamp: Annotated[AwareDatetime, Field(title="Timestamp")]
- extra: Annotated[dict[str, JsonValue] | None, Field(title="Extra")] = None
+ extra: Annotated[dict[str, JsonValue | None] | None, Field(title="Extra")]
= None
asset: AssetResponse
created_dagruns: Annotated[list[DagRunAssetReference],
Field(title="Created Dagruns")]
source_task_id: Annotated[str | None, Field(title="Source Task Id")] = None
@@ -764,19 +764,19 @@ class DagRun(BaseModel):
)
dag_id: Annotated[str, Field(title="Dag Id")]
run_id: Annotated[str, Field(title="Run Id")]
- logical_date: Annotated[AwareDatetime | None, Field(title="Logical Date")]
= None
- data_interval_start: Annotated[AwareDatetime | None, Field(title="Data
Interval Start")] = None
- data_interval_end: Annotated[AwareDatetime | None, Field(title="Data
Interval End")] = None
+ logical_date: Annotated[AwareDatetime | None, Field(title="Logical Date")]
+ data_interval_start: Annotated[AwareDatetime | None, Field(title="Data
Interval Start")]
+ data_interval_end: Annotated[AwareDatetime | None, Field(title="Data
Interval End")]
run_after: Annotated[AwareDatetime, Field(title="Run After")]
- start_date: Annotated[AwareDatetime | None, Field(title="Start Date")] =
None
- end_date: Annotated[AwareDatetime | None, Field(title="End Date")] = None
+ start_date: Annotated[AwareDatetime | None, Field(title="Start Date")]
+ end_date: Annotated[AwareDatetime | None, Field(title="End Date")]
clear_number: Annotated[int | None, Field(title="Clear Number")] = 0
run_type: DagRunType
state: DagRunState
conf: Annotated[dict[str, Any] | None, Field(title="Conf")] = None
triggering_user_name: Annotated[str | None, Field(title="Triggering User
Name")] = None
consumed_asset_events: Annotated[list[AssetEventDagRunReference],
Field(title="Consumed Asset Events")]
- partition_key: Annotated[str | None, Field(title="Partition Key")] = None
+ partition_key: Annotated[str | None, Field(title="Partition Key")]
partition_date: Annotated[AwareDatetime | None, Field(title="Partition
Date")] = None
note: Annotated[str | None, Field(title="Note")] = None
team_name: Annotated[str | None, Field(title="Team Name")] = None
diff --git a/task-sdk/src/airflow/sdk/execution_time/schema/schema.json
b/task-sdk/src/airflow/sdk/execution_time/schema/schema.json
index 0ec8fe4e49a..8d606cf9680 100644
--- a/task-sdk/src/airflow/sdk/execution_time/schema/schema.json
+++ b/task-sdk/src/airflow/sdk/execution_time/schema/schema.json
@@ -34,7 +34,14 @@
"anyOf": [
{
"additionalProperties": {
- "$ref": "#/$defs/JsonValue"
+ "anyOf": [
+ {
+ "$ref": "#/$defs/JsonValue"
+ },
+ {
+ "type": "null"
+ }
+ ]
},
"type": "object"
},
@@ -187,34 +194,6 @@
"title": "AssetProfile",
"type": "object"
},
- "AssetReferenceAssetEventDagRun": {
- "additionalProperties": false,
- "description": "Schema for AssetModel used in
AssetEventDagRunReference.",
- "properties": {
- "name": {
- "title": "Name",
- "type": "string"
- },
- "uri": {
- "title": "Uri",
- "type": "string"
- },
- "extra": {
- "additionalProperties": {
- "$ref": "#/$defs/JsonValue"
- },
- "title": "Extra",
- "type": "object"
- }
- },
- "required": [
- "name",
- "uri",
- "extra"
- ],
- "title": "AssetReferenceAssetEventDagRun",
- "type": "object"
- },
"AssetResponse": {
"description": "Asset schema for responses with fields that are needed
for Runtime.",
"properties": {
@@ -234,7 +213,14 @@
"anyOf": [
{
"additionalProperties": {
- "$ref": "#/$defs/JsonValue"
+ "anyOf": [
+ {
+ "$ref": "#/$defs/JsonValue"
+ },
+ {
+ "type": "null"
+ }
+ ]
},
"type": "object"
},
@@ -273,7 +259,14 @@
"anyOf": [
{
"additionalProperties": {
- "$ref": "#/$defs/JsonValue"
+ "anyOf": [
+ {
+ "$ref": "#/$defs/JsonValue"
+ },
+ {
+ "type": "null"
+ }
+ ]
},
"type": "object"
},
@@ -304,7 +297,14 @@
"description": "Response to GetAssetStateStore; wraps the generated API
response for supervisor to worker comms.",
"properties": {
"value": {
- "$ref": "#/$defs/JsonValue"
+ "anyOf": [
+ {
+ "$ref": "#/$defs/JsonValue"
+ },
+ {
+ "type": "null"
+ }
+ ]
},
"type": {
"const": "AssetStateStoreResult",
@@ -347,17 +347,10 @@
"description": "Park a task instance awaiting human input
(Human-in-the-loop), without a trigger.",
"properties": {
"state": {
- "anyOf": [
- {
- "const": "awaiting_input",
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
+ "const": "awaiting_input",
"default": "awaiting_input",
- "title": "State"
+ "title": "State",
+ "type": "string"
},
"timeout": {
"anyOf": [
@@ -380,7 +373,14 @@
"anyOf": [
{
"additionalProperties": {
- "$ref": "#/$defs/JsonValue"
+ "anyOf": [
+ {
+ "$ref": "#/$defs/JsonValue"
+ },
+ {
+ "type": "null"
+ }
+ ]
},
"type": "object"
},
@@ -513,6 +513,97 @@
"title": "ClearTaskStateStore",
"type": "object"
},
+ "ConnectionResponse": {
+ "description": "Connection schema for responses with fields that are
needed for Runtime.",
+ "properties": {
+ "conn_id": {
+ "title": "Conn Id",
+ "type": "string"
+ },
+ "conn_type": {
+ "title": "Conn Type",
+ "type": "string"
+ },
+ "host": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Host"
+ },
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Schema"
+ },
+ "login": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Login"
+ },
+ "password": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Password"
+ },
+ "port": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Port"
+ },
+ "extra": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Extra"
+ }
+ },
+ "required": [
+ "conn_id",
+ "conn_type",
+ "host",
+ "schema",
+ "login",
+ "password",
+ "port",
+ "extra"
+ ],
+ "title": "ConnectionResponse",
+ "type": "object"
+ },
"ConnectionResult": {
"properties": {
"conn_id": {
@@ -532,7 +623,6 @@
"type": "null"
}
],
- "default": null,
"title": "Host"
},
"schema": {
@@ -544,7 +634,6 @@
"type": "null"
}
],
- "default": null,
"title": "Schema"
},
"login": {
@@ -556,7 +645,6 @@
"type": "null"
}
],
- "default": null,
"title": "Login"
},
"password": {
@@ -568,7 +656,6 @@
"type": "null"
}
],
- "default": null,
"title": "Password"
},
"port": {
@@ -580,7 +667,6 @@
"type": "null"
}
],
- "default": null,
"title": "Port"
},
"extra": {
@@ -592,7 +678,6 @@
"type": "null"
}
],
- "default": null,
"title": "Extra"
},
"type": {
@@ -604,7 +689,13 @@
},
"required": [
"conn_id",
- "conn_type"
+ "conn_type",
+ "host",
+ "schema",
+ "login",
+ "password",
+ "port",
+ "extra"
],
"title": "ConnectionResult",
"type": "object"
@@ -957,7 +1048,6 @@
"type": "null"
}
],
- "default": null,
"title": "Bundle Name"
},
"bundle_version": {
@@ -969,7 +1059,6 @@
"type": "null"
}
],
- "default": null,
"title": "Bundle Version"
},
"relative_fileloc": {
@@ -981,7 +1070,6 @@
"type": "null"
}
],
- "default": null,
"title": "Relative Fileloc"
},
"owners": {
@@ -993,7 +1081,6 @@
"type": "null"
}
],
- "default": null,
"title": "Owners"
},
"tags": {
@@ -1013,7 +1100,6 @@
"type": "null"
}
],
- "default": null,
"title": "Next Dagrun"
},
"type": {
@@ -1026,7 +1112,12 @@
"required": [
"dag_id",
"is_paused",
- "tags"
+ "bundle_name",
+ "bundle_version",
+ "relative_fileloc",
+ "owners",
+ "tags",
+ "next_dagrun"
],
"title": "DagResult",
"type": "object"
@@ -1053,7 +1144,6 @@
"type": "null"
}
],
- "default": null,
"title": "Logical Date"
},
"start_date": {
@@ -1071,7 +1161,6 @@
"type": "null"
}
],
- "default": null,
"title": "End Date"
},
"state": {
@@ -1088,7 +1177,6 @@
"type": "null"
}
],
- "default": null,
"title": "Data Interval Start"
},
"data_interval_end": {
@@ -1101,7 +1189,6 @@
"type": "null"
}
],
- "default": null,
"title": "Data Interval End"
},
"partition_key": {
@@ -1113,15 +1200,19 @@
"type": "null"
}
],
- "default": null,
"title": "Partition Key"
}
},
"required": [
"run_id",
"dag_id",
+ "logical_date",
"start_date",
- "state"
+ "end_date",
+ "state",
+ "data_interval_start",
+ "data_interval_end",
+ "partition_key"
],
"title": "DagRunAssetReference",
"type": "object"
@@ -1176,7 +1267,6 @@
"type": "null"
}
],
- "default": null,
"title": "Logical Date"
},
"data_interval_start": {
@@ -1189,7 +1279,6 @@
"type": "null"
}
],
- "default": null,
"title": "Data Interval Start"
},
"data_interval_end": {
@@ -1202,7 +1291,6 @@
"type": "null"
}
],
- "default": null,
"title": "Data Interval End"
},
"run_after": {
@@ -1220,7 +1308,6 @@
"type": "null"
}
],
- "default": null,
"title": "Start Date"
},
"end_date": {
@@ -1233,7 +1320,6 @@
"type": "null"
}
],
- "default": null,
"title": "End Date"
},
"clear_number": {
@@ -1295,7 +1381,6 @@
"type": "null"
}
],
- "default": null,
"title": "Partition Key"
},
"partition_date": {
@@ -1345,10 +1430,16 @@
"required": [
"dag_id",
"run_id",
+ "logical_date",
+ "data_interval_start",
+ "data_interval_end",
"run_after",
+ "start_date",
+ "end_date",
"run_type",
"state",
- "consumed_asset_events"
+ "consumed_asset_events",
+ "partition_key"
],
"title": "DagRunResult",
"type": "object"
@@ -1400,17 +1491,10 @@
"description": "Update a task instance state to deferred.",
"properties": {
"state": {
- "anyOf": [
- {
- "const": "deferred",
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
+ "const": "deferred",
"default": "deferred",
- "title": "State"
+ "title": "State",
+ "type": "string"
},
"classpath": {
"title": "Classpath",
@@ -1420,7 +1504,14 @@
"anyOf": [
{
"additionalProperties": {
- "$ref": "#/$defs/JsonValue"
+ "anyOf": [
+ {
+ "$ref": "#/$defs/JsonValue"
+ },
+ {
+ "type": "null"
+ }
+ ]
},
"type": "object"
},
@@ -1467,7 +1558,14 @@
"anyOf": [
{
"additionalProperties": {
- "$ref": "#/$defs/JsonValue"
+ "anyOf": [
+ {
+ "$ref": "#/$defs/JsonValue"
+ },
+ {
+ "type": "null"
+ }
+ ]
},
"type": "object"
},
@@ -3388,17 +3486,10 @@
"description": "Update a task instance state to
reschedule/up_for_reschedule.",
"properties": {
"state": {
- "anyOf": [
- {
- "const": "up_for_reschedule",
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
+ "const": "up_for_reschedule",
"default": "up_for_reschedule",
- "title": "State"
+ "title": "State",
+ "type": "string"
},
"reschedule_date": {
"format": "date-time",
@@ -3441,17 +3532,10 @@
"description": "Update a task instance state to up_for_retry.",
"properties": {
"state": {
- "anyOf": [
- {
- "const": "up_for_retry",
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
+ "const": "up_for_retry",
"default": "up_for_retry",
- "title": "State"
+ "title": "State",
+ "type": "string"
},
"end_date": {
"format": "date-time",
@@ -3825,17 +3909,10 @@
"description": "Update a task's state to success. Includes task_outlets
and outlet_events for registering asset events.",
"properties": {
"state": {
- "anyOf": [
- {
- "const": "success",
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
+ "const": "success",
"default": "success",
- "title": "State"
+ "title": "State",
+ "type": "string"
},
"end_date": {
"format": "date-time",
@@ -4132,7 +4209,14 @@
"description": "Response to GetTaskStateStore; wraps the generated API
response for supervisor to worker comms.",
"properties": {
"value": {
- "$ref": "#/$defs/JsonValue"
+ "anyOf": [
+ {
+ "$ref": "#/$defs/JsonValue"
+ },
+ {
+ "type": "null"
+ }
+ ]
},
"type": {
"const": "TaskStateStoreResult",
@@ -4357,6 +4441,33 @@
"title": "VariableKeysResult",
"type": "object"
},
+ "VariableResponse": {
+ "additionalProperties": false,
+ "description": "Variable schema for responses with fields that are
needed for Runtime.",
+ "properties": {
+ "key": {
+ "title": "Key",
+ "type": "string"
+ },
+ "value": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Value"
+ }
+ },
+ "required": [
+ "key",
+ "value"
+ ],
+ "title": "VariableResponse",
+ "type": "object"
+ },
"VariableResult": {
"additionalProperties": false,
"properties": {
@@ -4373,7 +4484,6 @@
"type": "null"
}
],
- "default": null,
"title": "Value"
},
"type": {
@@ -4384,7 +4494,8 @@
}
},
"required": [
- "key"
+ "key",
+ "value"
],
"title": "VariableResult",
"type": "object"
@@ -4416,7 +4527,14 @@
"type": "string"
},
"value": {
- "$ref": "#/$defs/JsonValue"
+ "anyOf": [
+ {
+ "$ref": "#/$defs/JsonValue"
+ },
+ {
+ "type": "null"
+ }
+ ]
},
"type": {
"const": "XComResult",
@@ -4472,97 +4590,6 @@
"title": "XComSequenceSliceResult",
"type": "object"
},
- "ConnectionResponse": {
- "description": "Connection schema for responses with fields that are
needed for Runtime.",
- "properties": {
- "conn_id": {
- "title": "Conn Id",
- "type": "string"
- },
- "conn_type": {
- "title": "Conn Type",
- "type": "string"
- },
- "host": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Host"
- },
- "schema": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Schema"
- },
- "login": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Login"
- },
- "password": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Password"
- },
- "port": {
- "anyOf": [
- {
- "type": "integer"
- },
- {
- "type": "null"
- }
- ],
- "title": "Port"
- },
- "extra": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Extra"
- }
- },
- "required": [
- "conn_id",
- "conn_type",
- "host",
- "schema",
- "login",
- "password",
- "port",
- "extra"
- ],
- "title": "ConnectionResponse",
- "type": "object"
- },
"AssetEventDagRunReference": {
"additionalProperties": false,
"description": "Schema for AssetEvent model used in DagRun.",
@@ -4659,6 +4686,34 @@
"title": "AssetEventDagRunReference",
"type": "object"
},
+ "AssetReferenceAssetEventDagRun": {
+ "additionalProperties": false,
+ "description": "Schema for AssetModel used in
AssetEventDagRunReference.",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "type": "string"
+ },
+ "uri": {
+ "title": "Uri",
+ "type": "string"
+ },
+ "extra": {
+ "additionalProperties": {
+ "$ref": "#/$defs/JsonValue"
+ },
+ "title": "Extra",
+ "type": "object"
+ }
+ },
+ "required": [
+ "name",
+ "uri",
+ "extra"
+ ],
+ "title": "AssetReferenceAssetEventDagRun",
+ "type": "object"
+ },
"DagRun": {
"additionalProperties": false,
"description": "Schema for DagRun model with minimal required fields
needed for Runtime.",
@@ -5010,33 +5065,6 @@
],
"title": "TaskInstance",
"type": "object"
- },
- "VariableResponse": {
- "additionalProperties": false,
- "description": "Variable schema for responses with fields that are
needed for Runtime.",
- "properties": {
- "key": {
- "title": "Key",
- "type": "string"
- },
- "value": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Value"
- }
- },
- "required": [
- "key",
- "value"
- ],
- "title": "VariableResponse",
- "type": "object"
}
}
}
diff --git a/task-sdk/tests/conftest.py b/task-sdk/tests/conftest.py
index c1ef3b72c92..eed48a1554c 100644
--- a/task-sdk/tests/conftest.py
+++ b/task-sdk/tests/conftest.py
@@ -290,6 +290,8 @@ def make_ti_context() -> MakeTIContextCallable:
state=DagRunState.RUNNING,
conf=conf, # type: ignore
consumed_asset_events=list(consumed_asset_events),
+ end_date=None,
+ partition_key=None,
),
task_reschedule_count=task_reschedule_count,
max_tries=max_tries,
diff --git a/task-sdk/tests/task_sdk/api/test_client.py
b/task-sdk/tests/task_sdk/api/test_client.py
index 0f9b8130e26..7c9fb414961 100644
--- a/task-sdk/tests/task_sdk/api/test_client.py
+++ b/task-sdk/tests/task_sdk/api/test_client.py
@@ -1127,6 +1127,12 @@ class TestConnectionOperations:
json={
"conn_id": "test_conn",
"conn_type": "mysql",
+ "host": None,
+ "schema": None,
+ "login": None,
+ "password": None,
+ "port": None,
+ "extra": None,
},
)
return httpx.Response(status_code=400, json={"detail": "Bad
Request"})
@@ -1631,6 +1637,10 @@ class TestDagRunOperations:
"run_type": "scheduled",
"state": "success",
"consumed_asset_events": [],
+ "data_interval_start": None,
+ "data_interval_end": None,
+ "end_date": None,
+ "partition_key": None,
},
)
return httpx.Response(status_code=422)
@@ -1666,6 +1676,10 @@ class TestDagRunOperations:
"run_type": "scheduled",
"state": "success",
"consumed_asset_events": [],
+ "data_interval_start": None,
+ "data_interval_end": None,
+ "end_date": None,
+ "partition_key": None,
},
)
return httpx.Response(status_code=422)
diff --git a/task-sdk/tests/task_sdk/bases/test_hook.py
b/task-sdk/tests/task_sdk/bases/test_hook.py
index 351f63e039d..b15a957cd5c 100644
--- a/task-sdk/tests/task_sdk/bases/test_hook.py
+++ b/task-sdk/tests/task_sdk/bases/test_hook.py
@@ -110,6 +110,8 @@ class TestBaseHook:
login="user",
password="password",
port=443,
+ schema=None,
+ extra=None,
)
mock_supervisor_comms.asend.return_value = conn
diff --git a/task-sdk/tests/task_sdk/definitions/test_connection.py
b/task-sdk/tests/task_sdk/definitions/test_connection.py
index 5746b1b14f7..c973fc58c91 100644
--- a/task-sdk/tests/task_sdk/definitions/test_connection.py
+++ b/task-sdk/tests/task_sdk/definitions/test_connection.py
@@ -104,7 +104,16 @@ class TestConnections:
assert parsed_uri.path.lstrip("/") == "test_schema"
def test_conn_get(self, mock_supervisor_comms):
- conn_result = ConnectionResult(conn_id="mysql_conn",
conn_type="mysql", host="mysql", port=3306)
+ conn_result = ConnectionResult(
+ conn_id="mysql_conn",
+ conn_type="mysql",
+ host="mysql",
+ port=3306,
+ schema=None,
+ login=None,
+ password=None,
+ extra=None,
+ )
mock_supervisor_comms.send.return_value = conn_result
conn = Connection.get(conn_id="mysql_conn")
diff --git a/task-sdk/tests/task_sdk/execution_time/test_callback_supervisor.py
b/task-sdk/tests/task_sdk/execution_time/test_callback_supervisor.py
index 2c7a7ce0f6b..a6858abcfcd 100644
--- a/task-sdk/tests/task_sdk/execution_time/test_callback_supervisor.py
+++ b/task-sdk/tests/task_sdk/execution_time/test_callback_supervisor.py
@@ -183,7 +183,16 @@ class TestCallbackHandleRequest:
client_mock=ClientMock(
method_path="connections.get",
args=("test_conn",),
- response=ConnectionResult(conn_id="test_conn",
conn_type="mysql"),
+ response=ConnectionResult(
+ conn_id="test_conn",
+ conn_type="mysql",
+ host=None,
+ schema=None,
+ login=None,
+ password=None,
+ port=None,
+ extra=None,
+ ), # type: ignore[call-arg]
),
),
RequestCase(
@@ -192,7 +201,16 @@ class TestCallbackHandleRequest:
client_mock=ClientMock(
method_path="connections.get",
args=("test_conn",),
- response=ConnectionResult(conn_id="test_conn",
conn_type="mysql", password="secret"),
+ response=ConnectionResult(
+ conn_id="test_conn",
+ conn_type="mysql",
+ password="secret",
+ host=None,
+ schema=None,
+ login=None,
+ port=None,
+ extra=None,
+ ), # type: ignore[call-arg]
),
mask_secret_args=("secret",),
),
diff --git a/task-sdk/tests/task_sdk/execution_time/test_comms.py
b/task-sdk/tests/task_sdk/execution_time/test_comms.py
index aa7264b8750..05dd682d890 100644
--- a/task-sdk/tests/task_sdk/execution_time/test_comms.py
+++ b/task-sdk/tests/task_sdk/execution_time/test_comms.py
@@ -96,6 +96,7 @@ class TestCommsDecoder:
"state": "success",
"conf": None,
"consumed_asset_events": [],
+ "partition_key": None,
},
"max_tries": 0,
"should_retry": False,
diff --git a/task-sdk/tests/task_sdk/execution_time/test_context.py
b/task-sdk/tests/task_sdk/execution_time/test_context.py
index 1f4507e8055..f54b513093b 100644
--- a/task-sdk/tests/task_sdk/execution_time/test_context.py
+++ b/task-sdk/tests/task_sdk/execution_time/test_context.py
@@ -246,7 +246,16 @@ class TestConnectionAccessor:
accessor = ConnectionAccessor()
# Conn from the supervisor / API Server
- conn_result = ConnectionResult(conn_id="mysql_conn",
conn_type="mysql", host="mysql", port=3306)
+ conn_result = ConnectionResult(
+ conn_id="mysql_conn",
+ conn_type="mysql",
+ host="mysql",
+ port=3306,
+ schema=None,
+ login=None,
+ password=None,
+ extra=None,
+ )
mock_supervisor_comms.send.return_value = conn_result
@@ -259,7 +268,16 @@ class TestConnectionAccessor:
def test_get_method_valid_connection(self, mock_supervisor_comms):
"""Test that the get method returns the requested connection using
`conn.get`."""
accessor = ConnectionAccessor()
- conn_result = ConnectionResult(conn_id="mysql_conn",
conn_type="mysql", host="mysql", port=3306)
+ conn_result = ConnectionResult(
+ conn_id="mysql_conn",
+ conn_type="mysql",
+ host="mysql",
+ port=3306,
+ schema=None,
+ login=None,
+ password=None,
+ extra=None,
+ )
mock_supervisor_comms.send.return_value = conn_result
@@ -289,6 +307,9 @@ class TestConnectionAccessor:
host="mysql",
port=3306,
extra='{"extra_key": "extra_value"}',
+ schema=None,
+ login=None,
+ password=None,
)
mock_supervisor_comms.send.return_value = conn_result
@@ -306,7 +327,14 @@ class TestConnectionAccessor:
# Conn from the supervisor / API Server
conn_result = ConnectionResult(
- conn_id="mysql_conn", conn_type="mysql", host="mysql", port=3306,
extra="This is not JSON!"
+ conn_id="mysql_conn",
+ conn_type="mysql",
+ host="mysql",
+ port=3306,
+ extra="This is not JSON!",
+ schema=None,
+ login=None,
+ password=None,
)
mock_supervisor_comms.send.return_value = conn_result
@@ -1115,6 +1143,11 @@ class TestInletEventAccessor:
run_type="scheduled",
state="success",
consumed_asset_events=[],
+ logical_date=None,
+ data_interval_start=None,
+ data_interval_end=None,
+ end_date=None,
+ partition_key=None,
)
mock_supervisor_comms.reset_mock()
mock_supervisor_comms.send.side_effect = [dag_run_result]
@@ -1160,6 +1193,8 @@ class TestDagRunStartDateNullable:
state="queued",
conf=None,
consumed_asset_events=[],
+ end_date=None,
+ partition_key=None,
)
assert dag_run.start_date is None
@@ -1238,6 +1273,10 @@ class TestSecretsBackend:
conn_type="http",
host="example.com",
port=443,
+ schema=None,
+ login=None,
+ password=None,
+ extra=None,
)
conn_result = ConnectionResult.from_conn_response(conn_response)
mock_supervisor_comms.send.return_value = conn_result
@@ -1270,6 +1309,11 @@ class TestSecretsBackend:
conn_id="test_conn",
conn_type="postgres",
host="db.example.com",
+ schema=None,
+ login=None,
+ password=None,
+ port=None,
+ extra=None,
)
conn_result = ConnectionResult.from_conn_response(conn_response)
mock_supervisor_comms.send.return_value = conn_result
diff --git a/task-sdk/tests/task_sdk/execution_time/test_context_cache.py
b/task-sdk/tests/task_sdk/execution_time/test_context_cache.py
index aa3b20ca9ce..58c9c51e153 100644
--- a/task-sdk/tests/task_sdk/execution_time/test_context_cache.py
+++ b/task-sdk/tests/task_sdk/execution_time/test_context_cache.py
@@ -97,6 +97,8 @@ class TestConnectionCacheIntegration:
port=3306,
login="user",
password="pass",
+ schema=None,
+ extra=None,
)
mock_ensure_backends.return_value = [ExecutionAPISecretsBackend()]
@@ -281,6 +283,10 @@ class TestAsyncConnectionCache:
conn_type="mysql",
host="host",
port=3306,
+ schema=None,
+ login=None,
+ password=None,
+ extra=None,
)
# Configure asend to return the conn_result when awaited
@@ -344,7 +350,16 @@ class TestCacheDisabled:
def test_get_connection_no_cache_when_disabled(self, mock_ensure_backends,
mock_supervisor_comms):
"""Test that cache is not used when disabled."""
conn_id = "test_conn"
- conn_result = ConnectionResult(conn_id=conn_id, conn_type="mysql",
host="host")
+ conn_result = ConnectionResult(
+ conn_id=conn_id,
+ conn_type="mysql",
+ host="host",
+ schema=None,
+ login=None,
+ password=None,
+ port=None,
+ extra=None,
+ )
mock_ensure_backends.return_value = [ExecutionAPISecretsBackend()]
diff --git a/task-sdk/tests/task_sdk/execution_time/test_secrets.py
b/task-sdk/tests/task_sdk/execution_time/test_secrets.py
index 5c9cb7a22f5..b97a85f3693 100644
--- a/task-sdk/tests/task_sdk/execution_time/test_secrets.py
+++ b/task-sdk/tests/task_sdk/execution_time/test_secrets.py
@@ -36,6 +36,9 @@ class TestExecutionAPISecretsBackend:
host="example.com",
port=443,
schema="https",
+ login=None,
+ password=None,
+ extra=None,
)
conn_result = ConnectionResult.from_conn_response(conn_response)
mock_supervisor_comms.send.return_value = conn_result
diff --git a/task-sdk/tests/task_sdk/execution_time/test_supervisor.py
b/task-sdk/tests/task_sdk/execution_time/test_supervisor.py
index 7ba463567a1..f777b2d5a8a 100644
--- a/task-sdk/tests/task_sdk/execution_time/test_supervisor.py
+++ b/task-sdk/tests/task_sdk/execution_time/test_supervisor.py
@@ -1553,9 +1553,28 @@ REQUEST_TEST_CASES = [
client_mock=ClientMock(
method_path="connections.get",
args=("test_conn",),
- response=ConnectionResult(conn_id="test_conn", conn_type="mysql"),
+ response=ConnectionResult(
+ conn_id="test_conn",
+ conn_type="mysql",
+ host=None,
+ schema=None,
+ login=None,
+ password=None,
+ port=None,
+ extra=None,
+ ), # type: ignore[call-arg]
),
- expected_body={"conn_id": "test_conn", "conn_type": "mysql", "type":
"ConnectionResult"},
+ expected_body={
+ "conn_id": "test_conn",
+ "conn_type": "mysql",
+ "host": None,
+ "schema": None,
+ "login": None,
+ "password": None,
+ "port": None,
+ "extra": None,
+ "type": "ConnectionResult",
+ },
),
RequestTestCase(
message=GetConnection(conn_id="test_conn"),
@@ -1563,12 +1582,26 @@ REQUEST_TEST_CASES = [
client_mock=ClientMock(
method_path="connections.get",
args=("test_conn",),
- response=ConnectionResult(conn_id="test_conn", conn_type="mysql",
password="password"),
+ response=ConnectionResult(
+ conn_id="test_conn",
+ conn_type="mysql",
+ password="password",
+ host=None,
+ schema=None,
+ login=None,
+ port=None,
+ extra=None,
+ ), # type: ignore[call-arg]
),
expected_body={
"conn_id": "test_conn",
"conn_type": "mysql",
"password": "password",
+ "host": None,
+ "schema": None,
+ "login": None,
+ "port": None,
+ "extra": None,
"type": "ConnectionResult",
},
mask_secret_args=("password",),
@@ -1579,12 +1612,26 @@ REQUEST_TEST_CASES = [
client_mock=ClientMock(
method_path="connections.get",
args=("test_conn",),
- response=ConnectionResult(conn_id="test_conn", conn_type="mysql",
schema="mysql"), # type: ignore[call-arg]
+ response=ConnectionResult(
+ conn_id="test_conn",
+ conn_type="mysql",
+ schema="mysql",
+ host=None,
+ login=None,
+ password=None,
+ port=None,
+ extra=None,
+ ), # type: ignore[call-arg]
),
expected_body={
"conn_id": "test_conn",
"conn_type": "mysql",
"schema": "mysql",
+ "host": None,
+ "login": None,
+ "password": None,
+ "port": None,
+ "extra": None,
"type": "ConnectionResult",
},
),
@@ -2571,6 +2618,10 @@ REQUEST_TEST_CASES = [
consumed_asset_events=[],
state=DagRunState.SUCCESS,
triggering_user_name=None,
+ data_interval_start=None,
+ data_interval_end=None,
+ end_date=None,
+ partition_key=None,
),
),
test_id="get_dag_run",
@@ -2631,6 +2682,10 @@ REQUEST_TEST_CASES = [
consumed_asset_events=[],
state=DagRunState.SUCCESS,
triggering_user_name=None,
+ data_interval_start=None,
+ data_interval_end=None,
+ end_date=None,
+ partition_key=None,
)
),
),
@@ -3670,6 +3725,12 @@ def test_remote_logging_conn(remote_logging,
remote_conn, expected_env, monkeypa
# Minimal enough to pass validation, we don't care what fields
are in here for the tests
"conn_id": remote_conn,
"conn_type": "aws",
+ "host": None,
+ "schema": None,
+ "login": None,
+ "password": None,
+ "port": None,
+ "extra": None,
},
)
@@ -4007,7 +4068,7 @@ def
test_fetch_remote_logging_conn_does_not_cache_none_result(mocker):
conn_id=conn_id,
conn_type="example",
host=None,
- schema_=None,
+ schema=None,
login=None,
password=None,
port=None,
@@ -4079,7 +4140,14 @@ def test_reinit_supervisor_comms(monkeypatch,
client_with_ti_start, caplog):
subprocess.check_call([sys.executable, "-c", dedent(script)])
client_with_ti_start.connections.get.return_value = ConnectionResult(
- conn_id="test_conn", conn_type="mysql", login="a", password="password1"
+ conn_id="test_conn",
+ conn_type="mysql",
+ login="a",
+ password="password1",
+ host=None,
+ schema=None,
+ port=None,
+ extra=None,
)
proc = ActivitySubprocess.start(
dag_rel_path=os.devnull,
diff --git a/task-sdk/tests/task_sdk/execution_time/test_task_runner.py
b/task-sdk/tests/task_sdk/execution_time/test_task_runner.py
index 0031974b866..cbd194e35eb 100644
--- a/task-sdk/tests/task_sdk/execution_time/test_task_runner.py
+++ b/task-sdk/tests/task_sdk/execution_time/test_task_runner.py
@@ -2246,6 +2246,7 @@ class TestRuntimeTaskInstance:
password="passwordvalue",
schema="schemavalues",
extra='{"extra__asana__workspace": "extra1"}',
+ port=None,
)
mock_supervisor_comms.send.return_value = conn
@@ -2945,6 +2946,10 @@ class TestRuntimeTaskInstance:
run_type="scheduled",
state="success",
consumed_asset_events=[],
+ data_interval_start=None,
+ data_interval_end=None,
+ end_date=None,
+ partition_key=None,
)
mock_supervisor_comms.send.return_value =
PreviousDagRunResult(dag_run=dag_run_data)
@@ -2974,6 +2979,10 @@ class TestRuntimeTaskInstance:
run_type="scheduled",
state="success",
consumed_asset_events=[],
+ data_interval_start=None,
+ data_interval_end=None,
+ end_date=None,
+ partition_key=None,
)
mock_supervisor_comms.send.return_value =
PreviousDagRunResult(dag_run=dag_run_data)
diff --git a/ts-sdk/src/generated/supervisor.ts
b/ts-sdk/src/generated/supervisor.ts
index ab2632831ab..049b0c1ce92 100644
--- a/ts-sdk/src/generated/supervisor.ts
+++ b/ts-sdk/src/generated/supervisor.ts
@@ -26,18 +26,13 @@ export type Name = string;
export type Id = number;
export type Timestamp = string;
export type Extra = {
- [k: string]: JsonValue;
+ [k: string]: unknown;
} | null;
-/**
- * This interface was referenced by `SupervisorWireSchema`'s JSON-Schema
- * via the `definition` "JsonValue".
- */
-export type JsonValue = unknown;
export type Name1 = string;
export type Uri = string;
export type Group = string;
export type Extra1 = {
- [k: string]: JsonValue;
+ [k: string]: unknown;
} | null;
export type RunId = string;
export type DagId = string;
@@ -61,32 +56,30 @@ export type Uri1 = string | null;
export type Type1 = string;
export type Name3 = string;
export type Uri2 = string;
-export type Name4 = string;
-export type Uri3 = string;
export type Group1 = string;
-export type Extra3 = {
- [k: string]: JsonValue;
+export type Extra2 = {
+ [k: string]: unknown;
} | null;
export type Type2 = "AssetResult";
export type Type3 = "AssetStateStoreResult";
export type Assets = AssetResult[];
export type Type4 = "AssetsByAliasResult";
-export type State1 = "awaiting_input" | null;
+export type State1 = "awaiting_input";
export type Timeout = string | null;
export type NextMethod = string;
export type NextKwargs = {
- [k: string]: JsonValue;
+ [k: string]: unknown;
} | null;
export type RenderedMapIndex = string | null;
export type Type5 = "AwaitInputTask";
-export type Name5 = string;
+export type Name4 = string;
export type Version = string | null;
export type VersionData = {
[k: string]: unknown;
} | null;
-export type Name6 = string;
+export type Name5 = string;
export type Type6 = "ClearAssetStateStoreByName";
-export type Uri4 = string;
+export type Uri3 = string;
export type Type7 = "ClearAssetStateStoreByUri";
export type TiId = string;
export type Type8 = "ClearTaskStateStore";
@@ -97,6 +90,14 @@ export type Schema = string | null;
export type Login = string | null;
export type Password = string | null;
export type Port = number | null;
+export type Extra3 = string | null;
+export type ConnId1 = string;
+export type ConnType1 = string;
+export type Host1 = string | null;
+export type Schema1 = string | null;
+export type Login1 = string | null;
+export type Password1 = string | null;
+export type Port1 = number | null;
export type Extra4 = string | null;
export type Type9 = "ConnectionResult";
export type TiId1 = string;
@@ -113,7 +114,7 @@ export type Params = {
} | null;
export type AssignedUsers = HITLUser[] | null;
export type Id1 = string;
-export type Name7 = string;
+export type Name6 = string;
export type Type10 = "CreateHITLDetailPayload";
export type Count = number;
export type Type11 = "DRCount";
@@ -163,6 +164,13 @@ export type Conf = {
[k: string]: unknown;
} | null;
export type TriggeringUserName = string | null;
+export type Name7 = string;
+export type Uri4 = string;
+/**
+ * This interface was referenced by `SupervisorWireSchema`'s JSON-Schema
+ * via the `definition` "JsonValue".
+ */
+export type JsonValue = unknown;
export type SourceTaskId1 = string | null;
export type SourceDagId1 = string | null;
export type SourceRunId1 = string | null;
@@ -226,14 +234,6 @@ export type MaxTries = number;
export type Key = string;
export type Value = string | null;
export type Variables = VariableResponse[];
-export type ConnId1 = string;
-export type ConnType1 = string;
-export type Host1 = string | null;
-export type Schema1 = string | null;
-export type Login1 = string | null;
-export type Password1 = string | null;
-export type Port1 = number | null;
-export type Extra6 = string | null;
export type Connections = ConnectionResponse[];
export type NextMethod1 = string | null;
export type NextKwargs1 =
@@ -294,11 +294,11 @@ export type Note1 = string | null;
export type TeamName1 = string | null;
export type Type18 = "DagRunResult";
export type Type19 = "DagRunStateResult";
-export type State2 = "deferred" | null;
+export type State2 = "deferred";
export type Classpath = string;
export type TriggerKwargs =
| {
- [k: string]: JsonValue;
+ [k: string]: unknown;
}
| string
| null;
@@ -306,7 +306,7 @@ export type TriggerTimeout = string | null;
export type Queue1 = string | null;
export type NextMethod2 = string;
export type NextKwargs2 = {
- [k: string]: JsonValue;
+ [k: string]: unknown;
} | null;
export type RenderedMapIndex1 = string | null;
export type Type20 = "DeferTask";
@@ -523,12 +523,12 @@ export type Key14 = string;
export type Value1 = string | null;
export type Description = string | null;
export type Type61 = "PutVariable";
-export type State5 = "up_for_reschedule" | null;
+export type State5 = "up_for_reschedule";
export type RescheduleDate = string;
export type EndDate5 = string;
export type Type62 = "RescheduleTask";
export type Type63 = "ResendLoggingFD";
-export type State6 = "up_for_retry" | null;
+export type State6 = "up_for_retry";
export type EndDate6 = string;
export type RenderedMapIndex2 = string | null;
export type RetryDelaySeconds = number | null;
@@ -563,7 +563,7 @@ export type DagRelPath = string;
export type StartDate6 = string;
export type SentryIntegration = string;
export type Type73 = "StartupDetails";
-export type State7 = "success" | null;
+export type State7 = "success";
export type EndDate7 = string;
export type TaskOutlets = AssetProfile[] | null;
export type OutletEvents =
@@ -672,13 +672,13 @@ export interface AssetResponse {
export interface DagRunAssetReference {
run_id: RunId;
dag_id: DagId;
- logical_date?: LogicalDate;
+ logical_date: LogicalDate;
start_date: StartDate;
- end_date?: EndDate;
+ end_date: EndDate;
state: State;
- data_interval_start?: DataIntervalStart;
- data_interval_end?: DataIntervalEnd;
- partition_key?: PartitionKey;
+ data_interval_start: DataIntervalStart;
+ data_interval_end: DataIntervalEnd;
+ partition_key: PartitionKey;
}
/**
* Response to GetAssetEvent request.
@@ -710,20 +710,6 @@ export interface AssetProfile {
uri?: Uri1;
type: Type1;
}
-/**
- * Schema for AssetModel used in AssetEventDagRunReference.
- *
- * This interface was referenced by `SupervisorWireSchema`'s JSON-Schema
- * via the `definition` "AssetReferenceAssetEventDagRun".
- */
-export interface AssetReferenceAssetEventDagRun {
- name: Name3;
- uri: Uri2;
- extra: Extra2;
-}
-export interface Extra2 {
- [k: string]: JsonValue;
-}
/**
* Response to ReadXCom request.
*
@@ -731,10 +717,10 @@ export interface Extra2 {
* via the `definition` "AssetResult".
*/
export interface AssetResult {
- name: Name4;
- uri: Uri3;
+ name: Name3;
+ uri: Uri2;
group: Group1;
- extra?: Extra3;
+ extra?: Extra2;
type?: Type2;
}
/**
@@ -744,7 +730,7 @@ export interface AssetResult {
* via the `definition` "AssetStateStoreResult".
*/
export interface AssetStateStoreResult {
- value: JsonValue;
+ value: unknown;
type?: Type3;
}
/**
@@ -778,7 +764,7 @@ export interface AwaitInputTask {
* via the `definition` "BundleInfo".
*/
export interface BundleInfo {
- name: Name5;
+ name: Name4;
version?: Version;
version_data?: VersionData;
}
@@ -787,7 +773,7 @@ export interface BundleInfo {
* via the `definition` "ClearAssetStateStoreByName".
*/
export interface ClearAssetStateStoreByName {
- name: Name6;
+ name: Name5;
type?: Type6;
}
/**
@@ -795,7 +781,7 @@ export interface ClearAssetStateStoreByName {
* via the `definition` "ClearAssetStateStoreByUri".
*/
export interface ClearAssetStateStoreByUri {
- uri: Uri4;
+ uri: Uri3;
type?: Type7;
}
/**
@@ -807,18 +793,34 @@ export interface ClearTaskStateStore {
type?: Type8;
}
/**
+ * Connection schema for responses with fields that are needed for Runtime.
+ *
* This interface was referenced by `SupervisorWireSchema`'s JSON-Schema
- * via the `definition` "ConnectionResult".
+ * via the `definition` "ConnectionResponse".
*/
-export interface ConnectionResult {
+export interface ConnectionResponse {
conn_id: ConnId;
conn_type: ConnType;
- host?: Host;
- schema?: Schema;
- login?: Login;
- password?: Password;
- port?: Port;
- extra?: Extra4;
+ host: Host;
+ schema: Schema;
+ login: Login;
+ password: Password;
+ port: Port;
+ extra: Extra3;
+}
+/**
+ * This interface was referenced by `SupervisorWireSchema`'s JSON-Schema
+ * via the `definition` "ConnectionResult".
+ */
+export interface ConnectionResult {
+ conn_id: ConnId1;
+ conn_type: ConnType1;
+ host: Host1;
+ schema: Schema1;
+ login: Login1;
+ password: Password1;
+ port: Port1;
+ extra: Extra4;
type?: Type9;
}
/**
@@ -846,7 +848,7 @@ export interface CreateHITLDetailPayload {
*/
export interface HITLUser {
id: Id1;
- name: Name7;
+ name: Name6;
}
/**
* Response containing count of Dag Runs matching certain filters.
@@ -920,7 +922,7 @@ export interface DagRun {
*/
export interface AssetEventDagRunReference {
asset: AssetReferenceAssetEventDagRun;
- extra: Extra5;
+ extra: Extra6;
source_task_id: SourceTaskId1;
source_dag_id: SourceDagId1;
source_run_id: SourceRunId1;
@@ -929,9 +931,23 @@ export interface AssetEventDagRunReference {
timestamp: Timestamp1;
partition_key?: PartitionKey2;
}
+/**
+ * Schema for AssetModel used in AssetEventDagRunReference.
+ *
+ * This interface was referenced by `SupervisorWireSchema`'s JSON-Schema
+ * via the `definition` "AssetReferenceAssetEventDagRun".
+ */
+export interface AssetReferenceAssetEventDagRun {
+ name: Name7;
+ uri: Uri4;
+ extra: Extra5;
+}
export interface Extra5 {
[k: string]: JsonValue;
}
+export interface Extra6 {
+ [k: string]: JsonValue;
+}
/**
* Schema for TaskInstance model with minimal required fields needed for
Runtime.
*
@@ -1014,22 +1030,6 @@ export interface VariableResponse {
key: Key;
value: Value;
}
-/**
- * Connection schema for responses with fields that are needed for Runtime.
- *
- * This interface was referenced by `SupervisorWireSchema`'s JSON-Schema
- * via the `definition` "ConnectionResponse".
- */
-export interface ConnectionResponse {
- conn_id: ConnId1;
- conn_type: ConnType1;
- host: Host1;
- schema: Schema1;
- login: Login1;
- password: Password1;
- port: Port1;
- extra: Extra6;
-}
/**
* Email notification request for task failures/retries.
*
@@ -1086,12 +1086,12 @@ export interface Data {
export interface DagResult {
dag_id: DagId4;
is_paused: IsPaused;
- bundle_name?: BundleName4;
- bundle_version?: BundleVersion3;
- relative_fileloc?: RelativeFileloc;
- owners?: Owners;
+ bundle_name: BundleName4;
+ bundle_version: BundleVersion3;
+ relative_fileloc: RelativeFileloc;
+ owners: Owners;
tags: Tags;
- next_dagrun?: NextDagrun;
+ next_dagrun: NextDagrun;
type?: Type17;
}
/**
@@ -1101,19 +1101,19 @@ export interface DagResult {
export interface DagRunResult {
dag_id: DagId5;
run_id: RunId4;
- logical_date?: LogicalDate2;
- data_interval_start?: DataIntervalStart2;
- data_interval_end?: DataIntervalEnd2;
+ logical_date: LogicalDate2;
+ data_interval_start: DataIntervalStart2;
+ data_interval_end: DataIntervalEnd2;
run_after: RunAfter1;
- start_date?: StartDate3;
- end_date?: EndDate2;
+ start_date: StartDate3;
+ end_date: EndDate2;
clear_number?: ClearNumber1;
run_type: DagRunType;
state: DagRunState;
conf?: Conf1;
triggering_user_name?: TriggeringUserName1;
consumed_asset_events: ConsumedAssetEvents1;
- partition_key?: PartitionKey4;
+ partition_key: PartitionKey4;
partition_date?: PartitionDate1;
note?: Note1;
team_name?: TeamName1;
@@ -1788,7 +1788,7 @@ export interface TaskState {
* via the `definition` "TaskStateStoreResult".
*/
export interface TaskStateStoreResult {
- value: JsonValue;
+ value: unknown;
type?: Type79;
}
/**
@@ -1852,7 +1852,7 @@ export interface VariableKeysResult {
*/
export interface VariableResult {
key: Key19;
- value?: Value2;
+ value: Value2;
type?: Type85;
}
/**
@@ -1871,7 +1871,7 @@ export interface XComCountResponse {
*/
export interface XComResult {
key: Key20;
- value: JsonValue;
+ value: unknown;
type?: Type87;
}
/**
diff --git a/uv.lock b/uv.lock
index 41261e1ec47..7120d1597ab 100644
--- a/uv.lock
+++ b/uv.lock
@@ -2225,7 +2225,7 @@ provides-extras = ["dev"]
[package.metadata.requires-dev]
codegen = [
{ name = "apache-airflow-devel-common", editable = "devel-common" },
- { name = "datamodel-code-generator", extras = ["http"], specifier =
"==0.41.0" },
+ { name = "datamodel-code-generator", extras = ["http"], specifier =
">=0.71.0" },
]
dev = [
{ name = "apache-airflow-ctl", extras = ["dev"], editable = "airflow-ctl"
},
@@ -9061,7 +9061,7 @@ provides-extras = ["all", "datadog", "otel", "sentry",
"statsd"]
[package.metadata.requires-dev]
codegen = [
- { name = "datamodel-code-generator", extras = ["http"], specifier =
"==0.41.0" },
+ { name = "datamodel-code-generator", extras = ["http"], specifier =
">=0.71.0" },
{ name = "openapi-spec-validator", specifier = ">=0.7.1" },
{ name = "rich", specifier = ">=13.6.0" },
{ name = "svcs", specifier = ">=25.1.0" },
@@ -11397,23 +11397,22 @@ wheels = [
[[package]]
name = "datamodel-code-generator"
-version = "0.41.0"
+version = "0.71.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "argcomplete" },
- { name = "black" },
+ { name = "black", marker = "sys_platform != 'emscripten'" },
{ name = "genson" },
{ name = "inflect" },
- { name = "isort" },
+ { name = "isort", marker = "sys_platform != 'emscripten'" },
{ name = "jinja2" },
- { name = "packaging" },
{ name = "pydantic" },
{ name = "pyyaml" },
- { name = "tomli", marker = "python_full_version < '3.12'" },
+ { name = "tomli", marker = "python_full_version < '3.11'" },
]
-sdist = { url =
"https://files.pythonhosted.org/packages/21/a0/f3a08b0e2068eae40a170c8485d0a68bfe54210df4b8a67ee4fe27bae681/datamodel_code_generator-0.41.0.tar.gz",
hash =
"sha256:f5ded2baab48488c09ce91c564e486dee9145029c53016f1befb732313d66411", size
= 473910, upload-time = "2025-12-05T16:50:19.049Z" }
+sdist = { url =
"https://files.pythonhosted.org/packages/54/f5/f4ce23d99503b147c9ec514dc995a96d3b4d2a3284252ad665f875a3145d/datamodel_code_generator-0.71.0.tar.gz",
hash =
"sha256:d27cd7a0d10f9b2db74a41db7f3e050c226da9cf0afb4916a7ab56275ebacbf2", size
= 1684916, upload-time = "2026-07-24T15:32:04.334Z" }
wheels = [
- { url =
"https://files.pythonhosted.org/packages/e3/11/9cec012b7764443a7b03bf3725ea56481a3f6d45c363a15406d57d048cf9/datamodel_code_generator-0.41.0-py3-none-any.whl",
hash =
"sha256:02caf2372d298844d6080fe805770161cac9aa720f143f349cee6ca76b50e5bf", size
= 158701, upload-time = "2025-12-05T16:50:17.796Z" },
+ { url =
"https://files.pythonhosted.org/packages/c6/4d/556cb290170f41b97ce50fd872e10a266f141d7a38352bb3071e4ae61f41/datamodel_code_generator-0.71.0-py3-none-any.whl",
hash =
"sha256:680b68338d59e98a0559eeb54d8e5ca33c35b3ec0bef922ec2cc783f2cb28e9a", size
= 452379, upload-time = "2026-07-24T15:32:02.467Z" },
]
[package.optional-dependencies]