#!/usr/bin/env python3 #Given a text file as fin_template, updates _SHORTVER_ with 2d version number and output fout # # Usage : # ./runtime_ver_update.py "runtime_status_template" "runtime_status" # #Arash Bigdeli Oct 2022 import os, re, sys import ecflow fin_template=sys.argv[1] fout=sys.argv[2] new_file=[] envir = os.getenv("envir") ECF_PORT = os.getenv("ECF_PORT") ECF_HOST = os.getenv("ECF_HOST") assert envir in ["prod","para","test"], f"ERROR: $envir ({envir}) is not defined to an acceptable value. Quitting..." if envir in ["prod"]: expectedecfport="31415" elif envir in ["para","test"]: expectedecfport="14142" assert ECF_PORT == expectedecfport, f"ECF_PORT {ECF_PORT} is not consistent with this environment ({envir})! Quitting..." ci = ecflow.Client() ci.sync_local() defs = ci.get_defs() suite = defs.find_suite(envir) assert hasattr(suite,'find_variable'), f"Make sure HOST={ECF_HOST} is active, suite was empty ! Quitting ..." pattern='(?#/)\w+(?=/_SHORTVER_/)' with open(fin_template,'r') as f: lines = f.readlines () for line in lines: match = re.findall(pattern,line) if match is not []: for model in match: NET=model+"_ver" lenout=len(str(suite.find_variable(NET)).replace('\'','').split()) assert lenout != 1, f"The variable {NET} was not found in HOST={ECF_HOST} envir={envir} ! Quitting..." ver='.'.join(str(suite.find_variable(NET)).replace('\'','').split()[2].split('.')[:2]) line=re.sub(r"{model}/_SHORTVER_".format(model=model),"{model}/{ver}".format(model=model, ver=ver),line) new_line=line else: new_line=line new_file.append(new_line) with open(fout, 'w') as f: f.seek(0) f.writelines(new_file)