diff --git a/source/python/classes/ControlFile.py b/source/python/classes/ControlFile.py index b62529904f9f7f8025afa07059e6fca12549d68c..772169dfc82b410faacbdd8924ee5afcee25fb6d 100644 --- a/source/python/classes/ControlFile.py +++ b/source/python/classes/ControlFile.py @@ -58,7 +58,7 @@ from mods.checks import (check_grid, check_area, check_levels, check_purefc, check_basetime, check_public, check_acctype, check_acctime, check_accmaxstep, check_time, check_logicals_type, check_len_type_time_step, - check_addpar, check_job_chunk) + check_addpar, check_job_chunk, check_number) # ------------------------------------------------------------------------------ # CLASS @@ -645,6 +645,8 @@ class ControlFile(object): self.job_chunk = check_job_chunk(self.job_chunk) + self.number = check_number(self.number, self.mailfail) + return def to_list(self): diff --git a/source/python/mods/checks.py b/source/python/mods/checks.py index cb8561569e7c90f1fc37fc38b692f403ed42a8b8..5c820329385b853ef70e816d789ae474aa042943 100644 --- a/source/python/mods/checks.py +++ b/source/python/mods/checks.py @@ -29,6 +29,7 @@ import _config import exceptions from tools import my_error, silent_remove from datetime import datetime +import numpy as np # ------------------------------------------------------------------------------ # FUNCTIONS # ------------------------------------------------------------------------------ @@ -824,3 +825,42 @@ def check_job_chunk(job_chunk): pass return job_chunk + + +def check_number(number, mailfail): + '''Check for correct string format of ensemble member numbers. + + Parameters + ---------- + number : str + List of ensemble member forecast runs. + + mailfail : list of str + Contains all email addresses which should be notified. + It might also contain just the ecmwf user name which will trigger + mailing to the associated email address for this user. + + Return + ------ + number : str + String with list of ensemble member forecast runs. E.g. '01/02/03/04' + ''' + + if '/' in number: + numbers = number.split('/') + if 'to' in number.lower() and 'by' in number.lower(): + number = '{:0>3}'.format(int(numbers[0])) + '/TO/' + \ + '{:0>3}'.format(int(numbers[2])) + '/BY/' + \ + '{:0>3}'.format(int(numbers[4])) + elif 'to' in number.lower() and 'by' not in number.lower(): + number = '{:0>3}'.format(int(numbers[0])) + '/TO/' + \ + '{:0>3}'.format(int(numbers[2])) + else: + numbers = ['{:0>3}'.format(i) for i in numbers] + number = '{:0>3}/'.join(numbers) + elif number.isdigit(): + number = '{:0>3}'.format(int(number)) + else: + pass + + return number