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