From e5d2b874537bbde3d3e244355fb5631f9d3cd03d Mon Sep 17 00:00:00 2001 From: "Eric W. Burns" Date: Thu, 20 Mar 2025 22:53:01 -0400 Subject: [PATCH] time improvements time range can now cross midnight. time descriptions tweaked. --- nodes.py | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/nodes.py b/nodes.py index c5a2553..6239f1f 100644 --- a/nodes.py +++ b/nodes.py @@ -744,16 +744,22 @@ class EbuPromptHelperSeasonWeatherTimeOfDay: return "morning" elif 10 <= hour < 12: return "late morning" - elif 12 <= hour < 15: + elif 12 <= hour < 14: return "early afternoon" - elif 15 <= hour < 18: + elif 14 <= hour < 16: + return "afternoon" + elif 16 <= hour < 18: return "late afternoon" elif 18 <= hour < 20: return "early evening" elif 20 <= hour < 22: return "evening" - elif 22 <= hour or hour < 5: + elif 22 <= hour or hour < 3: return "night" + elif 3 <= hour or hour < 4: + return "witching hour" + elif 4 <= hour or hour < 5: + return "pre-dawn" else: return "unknown time" @@ -793,24 +799,25 @@ class EbuPromptHelperSeasonWeatherTimeOfDay: else: return f"middle of the {season}" - # Convert time strings to datetime objects. - time_from_dt = time_str_to_dt(time_from) - time_to_dt = time_str_to_dt(time_to) - if time_from_dt > time_to_dt: - raise ValueError("time_from must be before time_to") - - # Generate a random date using the year skew. - random_date_obj = random_date(year_from, year_to, year_skew) - - # Calculate the total seconds in the time window and generate a skewed random second offset. + # --- Main body of generate_random_datetime --- + base_date = datetime(2000, 1, 1) + time_from_dt = datetime.combine(base_date.date(), time_str_to_dt(time_from).time()) + time_to_dt = datetime.combine(base_date.date(), time_str_to_dt(time_to).time()) + if time_from_dt == time_to_dt: + # Full 24-hour range (ensuring we don't end up with zero seconds) + time_to_dt += timedelta(days=1) + elif time_to_dt < time_from_dt: + # Handle cross-midnight range + time_to_dt += timedelta(days=1) total_seconds = int((time_to_dt - time_from_dt).total_seconds()) + if total_seconds <= 0: + raise ValueError(f"Invalid time range: '{time_from}' to '{time_to}' resulted in {total_seconds} seconds") + random_date_obj = random_date(year_from, year_to, year_skew) sec_offset = generate_skewed_random(0, total_seconds, time_of_day_skew) - random_time = time_from_dt + timedelta(seconds=sec_offset) - - # Determine the descriptive strings. + random_time_dt = time_from_dt + timedelta(seconds=sec_offset) + random_time = random_time_dt.time() # extract just the time tod_str = get_time_of_day(random_time.hour) season_str = get_season_part(random_date_obj.month) - return f"{tod_str} during {season_str} of {random_date_obj.year}" class EbuPromptHelperTruncate: