Align stored AMSC payload timestamps

This commit is contained in:
2569718930@qq.com
2026-06-15 01:11:26 +08:00
parent f98ab4a9fe
commit 717786b1d8
2 changed files with 53 additions and 1 deletions
+41
View File
@@ -162,6 +162,47 @@ def test_raw_observation_store_records_latest_observation(tmp_path):
assert latest["payload"]["temp_c"] == 24.0
def test_observation_collector_aligns_amsc_payload_time_with_record_observed_at(tmp_path):
from src.database.db_manager import DBManager
from web.observation_collector_service import ObservationCollector
from web.services.observation_source_adapters import ObservationRecord
db = DBManager(str(tmp_path / "polyweather.db"))
collector = ObservationCollector(
weather=object(),
profiles=[],
observation_store=db,
)
record = ObservationRecord(
source="amsc_awos",
city="shanghai",
value=25.4,
observed_at="2026-06-14T15:43:00+00:00",
observed_at_local="2026-06-14 23:43:00",
station_code="ZSPD",
station_name="Shanghai Pudong",
runway="",
value_unit="c",
source_label="AMSC AWOS Shanghai Pudong (ZSPD)",
payload={
"source": "amsc_awos",
"temp_c": 25.4,
"observation_time": "2026-06-14T10:44:00+00:00",
"observation_time_local": "2026-06-14 18:44:00",
},
)
assert collector._store_raw_observations([record]) == 1
latest = db.get_latest_raw_observation("amsc_awos", "shanghai")
assert latest is not None
assert latest["observed_at"] == "2026-06-14T15:43:00+00:00"
assert latest["payload"]["observation_time"] == "2026-06-14T15:43:00+00:00"
assert latest["payload"]["observation_time_local"] == "2026-06-14 23:43:00"
def test_raw_observation_failure_preserves_last_success_and_increments_errors(tmp_path):
from src.database.db_manager import DBManager
+12 -1
View File
@@ -403,6 +403,17 @@ class ObservationCollector:
exc,
)
@staticmethod
def _raw_payload_for_record(record: ObservationRecord) -> dict[str, Any]:
payload = dict(record.payload)
source = str(record.source or payload.get("source") or "").strip().lower()
if source == "amsc_awos":
if record.observed_at:
payload["observation_time"] = record.observed_at
if record.observed_at_local:
payload["observation_time_local"] = record.observed_at_local
return payload
def _store_raw_observations(self, records: Sequence[ObservationRecord]) -> int:
store = self.observation_store
writer = getattr(store, "append_raw_observation", None)
@@ -424,7 +435,7 @@ class ObservationCollector:
runway=record.runway,
value_unit=record.value_unit,
status="ok",
payload=dict(record.payload),
payload=self._raw_payload_for_record(record),
)
written_records.append(record)
wrote += 1