73 lines
1.8 KiB
Python
73 lines
1.8 KiB
Python
import json
|
|
from dataclasses import dataclass, asdict
|
|
from typing import Any, Dict, List, Optional
|
|
from datetime import datetime
|
|
|
|
# Definer dataclassene for strukturen
|
|
@dataclass
|
|
class EventMetadata:
|
|
derivedFromEventId: str
|
|
eventId: str
|
|
referenceId: str
|
|
status: str
|
|
created: datetime
|
|
source: str
|
|
|
|
def to_dict(self):
|
|
return asdict(self)
|
|
|
|
|
|
@dataclass
|
|
class EventData:
|
|
title: str
|
|
sanitizedName: str
|
|
searchTitles: List[str]
|
|
|
|
def to_dict(self):
|
|
return asdict(self)
|
|
|
|
@dataclass
|
|
class MediaEvent:
|
|
metadata: EventMetadata
|
|
eventType: str
|
|
data: Any| EventData
|
|
|
|
def to_dict(self):
|
|
return asdict(self)
|
|
|
|
# Funksjon for å parse datetime fra streng
|
|
def parse_datetime(datetime_str: str) -> datetime:
|
|
return datetime.fromisoformat(datetime_str)
|
|
|
|
def event_data_to_json(event_data: EventData) -> str:
|
|
return json.dumps(event_data.to_dict())
|
|
|
|
# Funksjon for å konvertere JSON til klasser
|
|
def json_to_media_event(json_data: str) -> MediaEvent:
|
|
data_dict = json.loads(json_data)
|
|
|
|
metadata_dict: Dict[str, str] = data_dict['metadata']
|
|
event_data_dict = data_dict['data']
|
|
|
|
metadata = EventMetadata(
|
|
derivedFromEventId=metadata_dict['derivedFromEventId'],
|
|
eventId=metadata_dict['eventId'],
|
|
referenceId=metadata_dict['referenceId'],
|
|
status=metadata_dict['status'],
|
|
created=parse_datetime(metadata_dict['created']),
|
|
source= metadata_dict.get('source', None)
|
|
)
|
|
|
|
event_data = EventData(
|
|
title=event_data_dict['title'],
|
|
sanitizedName=event_data_dict['sanitizedName'],
|
|
searchTitles=event_data_dict['searchTitles']
|
|
)
|
|
|
|
media_event = MediaEvent(
|
|
metadata=metadata,
|
|
eventType=data_dict['eventType'],
|
|
data=event_data
|
|
)
|
|
|
|
return media_event |