From e48c734ea947cfc913a8b81257be639b1f9b89cf Mon Sep 17 00:00:00 2001 From: "D. Berge" Date: Sat, 4 May 2024 17:35:05 +0200 Subject: [PATCH] Support `lineNameInfo` in final P1/11 imports --- bin/import_final_p111.py | 48 +++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/bin/import_final_p111.py b/bin/import_final_p111.py index bc0c146..3513218 100755 --- a/bin/import_final_p111.py +++ b/bin/import_final_p111.py @@ -15,6 +15,7 @@ import re import time import configuration import p111 +import fwr from datastore import Datastore def add_pending_remark(db, sequence): @@ -69,8 +70,12 @@ if __name__ == '__main__': print("No final P1/11 configuration") exit(0) - pattern = final_p111["pattern"] - rx = re.compile(pattern["regex"]) + + lineNameInfo = final_p111.get("lineNameInfo") + pattern = final_p111.get("pattern") + rx = None + if pattern and pattern.get("regex"): + rx = re.compile(pattern["regex"]) if "pending" in survey["final"]: pendingRx = re.compile(survey["final"]["pending"]["pattern"]["regex"]) @@ -98,15 +103,38 @@ if __name__ == '__main__': print("Importing") - match = rx.match(os.path.basename(logical_filepath)) - if not match: - error_message = f"File path not match the expected format! ({logical_filepath} ~ {pattern['regex']})" - print(error_message, file=sys.stderr) - print("This file will be ignored!") - continue + if rx: + match = rx.match(os.path.basename(logical_filepath)) + if not match: + error_message = f"File path not match the expected format! ({logical_filepath} ~ {pattern['regex']})" + print(error_message, file=sys.stderr) + print("This file will be ignored!") + continue - file_info = dict(zip(pattern["captures"], match.groups())) - file_info["meta"] = {} + file_info = dict(zip(pattern["captures"], match.groups())) + file_info["meta"] = {} + + if lineNameInfo: + basename = os.path.basename(physical_filepath) + fields = lineNameInfo.get("fields", {}) + fixed = lineNameInfo.get("fixed") + try: + parsed_line = fwr.parse_line(basename, fields, fixed) + except ValueError as err: + parsed_line = "Line format error: " + str(err) + if type(parsed_line) == str: + print(parsed_line, file=sys.stderr) + print("This file will be ignored!") + continue + + file_info = {} + file_info["sequence"] = parsed_line["sequence"] + file_info["line"] = parsed_line["line"] + del(parsed_line["sequence"]) + del(parsed_line["line"]) + file_info["meta"] = { + "fileInfo": parsed_line + } if pending: print("Skipping / removing final file because marked as PENDING", logical_filepath)