Optimized webhook event dispatch with pre-built string lookup table.
CI / Formatting (push) Successful in 5s
CI / Linting (push) Successful in 5s
CI / Tests (Python 3.12) (push) Successful in 14s
CI / Tests (Python 3.13) (push) Successful in 13s
CI / Tests (Python 3.14) (push) Successful in 11s
CI / Type Checking (push) Successful in 10s
CI / Spelling (push) Successful in 5s
CI / Formatting (push) Successful in 5s
CI / Linting (push) Successful in 5s
CI / Tests (Python 3.12) (push) Successful in 14s
CI / Tests (Python 3.13) (push) Successful in 13s
CI / Tests (Python 3.14) (push) Successful in 11s
CI / Type Checking (push) Successful in 10s
CI / Spelling (push) Successful in 5s
This commit is contained in:
@@ -402,6 +402,12 @@ _EVENT_TYPE_MAP: dict[EventType, type[Event]] = {
|
|||||||
EventType.VISIBILITY_UPDATE: VisibilityUpdateEvent,
|
EventType.VISIBILITY_UPDATE: VisibilityUpdateEvent,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Pre-built lookup table keyed by raw webhook strings, derived from
|
||||||
|
# _EVENT_TYPE_MAP at import time so StrEnum overhead is paid once.
|
||||||
|
_EVENT_DISPATCH: dict[str, tuple[EventType, type[Event]]] = {
|
||||||
|
et.value: (et, cls) for et, cls in _EVENT_TYPE_MAP.items()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def parse_event(data: dict[str, Any]) -> _ParsedEvent | None:
|
def parse_event(data: dict[str, Any]) -> _ParsedEvent | None:
|
||||||
"""Parse a raw webhook payload into a typed event.
|
"""Parse a raw webhook payload into a typed event.
|
||||||
@@ -416,13 +422,11 @@ def parse_event(data: dict[str, Any]) -> _ParsedEvent | None:
|
|||||||
if event_type_str is None:
|
if event_type_str is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
try:
|
entry = _EVENT_DISPATCH.get(event_type_str)
|
||||||
event_type = EventType(event_type_str)
|
if entry is None:
|
||||||
except ValueError:
|
|
||||||
# Unknown event type. This could be a new Owncast feature we don't support yet.
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
event_class = _EVENT_TYPE_MAP[event_type]
|
event_type, event_class = entry
|
||||||
return event_type, event_class.from_dict(event_data)
|
return event_type, event_class.from_dict(event_data)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user