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 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(
description="Generate Weekly Report",
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(
"--hash-length",
dest="hash_length",
@@ -108,6 +124,7 @@ def argparse_create() -> argparse.ArgumentParser:
def report_personal_weekly_get(
username: str,
start: datetime.datetime,
num_days: int,
*,
hash_length: int,
verbose: bool = True,
@@ -162,7 +179,7 @@ def report_personal_weekly_get(
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_str = date_curr.strftime("%Y-%m-%d")
print_progress(f"Requesting activity of {date_curr_str}")
@@ -440,28 +457,39 @@ def main() -> None:
if not username:
return
# end_date = datetime.datetime(2020, 3, 14)
end_date = datetime.datetime.now() - datetime.timedelta(weeks=(args.weeks_ago - 1))
weekday = end_date.weekday()
if args.date:
num_days = 1 # Show only one day.
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
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)
print(f"## {start_date_str}\n")
else:
time_delta = weekday
start_date = end_date - datetime.timedelta(days=time_delta, hours=end_date.hour)
num_days = 7 # Show an entire week.
# 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)
# 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)
# Assuming I am lazy and making this at last moment or even later in worst case
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:
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(
username,
start_date,
num_days,
hash_length=args.hash_length,
verbose=args.verbose,
)