diff --git a/cdds/cdds/qc/plugins/base/validators.py b/cdds/cdds/qc/plugins/base/validators.py index 32142ebd7..8521c1b72 100644 --- a/cdds/cdds/qc/plugins/base/validators.py +++ b/cdds/cdds/qc/plugins/base/validators.py @@ -260,9 +260,12 @@ def date_validator(cls, template: str, calendar: str = '360_day') -> Callable[[A """ def validator_function(value): try: + current_mode = Calendar.default().mode Calendar.default().set_mode(calendar) TimePointParser().strptime(value, template) except ValueError: raise ValidationError("'{}' is not a valid date in a form of {}".format(value, template)) - + finally: + # revert to the cached mode + Calendar.default().set_mode(current_mode) return validator_function diff --git a/cdds/cdds/tests/test_qc/plugins/base/test_validators.py b/cdds/cdds/tests/test_qc/plugins/base/test_validators.py index 336c4c958..90b59abd1 100644 --- a/cdds/cdds/tests/test_qc/plugins/base/test_validators.py +++ b/cdds/cdds/tests/test_qc/plugins/base/test_validators.py @@ -3,6 +3,7 @@ import unittest import numpy as np +from metomi.isodatetime.data import Calendar from cdds.qc.plugins.base.validators import ControlledVocabularyValidator from cdds.qc.plugins.base.validators import ValidatorFactory, ValidationError from cdds.tests.test_qc.plugins.constants import CV_REPO @@ -74,3 +75,12 @@ def test_date_validator(self): self.assertRaises(ValidationError, validator_gregorian, "2023-02-30T01:20:05Z") self.assertRaises(ValidationError, validator_360day, "2023-07-31T01:20:05Z") self.assertIsNone(validator_gregorian("2023-07-31T01:20:05Z")) + + def test_date_validator_calendar_reset(self): + Calendar.default().set_mode("360_day") + validator_gregorian = ValidatorFactory.date_validator("%Y-%m-%dT%H:%M:%SZ", "gregorian") + self.assertIsNone(validator_gregorian("2023-07-31T01:20:05Z")) + self.assertEquals(Calendar.default().mode, "360_day") + + self.assertRaises(ValidationError, validator_gregorian, "2023-02-30T01:20:05Z") + self.assertEquals(Calendar.default().mode, "360_day")