From ab5c5cfb232de34c1d2a8fed42b9c0d0e6c5fa5f Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Wed, 25 Mar 2026 19:28:35 +0800 Subject: [PATCH] feat: introduce `WundergroundSourceMixin` for fetching, parsing, and extracting weather observation data from Wunderground. --- src/data_collection/wunderground_sources.py | 22 ++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/data_collection/wunderground_sources.py b/src/data_collection/wunderground_sources.py index 60e65d4c..77996297 100644 --- a/src/data_collection/wunderground_sources.py +++ b/src/data_collection/wunderground_sources.py @@ -193,6 +193,17 @@ class WundergroundSourceMixin: text = str(raw or "").strip() if not text: return None + try: + parsed = datetime.strptime(text, "%Y-%m-%dT%H:%M:%S%z") + return parsed.astimezone(timezone.utc).isoformat() + except Exception: + pass + try: + parsed = datetime.strptime(text, "%Y-%m-%d %H:%M:%S") + parsed = parsed.replace(tzinfo=timezone(timedelta(seconds=utc_offset_seconds))) + return parsed.astimezone(timezone.utc).isoformat() + except Exception: + return None @staticmethod def _wu_parse_history_time(raw: Any, utc_offset_seconds: int) -> Optional[str]: @@ -296,17 +307,6 @@ class WundergroundSourceMixin: if len(parsed) > len(best): best = parsed return best - try: - parsed = datetime.strptime(text, "%Y-%m-%dT%H:%M:%S%z") - return parsed.astimezone(timezone.utc).isoformat() - except Exception: - pass - try: - parsed = datetime.strptime(text, "%Y-%m-%d %H:%M:%S") - parsed = parsed.replace(tzinfo=timezone(timedelta(seconds=utc_offset_seconds))) - return parsed.astimezone(timezone.utc).isoformat() - except Exception: - return None @staticmethod def _wu_find_current_observation_block(