in visualizeConnectData/lambdas/modifyCTR/isodate/duration.py [0:0]
def __rsub__(self, other):
'''
It is possible to subtract Duration objecs from date, datetime and
timedelta objects.
TODO: there is some weird behaviour in date - timedelta ...
if timedelta has seconds or microseconds set, then
date - timedelta != date + (-timedelta)
for now we follow this behaviour to avoid surprises when mixing
timedeltas with Durations, but in case this ever changes in
the stdlib we can just do:
return -self + other
instead of all the current code
'''
if isinstance(other, timedelta):
tmpdur = Duration()
tmpdur.tdelta = other
return tmpdur - self
try:
# check if other behaves like a date/datetime object
# does it have year, month, day and replace?
if (not(float(self.years).is_integer() and
float(self.months).is_integer())):
raise ValueError('fractional years or months not supported'
' for date calculations')
newmonth = other.month - self.months
carry, newmonth = fquotmod(newmonth, 1, 13)
newyear = other.year - self.years + carry
maxdays = max_days_in_month(newyear, newmonth)
if other.day > maxdays:
newday = maxdays
else:
newday = other.day
newdt = other.replace(year=newyear, month=newmonth, day=newday)
return newdt - self.tdelta
except AttributeError:
# other probably was not compatible with data/datetime
pass
return NotImplemented