ashb commented on a change in pull request #7633: [AIRFLOW-6989][depends on 
AIRFLOW-5944] Store UnRenderedTemplateFields in SerializedDag table
URL: https://github.com/apache/airflow/pull/7633#discussion_r391551185
 
 

 ##########
 File path: tests/serialization/test_dag_serialization.py
 ##########
 @@ -538,6 +539,77 @@ def 
test_extra_serialized_field_and_multiple_operator_links(self):
         google_link_from_plugin = simple_task.get_extra_links(test_date, 
GoogleLink.name)
         self.assertEqual("https://www.google.com";, google_link_from_plugin)
 
+    class ClassWithCustomAttributes:
+        """
+        Class for testing purpose: allows to create objects with custom 
attributes in one single statement.
+        """
+
+        def __init__(self, **kwargs):
+            for key, value in kwargs.items():
+                setattr(self, key, value)
+
+        def __str__(self):
+            return "{}({})".format(self.__class__.__name__, str(self.__dict__))
+
+        def __repr__(self):
+            return self.__str__()
+
+        def __eq__(self, other):
+            return self.__dict__ == other.__dict__
+
+        def __ne__(self, other):
+            return not self.__eq__(other)
+
+    @parameterized.expand([
+        (None, None),
+        ([], []),
+        ({}, {}),
+        ("{{ task.task_id }}", "{{ task.task_id }}"),
+        (["{{ task.task_id }}", "{{ task.task_id }}"]),
+        ({"foo": "{{ task.task_id }}"}, {"foo": "{{ task.task_id }}"}),
+        ({"foo": {"bar": "{{ task.task_id }}"}}, {"foo": {"bar": "{{ 
task.task_id }}"}}),
+        (
+            [{"foo1": {"bar": "{{ task.task_id }}"}}, {"foo2": {"bar": "{{ 
task.task_id }}"}}],
+            [{"foo1": {"bar": "{{ task.task_id }}"}}, {"foo2": {"bar": "{{ 
task.task_id }}"}}],
+        ),
+        (
+            {"foo": {"bar": {"{{ task.task_id }}": ["sar"]}}},
+            {"foo": {"bar": {"{{ task.task_id }}": ["sar"]}}}),
+        (
+            ClassWithCustomAttributes(
+                att1="{{ task.task_id }}", att2="{{ task.task_id }}", 
template_fields=["att1"]),
+            "ClassWithCustomAttributes("
+            "{'att1': '{{ task.task_id }}', 'att2': '{{ task.task_id }}', 
'template_fields': ['att1']})",
+        ),
+        (
+            
ClassWithCustomAttributes(nested1=ClassWithCustomAttributes(att1="{{ 
task.task_id }}",
+                                                                        
att2="{{ task.task_id }}",
+                                                                        
template_fields=["att1"]),
+                                      
nested2=ClassWithCustomAttributes(att3="{{ task.task_id }}",
+                                                                        
att4="{{ task.task_id }}",
+                                                                        
template_fields=["att3"]),
+                                      template_fields=["nested1"]),
+            "ClassWithCustomAttributes("
+            "{'nested1': ClassWithCustomAttributes({'att1': '{{ task.task_id 
}}', "
+            "'att2': '{{ task.task_id }}', 'template_fields': ['att1']}), "
+            "'nested2': ClassWithCustomAttributes({'att3': '{{ task.task_id 
}}', "
+            "'att4': '{{ task.task_id }}', 'template_fields': ['att3']}), 
'template_fields': ['nested1']})",
+        ),
+    ])
+    def test_templated_fields_exist_in_serialized_dag(self, templated_field, 
expected_field):
+        """
+        Test that templated_fields exists for all Operators in Serialized DAG
 
 Review comment:
   ```suggestion
           Test that templated_fields exists for all Operators in Serialized DAG
           
           Since we don't want to inflate arbitrary python objects (it poses a 
RCE/security risk etc.) we want check that non-"basic" objects are turned in to 
strings after deserializing.
   ```

----------------------------------------------------------------
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:
[email protected]


With regards,
Apache Git Services

Reply via email to