DAGify.py (78 lines of code) (raw):
#!/usr/bin/env python3
# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import os
import click
from dagify.converter import ControlM, Automic
from dagify.converter.report_generator import Report
CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help'])
@click.command(context_settings=CONTEXT_SETTINGS)
@click.option("-s",
"--source-path",
default=lambda: os.environ.get("AS_SOURCE_PATH", "./source"),
help="Path to source files for conversion",
show_default="{}".format(
os.environ.get("AS_SOURCE_PATH",
"./source")))
@click.option("-o",
"--output-path",
default=lambda: os.environ.get("AS_OUTPUT_PATH", "./output"),
help="Path to output files after conversion.",
show_default="{}".format(
os.environ.get("AS_OUTPUT_PATH",
"./output")))
@click.option("-c",
"--config-file",
default=lambda: os.environ.get("AS_CONFIG_FILE",
"./config.yaml"),
help="Path to dagify configuration file.",
show_default="{}".format(
os.environ.get("AS_CONFIG_FILE",
"./config.yaml")))
@click.option("-t",
"--templates",
default=lambda: os.environ.get("AS_TEMPLATES_PATH",
"./dagify/templates"),
help="Path to dagify configuration file.",
show_default="{}".format(
os.environ.get("AS_TEMPLATES_PATH",
"./dagify/templates")))
@click.option("-d",
"--dag-divider",
help="Which field in Job Definition should be used to divide up DAGS.")
@click.option("-r",
"--report",
is_flag=True,
default=False,
help="Generate report in txt and json format which \
gives an overview of job_types converted")
@click.option("--tool",
type=click.Choice(['controlm', 'automic']), # Restrict input to these choices
default=lambda: os.environ.get("AS_TYPE", "controlm"), # Default to 'ctrl-m'
help="Type of conversion ('controlm' or 'automic')",
show_default="{}".format(os.environ.get("AS_TYPE", "controlm")))
def dagify(source_path, output_path, config_file, templates, dag_divider, report, tool):
"""Run dagify."""
print("Run DAGify Engine")
if tool == "controlm":
ControlM(
source_path=source_path,
output_path=output_path,
config_file=config_file,
templates_path=templates,
dag_divider=dag_divider,
)
elif tool == "automic":
Automic(
source_path=source_path,
output_path=output_path,
config_file=config_file,
templates_path=templates,
dag_divider=dag_divider,
)
if report:
Report(
source_path=source_path,
output_path=output_path,
config_file=config_file,
templates_path=templates,
dag_divider=dag_divider,
)
if __name__ == '__main__':
dagify()