diff --git a/airflow/templates.py b/airflow/templates.py index 6ec010f618fd3..73c8635836ee4 100644 --- a/airflow/templates.py +++ b/airflow/templates.py @@ -16,6 +16,10 @@ # specific language governing permissions and limitations # under the License. +from __future__ import annotations + +import datetime + import jinja2.nativetypes import jinja2.sandbox @@ -44,23 +48,33 @@ class SandboxedEnvironment(_AirflowEnvironmentMixin, jinja2.sandbox.SandboxedEnv """SandboxedEnvironment for Airflow task templates.""" -def ds_filter(value): +def ds_filter(value: datetime.date | datetime.time | None) -> str | None: + if value is None: + return None return value.strftime('%Y-%m-%d') -def ds_nodash_filter(value): +def ds_nodash_filter(value: datetime.date | datetime.time | None) -> str | None: + if value is None: + return None return value.strftime('%Y%m%d') -def ts_filter(value): +def ts_filter(value: datetime.date | datetime.time | None) -> str | None: + if value is None: + return None return value.isoformat() -def ts_nodash_filter(value): +def ts_nodash_filter(value: datetime.date | datetime.time | None) -> str | None: + if value is None: + return None return value.strftime('%Y%m%dT%H%M%S') -def ts_nodash_with_tz_filter(value): +def ts_nodash_with_tz_filter(value: datetime.date | datetime.time | None) -> str | None: + if value is None: + return None return value.isoformat().replace('-', '').replace(':', '')