def timedelta_repr(td: datetime.timedelta) -> str: """ :returns: a human readable representation of the provided timedelta object """ assert isinstance(td, datetime.timedelta), type(td) ZERO = {'00', '0'} td = td.__str__().split(':') end = [] if td[0] not in ZERO: end.append('{} hours'.format(td[0])) if td[1] not in ZERO: end.append('{} minutes'.format(td[1])) if td[2] not in ZERO: end.append('{} seconds'.format(td[2])) if len(end) > 1: end.append('and ' + end.pop(-1)) return ', '.join( val.lstrip('0') for val in end )
def coerce_output(value: timedelta) -> str: if isinstance(value, timedelta): return value.__str__() raise TypeError(f"Duration cannot represent value: < {value} >")