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