fix somethings
This commit is contained in:
@@ -4,6 +4,8 @@ from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from app.infrastructure.perception.base_event_store import BaseEventStore
|
||||
|
||||
MOCK_EVENTS: list[dict[str, Any]] = [
|
||||
# ------------------------------------------------------------------ HIGH
|
||||
{
|
||||
@@ -379,18 +381,18 @@ MOCK_EVENTS: list[dict[str, Any]] = [
|
||||
},
|
||||
]
|
||||
|
||||
# Index for fast lookup
|
||||
_EVENT_INDEX: dict[str, dict] = {e["id"]: e for e in MOCK_EVENTS}
|
||||
|
||||
|
||||
class MockEventStore:
|
||||
class MockEventStore(BaseEventStore):
|
||||
"""In-memory mock store for regulatory events."""
|
||||
|
||||
def __init__(self) -> None:
|
||||
self._events: list[dict] = [dict(e) for e in MOCK_EVENTS]
|
||||
self._index: dict[str, dict] = {e["id"]: e for e in self._events}
|
||||
|
||||
def all(self) -> list[dict]:
|
||||
return list(MOCK_EVENTS)
|
||||
return list(self._events)
|
||||
|
||||
def get(self, event_id: str) -> dict | None:
|
||||
return _EVENT_INDEX.get(event_id)
|
||||
return self._index.get(event_id)
|
||||
|
||||
def filter(
|
||||
self,
|
||||
@@ -399,23 +401,39 @@ class MockEventStore:
|
||||
impact_level: str | None = None,
|
||||
limit: int = 50,
|
||||
) -> list[dict]:
|
||||
events = list(MOCK_EVENTS)
|
||||
events = list(self._events)
|
||||
if source:
|
||||
events = [e for e in events if e["source"] == source]
|
||||
if impact_level:
|
||||
events = [e for e in events if e["impact_level"] == impact_level]
|
||||
events.sort(key=lambda e: e["published_at"], reverse=True)
|
||||
events.sort(key=lambda e: e.get("published_at") or "", reverse=True)
|
||||
return events[:limit]
|
||||
|
||||
def stats(self) -> dict:
|
||||
from datetime import date, timedelta
|
||||
|
||||
events = MOCK_EVENTS
|
||||
events = self._events
|
||||
cutoff = (date.today() - timedelta(days=90)).isoformat()
|
||||
return {
|
||||
"total": len(events),
|
||||
"high_impact": sum(1 for e in events if e["impact_level"] == "high"),
|
||||
"medium_impact": sum(1 for e in events if e["impact_level"] == "medium"),
|
||||
"low_impact": sum(1 for e in events if e["impact_level"] == "low"),
|
||||
"recent_90d": sum(1 for e in events if e["published_at"] >= cutoff),
|
||||
"recent_90d": sum(1 for e in events if (e.get("published_at") or "") >= cutoff),
|
||||
}
|
||||
|
||||
def upsert(self, event: dict) -> None:
|
||||
"""Insert or update event in the in-memory list (used in tests)."""
|
||||
existing = self._index.get(event["id"])
|
||||
if existing:
|
||||
existing.update(event)
|
||||
else:
|
||||
self._events.append(event)
|
||||
self._index[event["id"]] = event
|
||||
|
||||
def get_by_standard_code(self, standard_code: str) -> dict | None:
|
||||
"""Return most-recent event with matching standard_code."""
|
||||
matches = [e for e in self._events if e.get("standard_code") == standard_code]
|
||||
if not matches:
|
||||
return None
|
||||
return max(matches, key=lambda e: e.get("published_at", ""))
|
||||
|
||||
Reference in New Issue
Block a user