diff --git a/axes/utils.py b/axes/utils.py index 0ea87ea..cc88241 100644 --- a/axes/utils.py +++ b/axes/utils.py @@ -18,3 +18,24 @@ def reset(ip=None, username=None): attempts.delete() return count + + +def iso8601(value): + """Returns datetime.timedelta translated to ISO 8601 formatted duration. + """ + seconds = value.total_seconds() + minutes, seconds = divmod(seconds, 60) + hours, minutes = divmod(minutes, 60) + days, hours = divmod(hours, 24) + + date = '{:.0f}D'.format(days) if days else '' + + time_values = hours, minutes, seconds + time_designators = 'H', 'M', 'S' + + time = ''.join( + [('{:.0f}'.format(value) + designator) + for value, designator in zip(time_values, time_designators) + if value] + ) + return u'P' + date + time