From 4373473b15adcda39e374253676e300a0e476da2 Mon Sep 17 00:00:00 2001 From: Lene Wasskog <lene.wasskog@nibio.no> Date: Tue, 6 May 2025 12:30:44 +0200 Subject: [PATCH] feat: Create empty map file before model start date [GRIDV-133] --- ADASMELIAE.py | 83 +++++++++++++++++++++++++++------------------------ 1 file changed, 44 insertions(+), 39 deletions(-) diff --git a/ADASMELIAE.py b/ADASMELIAE.py index c44a575..67bfed5 100755 --- a/ADASMELIAE.py +++ b/ADASMELIAE.py @@ -155,6 +155,36 @@ def split_by_date(input_file, prefix): logging.debug(f"Data for {date} extracted to {output_filename}") +def create_mapfile(timestep_dates): + languages = [] + language_codes = config["i18n"]["languages"].split(",") + for language_code in language_codes: + language = {"language_code": language_code} + if ("i18n.%s" % language_code) in config: + for keyword in config["i18n.%s" % language_code]: + language[keyword] = config["i18n.%s" % language_code][keyword] + languages.append(language) + + env = Environment(loader=FileSystemLoader(template_dir)) + template = env.get_template(template_file_name) + + output = template.render( + { + "model_id": model_id, + "timestep_dates": timestep_dates, + "mapserver_data_dir": f"{os.getenv('MAPSERVER_RESULT_TIF_DIR')}{year}/", + "mapserver_mapfile_dir": f"{os.getenv('MAPSERVER_RESULT_MAPFILE_DIR')}{year}/", + "mapserver_log_file": os.getenv("MAPSERVER_LOG_FILE"), + "mapserver_image_path": os.getenv("MAPSERVER_IMAGE_PATH"), + "mapserver_extent": os.getenv("MAPSERVER_EXTENT"), + "languages": languages, + "language_codes": language_codes, + } + ) + with open(f"{result_mapfile_year_dir}/{model_id}.map", "w") as f: + f.write(output) + + if __name__ == "__main__": script_start_time = time.time() # For logging execution time today = datetime.now().date() # timezone not included, since we are only interested in the year @@ -186,25 +216,28 @@ if __name__ == "__main__": logging.error(f"Cron run and today is after model period end {model_end_date}. Quit.") sys.exit() + logging.info( + f"Model start date {model_start_date}. Model end date {model_end_date}." + ) + + # Ensure that model is not run before model run period + if today < model_start_date: + logging.error("Model period not started. Create empty mapfile and quit.") + create_mapfile([]) + sys.exit() + start_date = model_start_date - if year == today.year and today + timedelta(days=2) <= model_end_date: - end_date = today + timedelta(days=2) + two_days_from_now = today + timedelta(days=2) + if year == today.year and two_days_from_now < model_end_date: + end_date = two_days_from_now else: end_date = model_end_date - logging.info( - f"Model start date {model_start_date}. Model end date {model_end_date}." - ) logging.info( f"Attempt to run model {model_id} for year {year}, start date {start_date} and end date {end_date}" ) - # Ensure that model is not run before model run period - if today < start_date: - logging.error("Model period not started. Quit.") - sys.exit() - if year == today.year: weather_data_file = f"{weather_data_dir}{weather_data_filename_pattern.replace('%Y', str(year))}" else: @@ -307,35 +340,7 @@ if __name__ == "__main__": stdout=devnull, ) - # Generate mapfile - # Building data sets for language specific legends - languages = [] - language_codes = config["i18n"]["languages"].split(",") - for language_code in language_codes: - language = {"language_code": language_code} - if ("i18n.%s" % language_code) in config: - for keyword in config["i18n.%s" % language_code]: - language[keyword] = config["i18n.%s" % language_code][keyword] - languages.append(language) - - env = Environment(loader=FileSystemLoader(template_dir)) - template = env.get_template(template_file_name) - - output = template.render( - { - "model_id": model_id, - "timestep_dates": timestep_dates, - "mapserver_data_dir": f"{os.getenv('MAPSERVER_RESULT_TIF_DIR')}{year}/", - "mapserver_mapfile_dir": f"{os.getenv('MAPSERVER_RESULT_MAPFILE_DIR')}{year}/", - "mapserver_log_file": os.getenv("MAPSERVER_LOG_FILE"), - "mapserver_image_path": os.getenv("MAPSERVER_IMAGE_PATH"), - "mapserver_extent": os.getenv("MAPSERVER_EXTENT"), - "languages": languages, - "language_codes": language_codes, - } - ) - with open(f"{result_mapfile_year_dir}/{model_id}.map", "w") as f: - f.write(output) + create_mapfile(timestep_dates) query_template = os.path.join(home_dir, "mapfile/query_template.xml") query_template_temperature = os.path.join(home_dir, "mapfile/query_template_temperature.xml") -- GitLab