fix: align dynamic choice boundaries

This commit is contained in:
Jesse_Chen
2026-07-19 04:38:20 +08:00
parent d9969d0829
commit 4aaf1078ad
12 changed files with 182 additions and 48 deletions
+21 -14
View File
@@ -4,7 +4,7 @@ from __future__ import annotations
from collections.abc import Sequence
from datetime import date
from typing import Final, TypedDict
from typing import Final, Literal, TypedDict, assert_never
DIMENSION_CONTEXT: Final = {
"education": "一次明显的升学、转学或学习方向变化",
@@ -21,21 +21,28 @@ class DateRange(TypedDict):
window_end: str
def _range_label(item: DateRange, precision: str) -> str:
RangePrecision = Literal["year", "month", "day"]
def _range_label(item: DateRange, precision: RangePrecision) -> str:
start = date.fromisoformat(item["window_start"])
end = date.fromisoformat(item["window_end"])
if precision == "year":
return f"{start.year}" if start.year == end.year else f"{start.year}{end.year}"
if precision == "month":
if start.year == end.year:
return f"{start.year}{start.month} 月—{end.month}"
return f"{start.year}{start.month} 月—{end.year}{end.month}"
if start.year == end.year and start.month == end.month:
return f"{start.year}{start.month}{start.day} 日—{end.day}"
return (
f"{start.year}{start.month}{start.day} 日—"
f"{end.year}{end.month}{end.day}"
)
match precision:
case "year":
return f"{start.year}" if start.year == end.year else f"{start.year}{end.year}"
case "month":
if start.year == end.year:
return f"{start.year}{start.month} 月—{end.month}"
return f"{start.year}{start.month} 月—{end.year}{end.month}"
case "day":
if start.year == end.year and start.month == end.month:
return f"{start.year}{start.month}{start.day} 日—{end.day}"
return (
f"{start.year}{start.month}{start.day} 日—"
f"{end.year}{end.month}{end.day}"
)
case unreachable:
assert_never(unreachable)
def visible_range_labels(items: Sequence[DateRange]) -> list[str]: