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:
@@ -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,
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user