|
55 | 55 | ) |
56 | 56 | from airflow.sdk.definitions._internal.decorators import fixup_decorator_warning_stack |
57 | 57 | from airflow.sdk.definitions._internal.node import validate_key |
58 | | -from airflow.sdk.definitions._internal.types import NOTSET, ArgNotSet, validate_instance_args |
| 58 | +from airflow.sdk.definitions._internal.types import NOTSET, validate_instance_args |
59 | 59 | from airflow.sdk.definitions.edges import EdgeModifier |
60 | 60 | from airflow.sdk.definitions.mappedoperator import OperatorPartial, validate_mapping_kwargs |
61 | 61 | from airflow.sdk.definitions.param import ParamsDict |
@@ -232,63 +232,48 @@ def partial( |
232 | 232 | task_id: str, |
233 | 233 | dag: DAG | None = None, |
234 | 234 | task_group: TaskGroup | None = None, |
235 | | - start_date: datetime | ArgNotSet = NOTSET, |
236 | | - end_date: datetime | ArgNotSet = NOTSET, |
237 | | - owner: str | ArgNotSet = NOTSET, |
238 | | - email: None | str | Iterable[str] | ArgNotSet = NOTSET, |
| 235 | + start_date: datetime = ..., |
| 236 | + end_date: datetime = ..., |
| 237 | + owner: str = ..., |
| 238 | + email: None | str | Iterable[str] = ..., |
239 | 239 | params: collections.abc.MutableMapping | None = None, |
240 | | - resources: dict[str, Any] | None | ArgNotSet = NOTSET, |
241 | | - trigger_rule: str | ArgNotSet = NOTSET, |
242 | | - depends_on_past: bool | ArgNotSet = NOTSET, |
243 | | - ignore_first_depends_on_past: bool | ArgNotSet = NOTSET, |
244 | | - wait_for_past_depends_before_skipping: bool | ArgNotSet = NOTSET, |
245 | | - wait_for_downstream: bool | ArgNotSet = NOTSET, |
246 | | - retries: int | None | ArgNotSet = NOTSET, |
247 | | - queue: str | ArgNotSet = NOTSET, |
248 | | - pool: str | ArgNotSet = NOTSET, |
249 | | - pool_slots: int | ArgNotSet = NOTSET, |
250 | | - execution_timeout: timedelta | None | ArgNotSet = NOTSET, |
251 | | - max_retry_delay: None | timedelta | float | ArgNotSet = NOTSET, |
252 | | - retry_delay: timedelta | float | ArgNotSet = NOTSET, |
253 | | - retry_exponential_backoff: bool | ArgNotSet = NOTSET, |
254 | | - priority_weight: int | ArgNotSet = NOTSET, |
255 | | - weight_rule: str | PriorityWeightStrategy | ArgNotSet = NOTSET, |
256 | | - sla: timedelta | None | ArgNotSet = NOTSET, |
257 | | - map_index_template: str | None | ArgNotSet = NOTSET, |
258 | | - max_active_tis_per_dag: int | None | ArgNotSet = NOTSET, |
259 | | - max_active_tis_per_dagrun: int | None | ArgNotSet = NOTSET, |
260 | | - on_execute_callback: None |
261 | | - | TaskStateChangeCallback |
262 | | - | list[TaskStateChangeCallback] |
263 | | - | ArgNotSet = NOTSET, |
264 | | - on_failure_callback: None |
265 | | - | TaskStateChangeCallback |
266 | | - | list[TaskStateChangeCallback] |
267 | | - | ArgNotSet = NOTSET, |
268 | | - on_success_callback: None |
269 | | - | TaskStateChangeCallback |
270 | | - | list[TaskStateChangeCallback] |
271 | | - | ArgNotSet = NOTSET, |
272 | | - on_retry_callback: None |
273 | | - | TaskStateChangeCallback |
274 | | - | list[TaskStateChangeCallback] |
275 | | - | ArgNotSet = NOTSET, |
276 | | - on_skipped_callback: None |
277 | | - | TaskStateChangeCallback |
278 | | - | list[TaskStateChangeCallback] |
279 | | - | ArgNotSet = NOTSET, |
280 | | - run_as_user: str | None | ArgNotSet = NOTSET, |
281 | | - executor: str | None | ArgNotSet = NOTSET, |
282 | | - executor_config: dict | None | ArgNotSet = NOTSET, |
283 | | - inlets: Any | None | ArgNotSet = NOTSET, |
284 | | - outlets: Any | None | ArgNotSet = NOTSET, |
285 | | - doc: str | None | ArgNotSet = NOTSET, |
286 | | - doc_md: str | None | ArgNotSet = NOTSET, |
287 | | - doc_json: str | None | ArgNotSet = NOTSET, |
288 | | - doc_yaml: str | None | ArgNotSet = NOTSET, |
289 | | - doc_rst: str | None | ArgNotSet = NOTSET, |
290 | | - task_display_name: str | None | ArgNotSet = NOTSET, |
291 | | - logger_name: str | None | ArgNotSet = NOTSET, |
| 240 | + resources: dict[str, Any] | None = ..., |
| 241 | + trigger_rule: str = ..., |
| 242 | + depends_on_past: bool = ..., |
| 243 | + ignore_first_depends_on_past: bool = ..., |
| 244 | + wait_for_past_depends_before_skipping: bool = ..., |
| 245 | + wait_for_downstream: bool = ..., |
| 246 | + retries: int | None = ..., |
| 247 | + queue: str = ..., |
| 248 | + pool: str = ..., |
| 249 | + pool_slots: int = ..., |
| 250 | + execution_timeout: timedelta | None = ..., |
| 251 | + max_retry_delay: None | timedelta | float = ..., |
| 252 | + retry_delay: timedelta | float = ..., |
| 253 | + retry_exponential_backoff: bool = ..., |
| 254 | + priority_weight: int = ..., |
| 255 | + weight_rule: str | PriorityWeightStrategy = ..., |
| 256 | + sla: timedelta | None = ..., |
| 257 | + map_index_template: str | None = ..., |
| 258 | + max_active_tis_per_dag: int | None = ..., |
| 259 | + max_active_tis_per_dagrun: int | None = ..., |
| 260 | + on_execute_callback: None | TaskStateChangeCallback | list[TaskStateChangeCallback] = ..., |
| 261 | + on_failure_callback: None | TaskStateChangeCallback | list[TaskStateChangeCallback] = ..., |
| 262 | + on_success_callback: None | TaskStateChangeCallback | list[TaskStateChangeCallback] = ..., |
| 263 | + on_retry_callback: None | TaskStateChangeCallback | list[TaskStateChangeCallback] = ..., |
| 264 | + on_skipped_callback: None | TaskStateChangeCallback | list[TaskStateChangeCallback] = ..., |
| 265 | + run_as_user: str | None = ..., |
| 266 | + executor: str | None = ..., |
| 267 | + executor_config: dict | None = ..., |
| 268 | + inlets: Any | None = ..., |
| 269 | + outlets: Any | None = ..., |
| 270 | + doc: str | None = ..., |
| 271 | + doc_md: str | None = ..., |
| 272 | + doc_json: str | None = ..., |
| 273 | + doc_yaml: str | None = ..., |
| 274 | + doc_rst: str | None = ..., |
| 275 | + task_display_name: str | None = ..., |
| 276 | + logger_name: str | None = ..., |
292 | 277 | allow_nested_operators: bool = True, |
293 | 278 | **kwargs, |
294 | 279 | ) -> OperatorPartial: ... |
@@ -330,8 +315,12 @@ def partial( |
330 | 315 | } |
331 | 316 |
|
332 | 317 | # Inject DAG-level default args into args provided to this function. |
| 318 | + # Most of the default args will be retrieved during unmapping; here we |
| 319 | + # only ensure base properties are correctly set for the scheduler. |
333 | 320 | partial_kwargs.update( |
334 | | - (k, v) for k, v in dag_default_args.items() if partial_kwargs.get(k, NOTSET) is NOTSET |
| 321 | + (k, v) |
| 322 | + for k, v in dag_default_args.items() |
| 323 | + if k not in partial_kwargs and k in BaseOperator.__init__._BaseOperatorMeta__param_names |
335 | 324 | ) |
336 | 325 |
|
337 | 326 | # Fill fields not provided by the user with default values. |
|
0 commit comments