diff --git a/gramps/gen/lib/date.py b/gramps/gen/lib/date.py index db344aefc..a5c6a694e 100644 --- a/gramps/gen/lib/date.py +++ b/gramps/gen/lib/date.py @@ -1635,6 +1635,14 @@ class Date(object): if modifier != Date.MOD_TEXTONLY: sanity = Date(self) sanity.convert_calendar(self.calendar, known_valid = False) + # convert_calendar resets slash and new year, restore these as needed + if sanity.get_slash() != self.get_slash(): + sanity.set_slash(self.get_slash()) + if self.is_compound() and sanity.get_slash2() != self.get_slash2(): + sanity.set_slash2(self.get_slash2()) + if sanity.get_new_year() != self.get_new_year(): + sanity.set_new_year(self.get_new_year()) + sanity._adjust_newyear() # We don't do the roundtrip conversion on self, becaue # it would remove uncertainty on day/month expressed with zeros @@ -1642,29 +1650,27 @@ class Date(object): # Did the roundtrip change the date value?! if sanity.dateval != value: try: - if sanity.get_new_year() != self.get_new_year(): - # convert_calendar resets the new year, so the date value will differ. - # Just check the sort value matches then. - if self.sortval != sanity.sortval: - raise DateError("Invalid date value {}".format(value)) - else: - # Maybe it is OK because of undetermined value adjustment? - zl = zip(sanity.dateval, value) - # Loop over all values present, whether compound or not - for d,m,y,sl in zip(*[iter(zl)]*4): - # each of d,m,y,sl is a pair from dateval and value, to compare - for adjusted,original in d,m: - if adjusted != original and not(original == 0 and adjusted == 1): - raise DateError("Invalid day/month {} passed in value {}". - format(original, value)) + # Maybe it is OK because of undetermined value adjustment? + zl = zip(sanity.dateval, value) + # Loop over all values present, whether compound or not + for d,m,y,sl in zip(*[iter(zl)]*4): + # each of d,m,y,sl is a pair from dateval and value, to compare + adjusted,original = sl + if adjusted != original: + raise DateError("Invalid date value {}". + format(value)) - adjusted,original = y - adjusted -= year_delta + for adjusted,original in d,m: if adjusted != original and not(original == 0 and adjusted == 1): - raise DateError("Invalid year {} passed in value {}". + raise DateError("Invalid day/month {} passed in value {}". format(original, value)) - # ignore slash difference + adjusted,original = y + adjusted -= year_delta + if adjusted != original and not(original == 0 and adjusted == 1): + raise DateError("Invalid year {} passed in value {}". + format(original, value)) + except DateError: log.debug("Sanity check failed - self: {}, sanity: {}".format( self.to_struct(), sanity.to_struct()))