Tools: add option to weekly log generator to only show a single day

Add a new CLI option `--date YYYY-MM-DD` to the weekly log generator. Using
it will make it ignore the `--weeks-ago` parameter, and just show the
activity for that specific day.

This is just something I personally found useful, to occasionally inspect
a specific date (WBSO daily log).

Pull Request: https://projects.blender.org/blender/blender/pulls/141281
This commit is contained in:
Sybren A. Stüvel
2025-07-03 10:38:13 +02:00
parent def2db3bdb
commit 90c05aa2d0

View File

@@ -62,6 +62,14 @@ else:
def argparse_create() -> argparse.ArgumentParser: def argparse_create() -> argparse.ArgumentParser:
def str_as_isodate(value: str) -> datetime.datetime:
try:
value_as_date = datetime.datetime.fromisoformat(value)
except Exception as ex:
raise argparse.ArgumentTypeError("Must be a valid ISO date (YYYY-MM-DD), failed: {!s}".format(ex))
return value_as_date
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description="Generate Weekly Report", description="Generate Weekly Report",
epilog="This script is typically used to help write weekly reports", epilog="This script is typically used to help write weekly reports",
@@ -87,6 +95,14 @@ def argparse_create() -> argparse.ArgumentParser:
), ),
) )
parser.add_argument(
"--date",
dest="date",
type=str_as_isodate,
default="",
help="Show only for this day (YYYY-MM-DD), and not for an entire week."
)
parser.add_argument( parser.add_argument(
"--hash-length", "--hash-length",
dest="hash_length", dest="hash_length",
@@ -108,6 +124,7 @@ def argparse_create() -> argparse.ArgumentParser:
def report_personal_weekly_get( def report_personal_weekly_get(
username: str, username: str,
start: datetime.datetime, start: datetime.datetime,
num_days: int,
*, *,
hash_length: int, hash_length: int,
verbose: bool = True, verbose: bool = True,
@@ -162,7 +179,7 @@ def report_personal_weekly_get(
user_data: dict[str, Any] = gitea_user_get(username) user_data: dict[str, Any] = gitea_user_get(username)
for i in range(7): for i in range(num_days):
date_curr = start + datetime.timedelta(days=i) date_curr = start + datetime.timedelta(days=i)
date_curr_str = date_curr.strftime("%Y-%m-%d") date_curr_str = date_curr.strftime("%Y-%m-%d")
print_progress(f"Requesting activity of {date_curr_str}") print_progress(f"Requesting activity of {date_curr_str}")
@@ -440,28 +457,39 @@ def main() -> None:
if not username: if not username:
return return
# end_date = datetime.datetime(2020, 3, 14) if args.date:
end_date = datetime.datetime.now() - datetime.timedelta(weeks=(args.weeks_ago - 1)) num_days = 1 # Show only one day.
weekday = end_date.weekday() start_date = args.date
start_date_str = start_date.strftime('%B ') + str(start_date.day)
# Assuming I am lazy and making this at last moment or even later in worst case print(f"## {start_date_str}\n")
if weekday < 2:
time_delta = 7 + weekday
start_date = end_date - datetime.timedelta(days=time_delta, hours=end_date.hour)
end_date -= datetime.timedelta(days=weekday, hours=end_date.hour)
else: else:
time_delta = weekday num_days = 7 # Show an entire week.
start_date = end_date - datetime.timedelta(days=time_delta, hours=end_date.hour) # end_date = datetime.datetime(2020, 3, 14)
end_date = datetime.datetime.now() - datetime.timedelta(weeks=(args.weeks_ago - 1))
weekday = end_date.weekday()
sunday = start_date + datetime.timedelta(days=6) # Assuming I am lazy and making this at last moment or even later in worst case
# week = start_date.isocalendar()[1] if weekday < 2:
start_date_str = start_date.strftime('%B ') + str(start_date.day) time_delta = 7 + weekday
end_date_str = str(sunday.day) if start_date.month == sunday.month else sunday.strftime('%B ') + str(sunday.day) start_date = end_date - datetime.timedelta(days=time_delta, hours=end_date.hour)
end_date -= datetime.timedelta(days=weekday, hours=end_date.hour)
else:
time_delta = weekday
start_date = end_date - datetime.timedelta(days=time_delta, hours=end_date.hour)
sunday = start_date + datetime.timedelta(days=6)
# week = start_date.isocalendar()[1]
start_date_str = start_date.strftime('%B ') + str(start_date.day)
end_date_str = str(sunday.day) if start_date.month == sunday.month else sunday.strftime('%B ') + str(sunday.day)
print(f"## {start_date_str} - {end_date_str}\n")
print(f"## {start_date_str} - {end_date_str}\n")
report_personal_weekly_get( report_personal_weekly_get(
username, username,
start_date, start_date,
num_days,
hash_length=args.hash_length, hash_length=args.hash_length,
verbose=args.verbose, verbose=args.verbose,
) )