in source/lambda/configuration/config_admin.py [0:0]
def _validate_period(self, **period):
result = {}
def is_valid_time(s):
return re.match(ConfigAdmin.TIME_REGEX, s) is not None
# allowed and validated parameters
valid_parameters = [configuration.BEGINTIME,
configuration.ENDTIME,
configuration.WEEKDAYS,
configuration.MONTHDAYS,
configuration.MONTHS,
configuration.NAME,
configuration.DESCRIPTION]
for attr in period:
# indicates type for config entry
if attr == ConfigAdmin.TYPE_ATTR:
continue
# parameter is allowed?
if attr not in valid_parameters:
raise ValueError(ERR_PERIOD_UNKNOWN_PARAMETER.format(attr, str(valid_parameters)))
# remove None values
if period[attr] is None or len(str(period[attr])) == 0:
continue
# period name
if attr == configuration.NAME:
result[attr] = period[attr]
continue
# description
if attr == configuration.DESCRIPTION:
result[attr] = period[attr]
continue
# validate start and end types times
if attr in [configuration.BEGINTIME, configuration.ENDTIME]:
time_str = period[attr]
if not is_valid_time(time_str):
raise ValueError(ERR_PERIOD_INVALID_TIME.format(attr, time_str))
result[attr] = str(datetime.strptime(time_str, configuration.TIME_FORMAT_STRING).time())[
0:len(configuration.TIME_FORMAT_STRING)]
if configuration.BEGINTIME in result and configuration.ENDTIME in result:
begintime = datetime.strptime(result[configuration.BEGINTIME], configuration.TIME_FORMAT_STRING).time()
endtime = datetime.strptime(result[configuration.ENDTIME], configuration.TIME_FORMAT_STRING).time()
if begintime > endtime:
raise ValueError(
ERR_PERIOD_BEGIN_LATER_THAN_END.format(result[configuration.BEGINTIME], result[configuration.ENDTIME]))
continue
# check weekdays, monthdays and month sets
if attr in [configuration.WEEKDAYS, configuration.MONTHDAYS, configuration.MONTHS]:
temp = self._ensure_set(period[attr])
if len(temp) == 0:
continue
# validate month
if attr == configuration.MONTHS:
# noinspection PyPep8
try:
MonthSetBuilder().build(temp)
result[attr] = temp
continue
except:
raise ValueError(ERR_PERIOD_INVALID_MONTHS.format(str(period[attr])))
# validate weekdays
if attr == configuration.WEEKDAYS:
try:
wdb = WeekdaySetBuilder(year=2016, month=12, day=31)
wdb.build(temp)
result[attr] = temp
continue
except Exception as ex:
raise ValueError(ERR_PERIOD_INVALID_WEEKDAYS.format(str(period[attr]), ex))
# validate monthdays
if attr == configuration.MONTHDAYS:
# noinspection PyPep8
try:
MonthdaySetBuilder(year=2016, month=12).build(temp)
result[attr] = temp
continue
except:
raise ValueError(ERR_PERIOD_INVALID_MONTHDAYS.format(str(period[attr])))
if configuration.NAME not in result:
raise ValueError(ERR_NAME_PARAM_MISSING)
for condition in [configuration.BEGINTIME,
configuration.ENDTIME,
configuration.WEEKDAYS,
configuration.MONTHS,
configuration.MONTHDAYS]:
if condition in result:
break
else:
raise ValueError(ERR_NO_PERIODS)
result[ConfigAdmin.TYPE_ATTR] = configuration.PERIOD
return result