Source code for kyu_4.human_readable_duration_format.format_duration

"""
Format duration.

A function which formats a duration, given as a
number of seconds, in a human-friendly way.
Created by Egor Kostan.
GitHub: https://github.com/ikostan
"""


[docs] def format_duration(seconds: int) -> str: """ format_duration function. A function which formats a duration, given as a number of seconds, in a human-friendly way. :param seconds: int :return: str """ if seconds == 0: return 'now' result: str = '' years: int = calc_years(seconds) days: int = calc_days(seconds) hours: int = calc_hours(seconds) minutes: int = calc_minutes(seconds) seconds = calc_seconds(seconds) year: str = get_string(years, 'year') day: str = get_string(days, 'day') hour: str = get_string(hours, 'hour') minute: str = get_string(minutes, 'minute') second: str = get_string(seconds, 'second') if years > 0: result += f'{year}' result = format_days(days, day, result) result = format_hours(hours, hour, result) result = format_minutes(minutes, seconds, minute, result) result = format_seconds(seconds, second, result) return result
[docs] def format_days(days: int, day: str, result: str) -> str: """ Format days for the final string. :param days: int :param day: str :param result: str :return: str """ if days > 0: result += f', {day}' if result else f'{day}' return result
[docs] def format_hours(hours: int, hour: str, result: str) -> str: """ Format hours for the final string. :param hours: int :param hour: str :param result: str :return: str """ if hours > 0: result += f', {hour}' if result else f'{hour}' return result
[docs] def format_minutes(minutes: int, seconds: int, minute: str, result: str) -> str: """ Format minutes for the final string. :param minutes: int :param seconds: int :param minute: str :param result: str :return: str """ if minutes > 0 and result != '' and seconds == 0: result += f' and {minute}' elif minutes > 0 and result != '': result += f', {minute}' else: result += f'{minute}' return result
[docs] def format_seconds(seconds: int, second: str, result: str) -> str: """ Format seconds for the final string. :param seconds: int :param second: str :param result: str :return: str """ if seconds > 0: result += f' and {second}' if result else f'{second}' return result
[docs] def get_string(number: int, string: str) -> str: """ Concatenate string result. :param number: int :param string: str :return: str """ result: str = '' if number == 1: result = f'{number} {string}' elif number > 0: result = f'{number} {string}s' return result
[docs] def calc_seconds(seconds: int) -> int: """ Calculate seconds. :param seconds: int :return: int """ return seconds if seconds < 60 else seconds % 60
[docs] def calc_minutes(seconds: int) -> int: """ Calculate minutes. :param seconds: int :return: int """ minutes = seconds // 60 return minutes if minutes < 60 else minutes % 60
[docs] def calc_hours(seconds: int) -> int: """ Calculate hours. :param seconds: int :return: int """ hours = seconds // (60 * 60) return hours if hours < 24 else hours % 24
[docs] def calc_days(seconds: int) -> int: """ Calculate days. :param seconds: int :return: int """ days = seconds // (60 * 60 * 24) return days if days < 365 else days % 365
[docs] def calc_years(seconds: int) -> int: """ Calculate years. :param seconds: int :return: int """ return seconds // (60 * 60 * 24 * 365)