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:
erdemerikci 2026-06-19 16:27:30 +03:00
parent 7dd71f78bf
commit 1020cd97dc

View File

@ -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(