#!/usr/bin/env python3 import time import logging import os from datetime import datetime import constants logger = logging.getLogger(__file__) def timestamp() -> str: t = datetime.fromtimestamp(time.time()) return t.strftime("%d/%b/%Y:%H:%M:%S%Z") def describe_age_of_file(filename: str) -> str: try: now = time.time() ts = os.stat(filename).st_ctime age = now - ts age = int(age) return describe_duration(age) except Exception as e: logger.exception(e) return "?????" def describe_age_of_file_briefly(filename: str) -> str: try: now = time.time() ts = os.stat(filename).st_ctime age = now - ts age = int(age) return describe_duration_briefly(age) except Exception as e: logger.exception(e) return "?????" def describe_duration(age: int) -> str: days = divmod(age, constants.seconds_per_day) hours = divmod(days[1], constants.seconds_per_hour) minutes = divmod(hours[1], constants.seconds_per_minute) descr = "" if days[0] > 1: descr = f"{int(days[0]):d} days, " elif days[0] == 1: descr = "1 day, " if hours[0] > 1: descr = descr + f"{int(hours[0]):d} hours, " elif hours[0] == 1: descr = descr + "1 hour, " if len(descr) > 0: descr = descr + "and " if minutes[0] == 1: descr = descr + "1 minute" else: descr = descr + f"{int(minutes[0]):d} minutes" return descr def describe_duration_briefly(age: int) -> str: days = divmod(age, constants.seconds_per_day) hours = divmod(days[1], constants.seconds_per_hour) minutes = divmod(hours[1], constants.seconds_per_minute) descr = "" if days[0] > 0: descr = f"{int(days[0]):d}d " if hours[0] > 0: descr = descr + f"{int(hours[0]):d}h " descr = descr + f"{int(minutes[0]):d}m" return descr def minute_number(hour: int, minute: int) -> int: """Convert hour:minute into minute number from start of day.""" return hour * 60 + minute def datetime_to_minute_number(dt: datetime) -> int: """Convert a datetime into a minute number (of the day)""" return minute_number(dt.hour, dt.minute) def minute_number_to_time_string(minute_num: int) -> str: """Convert minute number from start of day into hour:minute am/pm string.""" hour = minute_num // 60 minute = minute_num % 60 ampm = "a" if hour > 12: hour -= 12 ampm = "p" if hour == 12: ampm = "p" if hour == 0: hour = 12 return f"{hour:2}:{minute:02}{ampm}" # x = describe_age_of_file_briefly("pages/clock_10_none.html") # print x