From 2eff9e5fbd2b7e66216761f8f8ed9e079355b02c Mon Sep 17 00:00:00 2001
From: lb584 <lb584@cam.ac.uk>
Date: Wed, 26 Oct 2022 11:06:17 +0100
Subject: [PATCH] adding integration test for survey

---
 coordinator/ProcessorEpidemiology.py          |   7 +--
 coordinator/ProcessorSurveys.py               |  45 +++++++++-------
 coordinator/ProcessorUtils.py                 |   9 ++--
 tests/integration/test_survey.py              |  47 ++++++++++++++++
 .../LIVE_SURVEYDATA_TOUSE.csv                 |   2 +
 .../SurveyDataErrorsToRemove.csv              |   2 +
 .../coordinator/configs/Cred-ODK-EIAR.json    |  31 +++++++++++
 .../configs/config_EastAfrica_fc_live.json    |  51 ++++++++++++------
 .../assets/approx_growth_timing_cleaned.csv   |  11 ++++
 .../boundaries/EastAfrica_clusters_small.cpg  |   1 +
 .../boundaries/EastAfrica_clusters_small.dbf  | Bin 0 -> 893 bytes
 .../boundaries/EastAfrica_clusters_small.prj  |   1 +
 .../boundaries/EastAfrica_clusters_small.qmd  |  26 +++++++++
 .../boundaries/EastAfrica_clusters_small.shp  | Bin 0 -> 19516 bytes
 .../boundaries/EastAfrica_clusters_small.shx  | Bin 0 -> 124 bytes
 .../boundaries/EastAfrica_regions_small.cpg   |   1 +
 .../boundaries/EastAfrica_regions_small.dbf   | Bin 0 -> 628 bytes
 .../boundaries/EastAfrica_regions_small.prj   |   1 +
 .../boundaries/EastAfrica_regions_small.qmd   |  26 +++++++++
 .../boundaries/EastAfrica_regions_small.shp   | Bin 0 -> 14068 bytes
 .../boundaries/EastAfrica_regions_small.shx   | Bin 0 -> 116 bytes
 ...ica_clusters_with_wheat_ha_MAPSPAM2017.cpg |   1 +
 ...ica_clusters_with_wheat_ha_MAPSPAM2017.csv |   4 ++
 ...ica_clusters_with_wheat_ha_MAPSPAM2017.dbf | Bin 0 -> 313 bytes
 ...ica_clusters_with_wheat_ha_MAPSPAM2017.prj |   1 +
 ...ica_clusters_with_wheat_ha_MAPSPAM2017.shp | Bin 0 -> 19516 bytes
 ...ica_clusters_with_wheat_ha_MAPSPAM2017.shx | Bin 0 -> 124 bytes
 ...V1r1_SSA_gr_H_WHEA_A_rescaled_oneliner.tif | Bin 0 -> 1058 bytes
 .../spam2017V1r1_SSA_gr_H_WHEA_A_small.tif    | Bin 0 -> 1576 bytes
 .../config_EastAfrica_mapspam2017.json        |  14 +++++
 30 files changed, 237 insertions(+), 44 deletions(-)
 create mode 100644 tests/integration/test_survey.py
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/coordinator/assets/SURVEYDATA_MANUAL/LIVE_SURVEYDATA_TOUSE.csv
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/coordinator/assets/SURVEYDATA_MANUAL/SurveyDataErrorsToRemove.csv
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/coordinator/configs/Cred-ODK-EIAR.json
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/approx_growth_timing_cleaned.csv
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.cpg
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.dbf
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.prj
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.qmd
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.shp
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.shx
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.cpg
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.dbf
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.prj
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.qmd
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.shp
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.shx
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.cpg
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.csv
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.dbf
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.prj
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.shp
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.shx
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/spam2017V1r1_SSA_gr_H_WHEA_A_rescaled_oneliner.tif
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/spam2017V1r1_SSA_gr_H_WHEA_A_small.tif
 create mode 100644 tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/configs/config_EastAfrica_mapspam2017.json

diff --git a/coordinator/ProcessorEpidemiology.py b/coordinator/ProcessorEpidemiology.py
index 76daa9f..baadb59 100644
--- a/coordinator/ProcessorEpidemiology.py
+++ b/coordinator/ProcessorEpidemiology.py
@@ -8,6 +8,7 @@ import logging
 from pathlib import Path
 import os
 import shutil
+from typing import List
 
 from numpy import argmax, unique
 from pandas import read_csv, DataFrame, to_datetime
@@ -75,7 +76,7 @@ def calc_epi_date_range(init_str,span_days=[0,6]):
 
     return start_date, end_date
 
-def process_pre_job_epi(input_args):
+def process_pre_job_epi(input_args: dict):
     '''Returns a boolean as to whether the job is ready for full processing.'''
 
     logger.info('started process_pre_job_epi()')
@@ -83,7 +84,7 @@ def process_pre_job_epi(input_args):
     # check pre-requisite jobs are complete
     query_past_successes(input_args)
 
-    config_fns = input_args.config_paths
+    config_fns: List[str] = input_args['config_paths']
 
     for configFile in config_fns:
 
@@ -91,7 +92,7 @@ def process_pre_job_epi(input_args):
         config_i = open_and_check_config(configFile)
 
         #determine end time, from config file
-        arg_start_date = input_args.start_date
+        arg_start_date: str = input_args['start_date']
         calc_span_days = config_i['Epidemiology']['CalculationSpanDays']
         assert len(calc_span_days) == 2
 
diff --git a/coordinator/ProcessorSurveys.py b/coordinator/ProcessorSurveys.py
index c6ea0ea..064c40a 100644
--- a/coordinator/ProcessorSurveys.py
+++ b/coordinator/ProcessorSurveys.py
@@ -48,37 +48,41 @@ def get_ODK_form_as_csv(form_credentials: dict, jobPath: str, config: dict, stat
     ODK_jar = form_credentials['ODK_jar']
     assert os.path.exists(ODK_jar)
 
-    ODK_download = ['java',
-            '-jar', ODK_jar,
-            '--pull_aggregate',
-            '--form_id', form_credentials['form_id'],
-            '--storage_directory', ODK_output_path,
-            '--odk_url', form_credentials['url'],
-            '--odk_username',form_credentials['user'],
-            '--odk_password',form_credentials['pass']]
+    skip_download: bool = config['Survey'].get('SkipServerDownload', False)
 
     ODK_download_success = True
 
-    logger.debug('Performing ' + description_long)
+    if not skip_download:
+        try:
+            ODK_download = ['java',
+                            '-jar', ODK_jar,
+                            '--pull_aggregate',
+                            '--form_id', form_credentials['form_id'],
+                            '--storage_directory', ODK_output_path,
+                            '--odk_url', form_credentials['url'],
+                            '--odk_username', form_credentials['user'],
+                            '--odk_password', form_credentials['pass']]
 
-    try:
-        # perform a pull from the ODK server, and if it fails write a warning message
+            logger.debug('Performing ' + description_long)
 
-        subprocess_and_log(ODK_download,description_short,description_long,log_type='warning',check=True)
+            # perform a pull from the ODK server, and if it fails write a warning message
 
-    except subprocess.CalledProcessError as e:
-        status.reset('WARNING')
-        ODK_download_success = False
+            subprocess_and_log(ODK_download,description_short,description_long,log_type='warning',check=True)
+
+        except subprocess.CalledProcessError as e:
+            status.reset('WARNING')
+            ODK_download_success = False
 
     #TODO: Check it came down cleanly ($serverOutputDir is created whether cleanly or not, so test more explicitly):
 
     ODK_csv_path = f"{jobPath}/ExportCSV/"
 
-    Path(ODK_csv_path).mkdir(parents=True, exist_ok=True)
+    Path(ODK_csv_path).mkdir(parents = True, exist_ok = True)
 
     ODK_csv_filename = f"SurveyData_{form_credentials['form_id']}.csv"
 
-    if ODK_download_success:
+    if ODK_download_success and not skip_download:
+
         description_short = 'ODK export'
         description_long = 'converting ODK download to csv'
         logger.debug(description_long)
@@ -100,9 +104,9 @@ def get_ODK_form_as_csv(form_credentials: dict, jobPath: str, config: dict, stat
             status.reset('WARNING')
             ODK_download_success = False
 
-    if not ODK_download_success:
+    if not ODK_download_success or skip_download:
 
-        logger.info("Because ODK server download failed somewhere, trying to recover by copying recent download")
+        logger.info("Because ODK server download failed somewhere (or we are skipping downloads), trying to recover by copying recent download")
 
         ODK_copy_success = False
 
@@ -131,6 +135,7 @@ def get_ODK_form_as_csv(form_credentials: dict, jobPath: str, config: dict, stat
                 past_ODK_csv_filename = ODK_csv_filename
 
                 logger.info(f"Looking for {past_ODK_csv_path+past_ODK_csv_filename}")
+                print(f"Looking for {past_ODK_csv_path+past_ODK_csv_filename}")
 
                 copyfile(past_ODK_csv_path+past_ODK_csv_filename,ODK_csv_path+ODK_csv_filename)
 
@@ -775,7 +780,7 @@ def process_in_job_survey(jobPath,status,config,component):
     credentials_filename = config['Survey']['ServerCredentialsFile']
     with open(credentials_filename) as credentials_file:
 
-        cred = json.load(credentials_file)
+        cred: dict = json.load(credentials_file)
 
         assert 'forms' in cred.keys()
 
diff --git a/coordinator/ProcessorUtils.py b/coordinator/ProcessorUtils.py
index 9dddef9..e8ce959 100644
--- a/coordinator/ProcessorUtils.py
+++ b/coordinator/ProcessorUtils.py
@@ -10,6 +10,7 @@ from string import Template
 import subprocess
 import sys
 import tarfile
+from typing import List
 
 
 short_name = {
@@ -214,14 +215,14 @@ def query_proceed(necessary_file,description):
 
     return True
 
-def query_past_successes(input_args):
+def query_past_successes(input_args: dict):
     '''Checks if deposition and environment jobs are already completed
     successfully. If not, it raises an error.'''
 
-    component = input_args.component
+    component: str = input_args['component']
 
     # check configs can be loaded
-    config_fns = input_args.config_paths
+    config_fns: List[str] = input_args['config_paths']
     for configFile in config_fns:
         try:
             config_i = open_and_check_config(configFile)
@@ -230,7 +231,7 @@ def query_past_successes(input_args):
             endScript(premature=True)
 
         # some config initialisation is necessary
-        config_i['StartString'] = input_args.start_date
+        config_i['StartString'] = input_args['start_date']
 
         # check if deposition data is readily available
         dep_success_file = Template(config_i[component]['Deposition']['SuccessFileTemplate']).substitute(**config_i)
diff --git a/tests/integration/test_survey.py b/tests/integration/test_survey.py
new file mode 100644
index 0000000..dd5d042
--- /dev/null
+++ b/tests/integration/test_survey.py
@@ -0,0 +1,47 @@
+import copy
+import os
+import unittest
+
+from integration.integration_test_utils import IntegrationTestUtils
+
+
+class TestEnvSuit(unittest.TestCase):
+
+    def setUp(self) -> None:
+        super().setUp()
+        default_config = '../test_data/test_deployment/regions/EastAfrica/resources/coordinator/configs/config_EastAfrica_fc_live.json'
+        self.default_config_dict: dict = IntegrationTestUtils.load_json_file(default_config)
+
+    def test_env_suit_standard_inputs_expected_results1(self):
+
+        # nowstring: str = IntegrationTestUtils.get_now_string()
+        nowstring: str = ""
+
+        os.environ["EMAIL_CRED"] = "../test_data/test_deployment/envs/Cred_gmail.json"
+        from Processor import run_Process, set_log_level
+        args_dict: dict = {}
+        args_dict['component'] = 'Survey'
+        args_dict['config_paths'] = [IntegrationTestUtils.TEMP_CONFIG_FILE_PATH]
+        args_dict['log_level'] = 'info'
+        args_dict['live'] = False
+        args_dict['start_date'] = '20221001'
+        args_dict['noupload'] = True
+        set_log_level(args_dict['log_level'])
+
+        run_dict: dict = copy.deepcopy(self.default_config_dict)
+        test_out_path = run_dict['WorkspacePathout'] + nowstring + os.sep
+        run_dict['WorkspacePathout'] = test_out_path
+        run_dict['WorkspacePath'] = test_out_path
+        run_dict['Survey']['SkipServerDownload'] = True
+        run_dict['ServerName'] = ''  # nothing, as local machine
+
+        # run_dict['SubRegionNames'].remove('Kenya')
+
+        IntegrationTestUtils.write_json_file(run_dict, IntegrationTestUtils.TEMP_CONFIG_FILE_PATH)
+
+        run_Process(args_dict)
+        self.assertTrue(True)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/coordinator/assets/SURVEYDATA_MANUAL/LIVE_SURVEYDATA_TOUSE.csv b/tests/test_data/test_deployment/regions/EastAfrica/resources/coordinator/assets/SURVEYDATA_MANUAL/LIVE_SURVEYDATA_TOUSE.csv
new file mode 100644
index 0000000..d4e06f7
--- /dev/null
+++ b/tests/test_data/test_deployment/regions/EastAfrica/resources/coordinator/assets/SURVEYDATA_MANUAL/LIVE_SURVEYDATA_TOUSE.csv
@@ -0,0 +1,2 @@
+SubmissionDate,start,end,today,deviceid,subscriberid,imei,phonenumber,username,surveyor_infromation-country,surveyor_infromation-surveyor_name,surveyor_infromation-institution,survey_infromation-location_name,survey_infromation-location-Latitude,survey_infromation-location-Longitude,survey_infromation-location-Altitude,survey_infromation-location-Accuracy,survey_infromation-survey_date,site_information-survey_site,site_information-crop,site_information-field_area,site_information-variety,site_information-growth_stage,other_crop,stem_rust-stemrust_incidence,stem_rust-Stemrust_severity,stem_rust-stemrust_host_plant_reaction,leaf_rust-leafrust_incidence,leaf_rust-leafrust_severity,leaf_rust-leafrust_host_plant_reaction,yellow_rust-yellowrust_incidence,yellow_rust-yellowrust_severity,yellow_rust-yellowrust_host_plant_reaction,septoria-septoria_incidence,septoria-septoria_severity,other_diseases_group-other_diseases,score_diseases_count,SET-OF-score_diseases,samples_collected,samples_type,sample_size-number_stemrust_live,sample_size-number_stemrust_dead_dna,sample_size-number_yellowrust_live,sample_size-number_yellowrust_dead,sample_size-number_leafrust_live,sample_size-using_barcode,live_stemrust_samples_count,SET-OF-live_stemrust_samples,dead_stemrust_samples_count,SET-OF-dead_stemrust_samples,live_yellowrust_samples_count,SET-OF-live_yellowrust_samples,dead_yellowrust_samples_count,SET-OF-dead_yellowrust_samples,live_leafrust_samples_count,SET-OF-live_leafrust_samples,comment,meta-instanceID,KEY
+17-09-21 8:00,10-09-21 9:00,10-09-21 9:03,10-Sep-21,collect:1qNmuTci1M7xyjou,,collect:1qNmuTci1M7xyjou,,debrebirhan,Ethiopia,Kalkidan Yalew,Debre Birhan,Hagere Mariyam,9.2610515,39.4485883,2841.798221,3.95,10-Sep-21,farmer_field,bread_wheat,0.25,Kekeba,tillering,,none,9,na,none,9,na,none,9,na,low,11,,0,uuid:f3896fd5-741c-4ef7-8497-cce9f395a931/score_diseases,no,,,,,,,,,,,,,,,,,,A wheat field is found in less than 20m distance far from the inspected field,uuid:f3896fd5-741c-4ef7-8497-cce9f395a931,uuid:f3896fd5-741c-4ef7-8497-cce9f395a931
diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/coordinator/assets/SURVEYDATA_MANUAL/SurveyDataErrorsToRemove.csv b/tests/test_data/test_deployment/regions/EastAfrica/resources/coordinator/assets/SURVEYDATA_MANUAL/SurveyDataErrorsToRemove.csv
new file mode 100644
index 0000000..41e8e7f
--- /dev/null
+++ b/tests/test_data/test_deployment/regions/EastAfrica/resources/coordinator/assets/SURVEYDATA_MANUAL/SurveyDataErrorsToRemove.csv
@@ -0,0 +1,2 @@
+SubmissionDate,start,end,today,deviceid,subscriberid,imei,phonenumber,username,surveyor_infromation-country,surveyor_infromation-surveyor_name,surveyor_infromation-institution,survey_infromation-location_name,survey_infromation-location-Latitude,survey_infromation-location-Longitude,survey_infromation-location-Altitude,survey_infromation-location-Accuracy,survey_infromation-survey_date,site_information-survey_site,site_information-crop,site_information-field_area,site_information-variety,site_information-growth_stage,other_crop,stem_rust-stemrust_incidence,stem_rust-Stemrust_severity,stem_rust-stemrust_host_plant_reaction,leaf_rust-leafrust_incidence,leaf_rust-leafrust_severity,leaf_rust-leafrust_host_plant_reaction,yellow_rust-yellowrust_incidence,yellow_rust-yellowrust_severity,yellow_rust-yellowrust_host_plant_reaction,septoria-septoria_incidence,septoria-septoria_severity,other_diseases_group-other_diseases,score_diseases_count,SET-OF-score_diseases,samples_collected,samples_type,sample_size-number_stemrust_live,sample_size-number_stemrust_dead_dna,sample_size-number_yellowrust_live,sample_size-number_yellowrust_dead,sample_size-number_leafrust_live,sample_size-using_barcode,live_stemrust_samples_count,SET-OF-live_stemrust_samples,dead_stemrust_samples_count,SET-OF-dead_stemrust_samples,live_yellowrust_samples_count,SET-OF-live_yellowrust_samples,dead_yellowrust_samples_count,SET-OF-dead_yellowrust_samples,live_leafrust_samples_count,SET-OF-live_leafrust_samples,comment,meta-instanceID,KEY
+"Aug 6, 2018 12:43:06 PM","Jun 13, 2018 11:26:53 AM","Aug 6, 2018 12:42:21 PM","Jun 13, 2018",FC:19:10:89:E2:6B,"",FC:19:10:89:E2:6B,"",mekele,Ethiopia,tesfay gebrekirstos,Tigray Agricultural Research Institute,Ilala,13.5235519900,39.5033560800,1991.0000000000,5.0000000000,"Aug 6, 2018",farmer_field,bread_wheat,2.0000000000,mekele-1,tillering,"",high,20,mr,low,10,mr,high,50,s,medium,55,glume_blotch loose_smut pythium_root_rot scab_fusarium_head_blight take_all tan_spot,6,uuid:58cb6a0f-8e47-4339-8080-0e320234415c/score_diseases,no,"","","","","","","","","","","","","","","","","",There is potential inoculum for the future.,uuid:58cb6a0f-8e47-4339-8080-0e320234415c,uuid:58cb6a0f-8e47-4339-8080-0e320234415c
diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/coordinator/configs/Cred-ODK-EIAR.json b/tests/test_data/test_deployment/regions/EastAfrica/resources/coordinator/configs/Cred-ODK-EIAR.json
new file mode 100644
index 0000000..00d5287
--- /dev/null
+++ b/tests/test_data/test_deployment/regions/EastAfrica/resources/coordinator/configs/Cred-ODK-EIAR.json
@@ -0,0 +1,31 @@
+{
+    "forms" : [
+        {
+            "type" : "ODK",
+            "ODK_jar" : "./test_survey.py",
+            "url" : "not_needed",
+            "user" : "not_needed",
+            "pass" : "not_needed",
+            "form_id" : "wheat_rust_survey_1_0",
+            "form_name" : "Wheat rust survey 1_0"
+        },
+        {
+            "type" : "kobotoolbox",
+            "url" : "not_needed",
+            "user" : "not_needed",
+            "pass" : "not_needed",
+            "form_token" : "not_needed",
+            "form_id" : "akpyJHvYxkLKPkxFJnPyTW",
+            "form_name" : "Wheat rust survey 1.0"
+        },
+        {
+            "type" : "WRSIS",
+            "url" : "not_needed",
+            "user" : "not_needed",
+            "pass" : "not_needed",
+            "form_id" : "WRSIS",
+            "form_name" : "WRSIS"
+        }
+
+    ]
+}
\ No newline at end of file
diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/coordinator/configs/config_EastAfrica_fc_live.json b/tests/test_data/test_deployment/regions/EastAfrica/resources/coordinator/configs/config_EastAfrica_fc_live.json
index 702d9bb..72b7d01 100644
--- a/tests/test_data/test_deployment/regions/EastAfrica/resources/coordinator/configs/config_EastAfrica_fc_live.json
+++ b/tests/test_data/test_deployment/regions/EastAfrica/resources/coordinator/configs/config_EastAfrica_fc_live.json
@@ -12,19 +12,24 @@
     "Survey" : {
         "ProcessPreJob" : "process_pre_job_survey",
         "ProcessInJob" : "process_in_job_survey",
-        "ProcessEWSPlotting" : "process_EWS_plotting_survey",
+        "ProcessEWSPlotting": "process_EWS_plotting_survey",
+        "AcceptableDowntimeDays": 35,
+        "SeasonStartString" : "20220930",
+        "SkipServerDownload" : true,
         "ServerCredentialsFile" : "../test_data/test_deployment/regions/EastAfrica/resources/coordinator/configs/Cred-ODK-EIAR.json",
         "ServerPathExtra" : "/storage/sftp/metofficeupload/upload/Ethiopia/toMO/",
         "FormEdits" : {
             "wheat_rust_survey_1_0" : {},
             "akpyJHvYxkLKPkxFJnPyTW" : {
-                "filter": {
-                    "surveyor_infromation-country" : "Kenya"
+                "filter_by_list": {
+                    "surveyor_infromation-country" : ["Kenya", "Ethiopia"]
                 }
-            }
+            },
+            "WRSIS" : {}
         },
         "SourcesConfigFilename" : "../test_data/test_deployment/regions/EastAfrica/resources/wheat_source_generation/configs/config_EastAfrica_mapspam2017.R",
-        "SourcesRegionName" : "EastAfrica"
+        "SourcesRegionName" : "EastAfrica",
+        "pySourcesConfigFilename" : "../test_data/test_deployment/regions/EastAfrica/resources/source_gen/configs/config_EastAfrica_mapspam2017.json"
     },
     "Environment" : {
         "ServerPathTemplate" : "/storage/sftp/metofficeupload/upload/Ethiopia/fromMO/daily_name/",
@@ -164,14 +169,14 @@
             "VariableNames" : ["P_GRAMINIS_DEPOSITION"],
             "PathTemplate" : "${WorkspacePath}DEPOSITION_${DateString}/WR_NAME_Ethiopia_${DateString}_fc/",
             "SuccessFileTemplate" : "${WorkspacePath}DEPOSITION_${StartString}/STATUS_SUCCESS",
-            "FileListerFunction" : "list_deposition_files_historical",
-            "FileNameTemplate" : "deposition_srcs_allregions_C1_T${tIndexPlusOneString}_${iTimeString}.txt",
+            "FileListerFunction" : "list_files_split_historical_operational",
+            "FileNameTemplate" : "deposition_srcs_allregions_${DateString}.nc",
             "FileNamePrepared" : "?"
         },
         "Environment" : {
             "PathTemplate" : "${WorkspacePath}ENVIRONMENT_2.0_${DateString}/processed/${RegionName}/${DiseaseName}/",
             "SuccessFileTemplate" : "${WorkspacePath}ENVIRONMENT_2.0_${StartString}/STATUS_SUCCESS",
-            "FileListerFunction" : "list_env_suit_files_historical",
+            "FileListerFunction" : "list_files_split_historical_operational",
             "FileNameTemplate" : "RIE_value.csv",
             "FileNamePrepared" : "?"
         },
@@ -214,6 +219,7 @@
             "RunConfig_seasonsofar" : "/../test_data/test_deployment/regions/EastAfrica/resources/plotting/configs/epi/RUN_CONFIG_EPI.json",
             "RunConfig_seasonplusforecast" : "../test_data/test_deployment/regions/EastAfrica/resources/plotting/configs/epi/RUN_CONFIG_EPI.json",
             "ChartConfig" : "../test_data/test_deployment/regions/EastAfrica/resources/plotting/configs/chart/CHART_CONFIG_ETHIOPIA_PINE.json",
+            "PlottingRegionName" : "Ethiopia",
             "EpiCase" : "ps"
         }
     },
@@ -234,15 +240,22 @@
             },
             "Aggregation" : {
                 "raster_path_template" : "${envDataPath}/suitability_${SubRegionNameLower}_${disease_name_snakecase}_total.csv",
-                "raster_name_template" : "RIE_${disease_name_camelcase}",
-                "shape_fn_entry" : "ShapeFilenameAdmin1",
-                "shape_coln" : "ZONENAME",
+                "raster_name_template" : "RIE_${disease_name_camelcase}_%",
+                "shape_fn_entry" : "ShapeFilenameAdmin2",
+                "shape_coln" : "ADM2_EN",
+                "show_columns" : ["ADM0_EN","ADM1_EN"],
+                "separate_rows_for_coln":"ADM0_EN",
                 "func" : "mean",
-                "save_path_template" : "${jobPath}/images/suitability_${SubRegionNameLower}_${disease_name_snakecase}_mean_per_zone"
+                "multiply_by" : 100,
+                "float_format" : ".0f",
+                "display_format" : ".0f",
+                "save_path_template" : "${jobPath}/images/suitability_${SubRegionNameLower}_${disease_name_snakecase}_mean_per_zone",
+                "max_entries" : 20
             }
         },
         "Deposition" : {
             "SuccessFileTemplate" : "${WorkspacePath}DEPOSITION_${StartString}/STATUS_SUCCESS",
+            "DataPathTemplate" : "${WorkspacePath}/DEPOSITION_${dateString}/plotting/${SubRegionNameLower}/input_csvs/",
             "PlotPathTemplate" : "${WorkspacePath}/DEPOSITION_${dateString}/plotting/${SubRegionNameLower}/images/Weekly/",
             "PlotFilenameTemplates" : {
                 "stripe": "${depPlotPath}/deposition_${SubRegionNameLower}_stripe_rust_total_${dateString}0000_${weekAheadString}0000_map.png",
@@ -250,14 +263,18 @@
                 "leaf": "${depPlotPath}/deposition_${SubRegionNameLower}_leaf_rust_total_${dateString}0000_${weekAheadString}0000_map.png"
             },
             "Aggregation" : {
-                "raster_path_template" : "${depPlotPath}/../../input_csvs/deposition_${SubRegionNameLowerShort}_${disease_name_snakecase}_total.csv",
+                "raster_path_template" : "${depDataPath}/deposition_${SubRegionNameLower}_${disease_name_snakecase}_total.csv",
                 "raster_name_template" : "spores_per_m2_per_week_${disease_name_camelcase}",
-                "shape_fn_entry" : "ShapeFilenameAdmin1",
-                "shape_coln" : "ADM1_EN",
-                "show_columns" : ["ADM0_EN","REGIONNAME"],
+                "shape_fn_entry" : "ShapeFilenameAdmin2",
+                "shape_coln" : "ADM2_EN",
+                "show_columns" : ["ADM0_EN","ADM1_EN"],
                 "separate_rows_for_coln":"ADM0_EN",
                 "func" : "mean",
-                "save_path_template" : "${jobPath}/images/deposition_${SubRegionNameLower}_${disease_name_snakecase}_mean_per_zone"
+                "multiply_by" : 1,
+                "float_format" : ".1e",
+                "display_format" : ".0f",
+                "save_path_template" : "${jobPath}/images/deposition_${SubRegionNameLower}_${disease_name_snakecase}_mean_per_zone",
+                "max_entries" : 20
             }
         },
         "Surveys" : {
diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/approx_growth_timing_cleaned.csv b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/approx_growth_timing_cleaned.csv
new file mode 100644
index 0000000..5a6c122
--- /dev/null
+++ b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/approx_growth_timing_cleaned.csv
@@ -0,0 +1,11 @@
+Remaining_days_Spring,Remaining_days_Winter,GrowthStageName
+110,130,tillering
+60,90,boot
+50,50,heading
+40,40,flowering
+30,40,milk
+20,40,dough
+7,7,maturity
+40,40,NA
+40,40,na
+40,40,n/a
diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.cpg b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.cpg
new file mode 100644
index 0000000..3ad133c
--- /dev/null
+++ b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.cpg
@@ -0,0 +1 @@
+UTF-8
\ No newline at end of file
diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.dbf b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..0fa734a5cf756be7097af5ae67a91bcc45b0e9f0
GIT binary patch
literal 893
zcmZRs;*euzU|>jO;A8|+7$7qRF60bi{eyEMj38HcPk+C7PZtITKadC)nmn(9p~5Ht
YhJc}h(P%h;LcmDDcr+kDAz&y400{hQ82|tP

literal 0
HcmV?d00001

diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.prj b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.prj
new file mode 100644
index 0000000..f45cbad
--- /dev/null
+++ b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
\ No newline at end of file
diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.qmd b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.qmd
new file mode 100644
index 0000000..ba33e81
--- /dev/null
+++ b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.qmd
@@ -0,0 +1,26 @@
+<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
+<qgis version="3.22.9-Bia?owie?a">
+  <identifier></identifier>
+  <parentidentifier></parentidentifier>
+  <language></language>
+  <type>dataset</type>
+  <title></title>
+  <abstract></abstract>
+  <links/>
+  <fees></fees>
+  <encoding></encoding>
+  <crs>
+    <spatialrefsys>
+      <wkt></wkt>
+      <proj4></proj4>
+      <srsid>0</srsid>
+      <srid>0</srid>
+      <authid></authid>
+      <description></description>
+      <projectionacronym></projectionacronym>
+      <ellipsoidacronym></ellipsoidacronym>
+      <geographicflag>false</geographicflag>
+    </spatialrefsys>
+  </crs>
+  <extent/>
+</qgis>
diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.shp b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.shp
new file mode 100644
index 0000000000000000000000000000000000000000..0838539aafd0c41fb9b7abb4dd926b4adfd451bc
GIT binary patch
literal 19516
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

literal 0
HcmV?d00001

diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.shx b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters_small.shx
new file mode 100644
index 0000000000000000000000000000000000000000..86e78eef05852d982321499463ae73cdf52f8f86
GIT binary patch
literal 124
zcmZQzQ0HR64(whqGcd3M<)*XzkYJ8+cJQvang7yV!C_U6A^SXI7l$&w?`m(hD>`7;
bjv{Krz`&gW#Pb*!cor})NH{St@ZJCbEZz|r

literal 0
HcmV?d00001

diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.cpg b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.cpg
new file mode 100644
index 0000000..3ad133c
--- /dev/null
+++ b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.cpg
@@ -0,0 +1 @@
+UTF-8
\ No newline at end of file
diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.dbf b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..1ba6125a95a1578a934ce7727af07a19799034c7
GIT binary patch
literal 628
zcmZRs;*euvU|>jO;A8|+7$7qRF60bi{eyEMj38HcPk+C7PZtITKadC)nmn(9p~5Ht
QhJc}h(P%h;LcmB008IHv)Bpeg

literal 0
HcmV?d00001

diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.prj b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.prj
new file mode 100644
index 0000000..f45cbad
--- /dev/null
+++ b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
\ No newline at end of file
diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.qmd b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.qmd
new file mode 100644
index 0000000..bedd3f2
--- /dev/null
+++ b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.qmd
@@ -0,0 +1,26 @@
+<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
+<qgis version="3.22.9-Bia?owie?a">
+  <identifier></identifier>
+  <parentidentifier></parentidentifier>
+  <language></language>
+  <type></type>
+  <title></title>
+  <abstract></abstract>
+  <links/>
+  <fees></fees>
+  <encoding></encoding>
+  <crs>
+    <spatialrefsys>
+      <wkt></wkt>
+      <proj4></proj4>
+      <srsid>0</srsid>
+      <srid>0</srid>
+      <authid></authid>
+      <description></description>
+      <projectionacronym></projectionacronym>
+      <ellipsoidacronym></ellipsoidacronym>
+      <geographicflag>false</geographicflag>
+    </spatialrefsys>
+  </crs>
+  <extent/>
+</qgis>
diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.shp b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.shp
new file mode 100644
index 0000000000000000000000000000000000000000..dd396266a0c8df1c2d8e020239f5ec1b14c1cb5d
GIT binary patch
literal 14068
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
S-ZHh<Ozk~Wd(qVV<G%o6Jd;QO

literal 0
HcmV?d00001

diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.shx b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_regions_small.shx
new file mode 100644
index 0000000000000000000000000000000000000000..da1ac25b5c87a3e47a677833e6d70658af57e31f
GIT binary patch
literal 116
zcmZQzQ0HR64y;}<Gcd3M<)*XzkYJ8+cJQvang7yV!C_U6A^SXI7l$&w?`m(hD>`7;
Tjv{Krz`(Zvh_5j)@GJlTtq%}P

literal 0
HcmV?d00001

diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.cpg b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.cpg
new file mode 100644
index 0000000..cd89cb9
--- /dev/null
+++ b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.cpg
@@ -0,0 +1 @@
+ISO-8859-1
\ No newline at end of file
diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.csv b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.csv
new file mode 100644
index 0000000..df02ddc
--- /dev/null
+++ b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.csv
@@ -0,0 +1,4 @@
+,id,REGION_ID,wheat_ha
+0,1,1,32090
+1,2,2,18463
+2,3,1,27731
diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.dbf b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.dbf
new file mode 100644
index 0000000000000000000000000000000000000000..361003b9f4acdc3122802fe67eb839b01166374f
GIT binary patch
literal 313
zcmZRs;*euzU|?uuumzHsATtFn<_BU4!MPAdkgL0=zhAtk3j+gI`SOg^#FF@oM4)Q0
zyaYe00lW$rz!0m5v5|qLfu5nIp}CQ{nX!eDiHVt!C5B1`BMc#sh@k~gwVtJcg_)(H
qiGi7ssR0mRs8le<5CXZy$lTo6P|v{J)Y#I@z|6qX#MsQhL<#`a+a;j@

literal 0
HcmV?d00001

diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.prj b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.prj
new file mode 100644
index 0000000..8042941
--- /dev/null
+++ b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.prj
@@ -0,0 +1 @@
+PROJCS["WGS_1984_World_Mercator",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],UNIT["Meter",1.0]]
\ No newline at end of file
diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.shp b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.shp
new file mode 100644
index 0000000000000000000000000000000000000000..3973b971cb278316bca77f88d0f3c37ae7759e51
GIT binary patch
literal 19516
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
K(gkMbZT}ChgSt`x

literal 0
HcmV?d00001

diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.shx b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.shx
new file mode 100644
index 0000000000000000000000000000000000000000..f25cbb40952d8a1b7121d3a2991f02ae40ba23ac
GIT binary patch
literal 124
zcmZQzQ0HR64(whqGcd3M<qowiZ&oP`a1=0cWe=L5?WpmVcbcO{pyQK+MgrC>dXCt&
aqlg+YFmPu8@jM0wo&^jH5>5;Zyf*;A^$%A7

literal 0
HcmV?d00001

diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/spam2017V1r1_SSA_gr_H_WHEA_A_rescaled_oneliner.tif b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/preprocessed/spam2017V1r1_SSA_gr_H_WHEA_A_rescaled_oneliner.tif
new file mode 100644
index 0000000000000000000000000000000000000000..dd407a5b68180e5cb483f21d882cd795e93358e9
GIT binary patch
literal 1058
zcmZvbeN0nV7{<?Sy8;oEYKkyA>Flx<15^!6SZ!(V`yi{E5oIZC@mqBBV`CD;MKM}6
z6deNrg_<qK5d476EFDu=2ogcr3`r$o)rcSXHEA-PRbaTF?6hkW{@|Xxd474%bDo_0
z-du}i77JyJMKUHxnZRipFCoBToFxHPbCw3!=aY|Pg&^~vE#e!>as8+O`*NlSJU>Yo
zQw91QS$2S>oG0%MXFhfD+Osd5$+`Z?>u0-^skuh+e5YOFXDer0y~OWNoWnPRPid#g
zk3kLgC(w?PlY8IUl4Tw|KQ~e@OEL#7g8ywo7?bf?_*OtAGN(P7n}krOJ%mLwIUk+C
z$~7$9rxYRcYrG~WGh3aStk$V>@(VWSsTZv)Si8C~zo7X4elep=0~$v@hLS$O%q%n1
zIbUJ>6*DsP6iC>;Qmiv7D0r9g`a*omI6FGg5Z~j_fA_G)6uGR@{GMtSDs5WmE~lW^
zor*=uTs*gBVDw%r-k;P+8>eJUnB~hIC~Qi1J3`WxnqKqbngsE|=>(iTvIJlM_6eGH
zEXRiyE7m6K(b@VocAa=khbtCNn3Y%5N~w-MIuNyA+`J%0w9U|o@=h5>`t=yymWDJ}
z5{mD}V5jO0Tp4Ak@(xn^t7;nSR?#osTP8(ECFQ>x24h474lMD~(L@oSHGhk6Ln*9J
zzYw4AX3(BZLAO<jQ^QisI9W>rcb?JJ;W4_cQDW<bUeastiWjXOO1QBBVL1-WmLJ4F
z&$c2>cOI_MP0;2wQ~VZ<__>E+-oJ6!Kh#6RE9TL{b1z64@`^M?40Dgy;Pm7w#1Ax}
z_GK4J>z!bVGhjCx(a?GX>pv>NHOEvKyPC-p^QpM>pcZBAk*IHzV17z6hD@hWvD^Su
z_fs6%(em<FRJC=XZkZcDl(_Jy+KVSs|3YDR2Fi2agt*ZudSb~e?lVxkFh;VT2Ne5d
zEMC8^!Z%HBl$G4V-^QcZ)X;*Vv1@qL)`ykb&LM6=6Wl+x!<&BzO9wX~vtv3A&(u-&
zn%gGdcU9zGr&?17Syrupr?(tQhg`5sdyHcveORr!hm4*9)Q0xs_pB2*lm0z+9Qp%y
Xj<vvce+>%fR6xH@fT!+~|9|)of#)t+

literal 0
HcmV?d00001

diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/spam2017V1r1_SSA_gr_H_WHEA_A_small.tif b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/assets/spam2017V1r1_SSA_gr_H_WHEA_A_small.tif
new file mode 100644
index 0000000000000000000000000000000000000000..13beef725083378f9e8c637f50931a20bb788e88
GIT binary patch
literal 1576
zcmd5+TS!z<6y4+4G}=^}`RYMa!h}*EcEYrx?#$U)LNBl<_|ex1$_lhTgrG62@gs^5
zia9-yvZ69HdfJ18ASmXPR7Rm$L`)PFfe_h8weC3T{8%6Tbm7cibIv|%@3r^6yR58$
zt|b$t5jmXXAfikxM;xaDC&jTB*cr#RpDO{UJCb8}u}zr?`&n^p^JFLZOiJ)6k7Fl%
z#?*PpwvVuO@9~feHj32}a*`J|3xQih9!dgU1AHlzL~dYZCxpkd<KmqatFJDc5V!ri
z!~ahCp3_{sT3T<br@z?MIn^5Qbi~w*Btm5zh=$Z*5d^^;6isuuFNJVQuGs$rc`5GJ
zkbOQXW{K*zY(G4?smkWF&a7JJU%R;6TReLwsnRt}6ue7s_A+g#Vl!hin@@XLomt01
z6yfa8j}T&EqKAoeThus%MYYAEw+KABZ1&G$)4YjwUkU4%vtpdaqh;c~;jj+3SwuJd
z<Sj!!<5)b+XK~q&9Or^(EvtRYSl8HlAEb&N{3E9j8J3Ae7AWNk=<uR|u9?TmHywAk
zA+K`i-^j`ZPS;$-%4ZWvW@<k&ET_nr$YlMLCQ|R$;k<xS1p!-!ib~`pnBJg%K_Bb3
z48-{*mFkrgOl7_Ps1&^oL%i+d;hW96WHKAi6Dgin!2cAh!%fgw72_nUly$fe{Yl4t
zaOBoN?-!|jKcp^k<DPr4SE70qledP={1!G#>rnr#xbqr#IectAzWzL2C9Fzwz<WUo
z(GXC+n^K3J=v})M87GkYA?V+OI=leB0KR7Q@ieRZ8hmHb+j_*!hJO!gaK&$yqR*Z}
z)NVB56Y81+4QF9ph%ri%Rlz#HndxgQe7aDh=PVjJ*gPA%NR_@qj9b!F&KuOBqT8gX
zo`4$nNuB!{I!8duN!;yb_52;1%34<6j^jOh03EMb$WGShuEVDtXKl!#3wRpV`Jr0d
z4GKD0Mem>o_oPk<Ldzl4`w8NHU|QJ)%{^?o-$Um|7Ilx2XC<qm+lbSFbL8JRheh5o
z=zloKn~u-$->219e9(WJR!f{jf16hIBZj6`Bk;hq>Hr>?R%sYz1JlY2T-%fsn{+b^
K?GpX}lj}D#j!g~#

literal 0
HcmV?d00001

diff --git a/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/configs/config_EastAfrica_mapspam2017.json b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/configs/config_EastAfrica_mapspam2017.json
new file mode 100644
index 0000000..b5106eb
--- /dev/null
+++ b/tests/test_data/test_deployment/regions/EastAfrica/resources/source_gen/configs/config_EastAfrica_mapspam2017.json
@@ -0,0 +1,14 @@
+{
+    "config_name" : "EastAfrica",
+    "region_file" : "/media/scratch/lb584_scratch/projects/ews_local_prod/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_9regions.shp",
+    "wheat_source_name" : "MAPSPAM2017",
+    "wheat_file" : "/media/scratch/lb584_scratch/projects/ews_local_prod/regions/EastAfrica/resources/source_gen/assets/spam2017V1r1_SSA_gr_H_WHEA_A.tif",
+    "wheat_file_rescaled" : "/media/scratch/lb584_scratch/projects/ews_local_prod/regions/EastAfrica/resources/source_gen/assets/preprocessed/spam2017V1r1_SSA_gr_H_WHEA_A_rescaled_oneliner.tif",
+    "cluster_poly_file_no_wheat" : "/media/scratch/lb584_scratch/projects/ews_local_prod/regions/EastAfrica/resources/source_gen/assets/boundaries/EastAfrica_clusters.shp",
+    "cluster_poly_file" : "//media/scratch/lb584_scratch/projects/ews_local_prod/regions/EastAfrica/resources/source_gen/assets/preprocessed/EastAfrica_clusters_with_wheat_ha_MAPSPAM2017.shp",
+    "surveyor_name_col" : "surveyor_infromation-surveyor_name",
+    "id_col" : "id",
+    "region_id_col" : "REGION_ID",
+    "wheat_stages_file" : "/media/scratch/lb584_scratch/projects/ews_local_prod/regions/EastAfrica/resources/source_gen/assets/approx_growth_timing_cleaned.csv"
+}
+
-- 
GitLab