You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2020/06/20 10:15:05 UTC
[airflow] 03/07: [AIRFLOW-4472] Use json.dumps/loads for templating
lineage data (#5253)
This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch v1-10-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
commit 82b764440d18b6591c96ee331f542e5d5320913a
Author: bolkedebruin <bo...@users.noreply.github.com>
AuthorDate: Tue May 7 22:42:28 2019 +0200
[AIRFLOW-4472] Use json.dumps/loads for templating lineage data (#5253)
jinja2 cannot use dict/lists as templates hence converting
it to json solves this while keeping complexity down.
(cherry picked from commit a6daeb544e815fe350a96d24ae3bb14aee4079a7)
---
airflow/lineage/datasets.py | 11 +++++++++--
airflow/models/baseoperator.py | 4 ++--
2 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/airflow/lineage/datasets.py b/airflow/lineage/datasets.py
index 2602770..3d61e5d 100644
--- a/airflow/lineage/datasets.py
+++ b/airflow/lineage/datasets.py
@@ -16,6 +16,7 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
+import json
import six
from typing import List
@@ -62,7 +63,11 @@ class DataSet(object):
if attr in self.attributes:
if self.context:
env = Environment()
- return env.from_string(self._data.get(attr)).render(**self.context)
+ # dump to json here in order to be able to manage dicts and lists
+ rendered = env.from_string(
+ json.dumps(self._data.get(attr))
+ ).render(**self.context)
+ return json.loads(rendered)
return self._data.get(attr)
@@ -82,7 +87,9 @@ class DataSet(object):
env = Environment()
if self.context:
for key, value in six.iteritems(attributes):
- attributes[key] = env.from_string(value).render(**self.context)
+ attributes[key] = json.loads(
+ env.from_string(json.dumps(value)).render(**self.context)
+ )
d = {
"typeName": self.type_name,
diff --git a/airflow/models/baseoperator.py b/airflow/models/baseoperator.py
index b61c980..52037c5 100644
--- a/airflow/models/baseoperator.py
+++ b/airflow/models/baseoperator.py
@@ -428,8 +428,8 @@ class BaseOperator(LoggingMixin):
self._log = logging.getLogger("airflow.task.operators")
# lineage
- self.inlets = [] # type: Iterable[DataSet]
- self.outlets = [] # type: Iterable[DataSet]
+ self.inlets = [] # type: List[DataSet]
+ self.outlets = [] # type: List[DataSet]
self.lineage_data = None
self._inlets = {