pipelines/components/json/Combine_lists/component.yaml

105 lines
3.3 KiB
YAML

name: Combine lists
description: Combines multiple JSON arrays into one.
inputs:
- {name: list_1, type: JsonArray, optional: true}
- {name: list_2, type: JsonArray, optional: true}
- {name: list_3, type: JsonArray, optional: true}
- {name: list_4, type: JsonArray, optional: true}
- {name: list_5, type: JsonArray, optional: true}
outputs:
- {name: Output, type: JsonArray}
implementation:
container:
image: python:3.8
command:
- python3
- -u
- -c
- |
def combine_lists(
list_1 = None,
list_2 = None,
list_3 = None,
list_4 = None,
list_5 = None,
):
"""Combines multiple JSON arrays into one.
Annotations:
author: Alexey Volkov <alexey.volkov@ark-kun.com>
"""
result = []
for list in [list_1, list_2, list_3, list_4, list_5]:
if list is not None:
result.extend(list)
return result
import json
def _serialize_json(obj) -> str:
if isinstance(obj, str):
return obj
import json
def default_serializer(obj):
if hasattr(obj, 'to_struct'):
return obj.to_struct()
else:
raise TypeError("Object of type '%s' is not JSON serializable and does not have .to_struct() method." % obj.__class__.__name__)
return json.dumps(obj, default=default_serializer, sort_keys=True)
import argparse
_parser = argparse.ArgumentParser(prog='Combine lists', description='Combines multiple JSON arrays into one.')
_parser.add_argument("--list-1", dest="list_1", type=json.loads, required=False, default=argparse.SUPPRESS)
_parser.add_argument("--list-2", dest="list_2", type=json.loads, required=False, default=argparse.SUPPRESS)
_parser.add_argument("--list-3", dest="list_3", type=json.loads, required=False, default=argparse.SUPPRESS)
_parser.add_argument("--list-4", dest="list_4", type=json.loads, required=False, default=argparse.SUPPRESS)
_parser.add_argument("--list-5", dest="list_5", type=json.loads, required=False, default=argparse.SUPPRESS)
_parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)
_parsed_args = vars(_parser.parse_args())
_output_files = _parsed_args.pop("_output_paths", [])
_outputs = combine_lists(**_parsed_args)
_outputs = [_outputs]
_output_serializers = [
_serialize_json,
]
import os
for idx, output_file in enumerate(_output_files):
try:
os.makedirs(os.path.dirname(output_file))
except OSError:
pass
with open(output_file, 'w') as f:
f.write(_output_serializers[idx](_outputs[idx]))
args:
- if:
cond: {isPresent: list_1}
then:
- --list-1
- {inputValue: list_1}
- if:
cond: {isPresent: list_2}
then:
- --list-2
- {inputValue: list_2}
- if:
cond: {isPresent: list_3}
then:
- --list-3
- {inputValue: list_3}
- if:
cond: {isPresent: list_4}
then:
- --list-4
- {inputValue: list_4}
- if:
cond: {isPresent: list_5}
then:
- --list-5
- {inputValue: list_5}
- '----output-paths'
- {outputPath: Output}