You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by GitBox <gi...@apache.org> on 2021/06/22 08:41:31 UTC

[GitHub] [airflow] ashb commented on a change in pull request #16554: Feature: add serialisation support for custom DAGs and BaseOperators

ashb commented on a change in pull request #16554:
URL: https://github.com/apache/airflow/pull/16554#discussion_r656005921



##########
File path: airflow/serialization/serialized_objects.py
##########
@@ -186,13 +186,18 @@ def serialize_to_json(
             if cls._is_excluded(value, key, object_to_serialize):
                 continue
 
-            if key in decorated_fields:
-                serialized_object[key] = cls._serialize(value)
-            else:
-                value = cls._serialize(value)
-                if isinstance(value, dict) and "__type" in value:
+            value = cls._serialize(value)
+            if key not in decorated_fields and isinstance(value, dict) and "__type" in value:
+                # Extra check to make sure for custom operators or dags that the non-standard
+                # serialized_fields still support non-primitive types (e.g. dicts).
+                if isinstance(object_to_serialize, DAG) and key in DAG.get_serialized_fields():
+                    value = value["__var"]
+                elif (
+                    isinstance(object_to_serialize, BaseOperator)
+                    and key in BaseOperator.get_serialized_fields()
+                ):

Review comment:
       I find these conditions really hard to follow -- I'm not quite sure how to change them.
   
   I don't think we need the isinstance check -- given `object_to_serialize: Union[BaseOperator, DAG]`, so  we could call `object_to_serialize.get_serialized_fileds()` couldn't we?




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org