From 2564e4256a5e65e04e4a71257fa6bc2579002622 Mon Sep 17 00:00:00 2001 From: kjeld Schouten-Lebbing Date: Sun, 16 Jan 2022 15:42:56 +0100 Subject: [PATCH] move code to init --- trueupdate/__init__.py | 90 ++++++++++++++++++++++++++++++++++++++++ trueupdate/trueupdate.py | 90 ---------------------------------------- 2 files changed, 90 insertions(+), 90 deletions(-) delete mode 100644 trueupdate/trueupdate.py diff --git a/trueupdate/__init__.py b/trueupdate/__init__.py index e69de29b..ae4dfcd7 100644 --- a/trueupdate/__init__.py +++ b/trueupdate/__init__.py @@ -0,0 +1,90 @@ +import subprocess +import sys + +class Chart(object): + def __setattr__(self, name, value): + if name == 'status': + value = value.casefold() + if 'update_available' in name: + value = True if value.casefold() == "true" else False + super(Chart, self).__setattr__(name, value) + + def new_attr(self, attr): + setattr(self, attr, attr) + +INSTALLED_CHARTS = [] +CATALOG = "ALL" +SEMVER = "minor" + +def parse_headers(charts: str): + for line in charts.split("\n"): + if line.startswith("+-"): + continue + if "name" in line.casefold(): + return [col.strip() for col in line.casefold().strip().split("|") if col and col != ""] + +def parse_charts(charts: str): + headers = parse_headers(charts) + table_data = charts.split("\n")[3:-2:] # Skip the header part of the table + for row in table_data: + row = [section.strip() for section in row.split("|") if section and section != ""] + chart = Chart() + for item in zip(headers, row): + setattr(chart, item[0], item[1]) + INSTALLED_CHARTS.append(chart) + +def check_semver(current: str, latest: str): + split_current_semver = current.split(".", 3) + split_latest_semver = latest.split(".", 3) + if split_current_semver[0] != split_latest_semver[0]: + type="major" + if SEMVER == "major": + return True + if split_current_semver[1] != split_latest_semver[1]: + type="minor" + if SEMVER != "patch": + return True + if split_current_semver[2] != split_latest_semver[2]: + type="patch" + return True + return False + + +def execute_upgrades(): + if CATALOG == "ALL": + filtered = filter(lambda a: a.update_available and a.status == "active", INSTALLED_CHARTS) + else: + filtered = filter(lambda a: a.update_available and a.status == "active" and a.catalog == CATALOG, INSTALLED_CHARTS) + for chart in filtered: + pre_update_ver = chart.human_version + post_update_ver = chart.human_latest_version + split_current_version = chart.human_version.split("_", 1) + current_version = split_current_version[1] + split_latest = chart.human_latest_version.split("_", 1) + latest_version = split_latest[1] + if check_semver(current_version, latest_version): + pre_update_ver = chart.human_version + result = subprocess.run(['cli', '-c', f'app chart_release upgrade release_name={chart.name}'], capture_output=True) + post_update_ver = chart.human_latest_version + if "Upgrade complete" not in result.stdout.decode('utf-8'): + print(f"{chart.name} failed to upgrade. \n{result.stdout.decode('utf-8')}") + else: + print(f"{chart.name} upgraded ({pre_update_ver} --> {post_update_ver})") + +def fetch_charts(): + rawcharts = subprocess.run(["cli", "-c", "app chart_release query"], stdout=subprocess.PIPE) + charts = rawcharts.stdout.decode('utf-8') + return(charts) + +def get_args(): + if len(sys.argv) == 3: + SEMVER = sys.argv[2] or "minor" + if len(sys.argv) == 2: + CATALOG = sys.argv[1] or "ALL" + +if __name__ == '__main__': + get_args() + charts = fetch_charts() + parse_charts(charts) + execute_upgrades() + exit(0) diff --git a/trueupdate/trueupdate.py b/trueupdate/trueupdate.py deleted file mode 100644 index ae4dfcd7..00000000 --- a/trueupdate/trueupdate.py +++ /dev/null @@ -1,90 +0,0 @@ -import subprocess -import sys - -class Chart(object): - def __setattr__(self, name, value): - if name == 'status': - value = value.casefold() - if 'update_available' in name: - value = True if value.casefold() == "true" else False - super(Chart, self).__setattr__(name, value) - - def new_attr(self, attr): - setattr(self, attr, attr) - -INSTALLED_CHARTS = [] -CATALOG = "ALL" -SEMVER = "minor" - -def parse_headers(charts: str): - for line in charts.split("\n"): - if line.startswith("+-"): - continue - if "name" in line.casefold(): - return [col.strip() for col in line.casefold().strip().split("|") if col and col != ""] - -def parse_charts(charts: str): - headers = parse_headers(charts) - table_data = charts.split("\n")[3:-2:] # Skip the header part of the table - for row in table_data: - row = [section.strip() for section in row.split("|") if section and section != ""] - chart = Chart() - for item in zip(headers, row): - setattr(chart, item[0], item[1]) - INSTALLED_CHARTS.append(chart) - -def check_semver(current: str, latest: str): - split_current_semver = current.split(".", 3) - split_latest_semver = latest.split(".", 3) - if split_current_semver[0] != split_latest_semver[0]: - type="major" - if SEMVER == "major": - return True - if split_current_semver[1] != split_latest_semver[1]: - type="minor" - if SEMVER != "patch": - return True - if split_current_semver[2] != split_latest_semver[2]: - type="patch" - return True - return False - - -def execute_upgrades(): - if CATALOG == "ALL": - filtered = filter(lambda a: a.update_available and a.status == "active", INSTALLED_CHARTS) - else: - filtered = filter(lambda a: a.update_available and a.status == "active" and a.catalog == CATALOG, INSTALLED_CHARTS) - for chart in filtered: - pre_update_ver = chart.human_version - post_update_ver = chart.human_latest_version - split_current_version = chart.human_version.split("_", 1) - current_version = split_current_version[1] - split_latest = chart.human_latest_version.split("_", 1) - latest_version = split_latest[1] - if check_semver(current_version, latest_version): - pre_update_ver = chart.human_version - result = subprocess.run(['cli', '-c', f'app chart_release upgrade release_name={chart.name}'], capture_output=True) - post_update_ver = chart.human_latest_version - if "Upgrade complete" not in result.stdout.decode('utf-8'): - print(f"{chart.name} failed to upgrade. \n{result.stdout.decode('utf-8')}") - else: - print(f"{chart.name} upgraded ({pre_update_ver} --> {post_update_ver})") - -def fetch_charts(): - rawcharts = subprocess.run(["cli", "-c", "app chart_release query"], stdout=subprocess.PIPE) - charts = rawcharts.stdout.decode('utf-8') - return(charts) - -def get_args(): - if len(sys.argv) == 3: - SEMVER = sys.argv[2] or "minor" - if len(sys.argv) == 2: - CATALOG = sys.argv[1] or "ALL" - -if __name__ == '__main__': - get_args() - charts = fetch_charts() - parse_charts(charts) - execute_upgrades() - exit(0)