diff --git a/airflow/serialization/helpers.py b/airflow/serialization/helpers.py index d8e6afdc0a43b..80f949dee3555 100644 --- a/airflow/serialization/helpers.py +++ b/airflow/serialization/helpers.py @@ -32,9 +32,10 @@ def serialize_template_field(template_field: Any) -> str | dict | list | int | f def is_jsonable(x): try: json.dumps(x) - return True except (TypeError, OverflowError): return False + else: + return True if not is_jsonable(template_field): return str(template_field) diff --git a/airflow/serialization/serde.py b/airflow/serialization/serde.py index 8d0ed100ac078..a9a09d86db530 100644 --- a/airflow/serialization/serde.py +++ b/airflow/serialization/serde.py @@ -300,14 +300,13 @@ def _stringify(classname: str, version: int, value: T | None) -> str: s = f"{classname}@version={version}(" if isinstance(value, _primitives): - s += f"{value})" + s += f"{value}" elif isinstance(value, _builtin_collections): # deserialized values can be != str s += ",".join(str(deserialize(value, full=False))) elif isinstance(value, dict): - for k, v in value.items(): - s += f"{k}={deserialize(v, full=False)}," - s = s[:-1] + ")" + s += ",".join(f"{k}={deserialize(v, full=False)}" for k, v in value.items()) + s += ")" return s diff --git a/airflow/serialization/serialized_objects.py b/airflow/serialization/serialized_objects.py index 7e403e835caa0..5feb000edc091 100644 --- a/airflow/serialization/serialized_objects.py +++ b/airflow/serialization/serialized_objects.py @@ -1182,7 +1182,7 @@ def _deserialize_operator_extra_links(cls, encoded_op_links: list) -> dict[str, # } # ) - _operator_link_class_path, data = list(_operator_links_source.items())[0] + _operator_link_class_path, data = next(iter(_operator_links_source.items())) if _operator_link_class_path in get_operator_extra_links(): single_op_link_class = import_string(_operator_link_class_path) elif _operator_link_class_path in plugins_manager.registered_operator_link_classes: