Implement new functions for parsing and retrieving ring bounds in kilometers, enhancing report generation logic. Remove redundant _ring_upper_km function and update sorting of ring items based on lower bounds, improving clarity and accuracy in report outputs.
This commit is contained in:
parent
7dd71f78bf
commit
1020cd97dc
@ -345,6 +345,30 @@ def _add_ring_bullet(doc: Document, ring_label: str, ring_color: str | None, siz
|
||||
r.font.size = Pt(size_pt)
|
||||
|
||||
|
||||
def _parse_ring_bounds_km(label: str) -> tuple[float | None, float | None]:
|
||||
s = str(label).strip()
|
||||
if ":" in s:
|
||||
s = s.split(":", 1)[0]
|
||||
s = s.lower().replace("km", "").strip()
|
||||
if "-" not in s:
|
||||
return None, None
|
||||
try:
|
||||
lower_str, upper_str = s.split("-", 1)
|
||||
return float(lower_str), float(upper_str)
|
||||
except Exception:
|
||||
return None, None
|
||||
|
||||
|
||||
def _ring_lower_km(label: str) -> float:
|
||||
lower, _ = _parse_ring_bounds_km(label)
|
||||
return lower if lower is not None else float("inf")
|
||||
|
||||
|
||||
def _ring_upper_km(label: str) -> float | None:
|
||||
_, upper = _parse_ring_bounds_km(label)
|
||||
return upper
|
||||
|
||||
|
||||
def _ring_color_for_label(label: str) -> str | None:
|
||||
s = str(label)
|
||||
if ":" in s:
|
||||
@ -743,20 +767,6 @@ def create_docx_report(
|
||||
# Align the "outermost" ring used for commentary with the analysis radius used in stats.
|
||||
outermost_upper_km = analysis_radius_km
|
||||
|
||||
def _ring_upper_km(label: str) -> float | None:
|
||||
s = str(label).strip()
|
||||
if ":" in s:
|
||||
s = s.split(":", 1)[0]
|
||||
s = s.lower().replace("km", "").strip()
|
||||
# Expected formats: "0-2.0" or "2.0-4.0"
|
||||
if "-" not in s:
|
||||
return None
|
||||
try:
|
||||
upper = float(s.split("-", 1)[1])
|
||||
return upper
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
rings = []
|
||||
for ring_name, ring_data in ring_stats.items():
|
||||
total = int(ring_data.get("total", 0))
|
||||
@ -1080,7 +1090,10 @@ def create_docx_report(
|
||||
)
|
||||
|
||||
ring_items: list[str] = []
|
||||
for ring_name, ring_data in sorted((stats.get("lightning_by_distance_rings") or {}).items()):
|
||||
for ring_name, ring_data in sorted(
|
||||
(stats.get("lightning_by_distance_rings") or {}).items(),
|
||||
key=lambda kv: _ring_lower_km(kv[0]),
|
||||
):
|
||||
if ring_data.get("total", 0) > 0:
|
||||
ring_items.append(
|
||||
s.ring_item.format(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user