From 1cceb2bd63b55b07b2acc3efe69a4609c4f66738 Mon Sep 17 00:00:00 2001 From: Colin Powell Date: Thu, 23 May 2024 00:16:24 -0400 Subject: [PATCH] [lifeevents] Add metadata dataclasses --- vrobbler/apps/lifeevents/models.py | 2 +- vrobbler/apps/scrobbles/dataclasses.py | 57 ++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 vrobbler/apps/scrobbles/dataclasses.py diff --git a/vrobbler/apps/lifeevents/models.py b/vrobbler/apps/lifeevents/models.py index f3e9f93..927ea08 100644 --- a/vrobbler/apps/lifeevents/models.py +++ b/vrobbler/apps/lifeevents/models.py @@ -2,7 +2,7 @@ from django.apps import apps from django.db import models from django.urls import reverse import pendulum -from lifeevents.dataclasses import LifeEventMetadata +from scrobbles.dataclasses import LifeEventMetadata from scrobbles.mixins import ScrobblableMixin BNULL = {"blank": True, "null": True} diff --git a/vrobbler/apps/scrobbles/dataclasses.py b/vrobbler/apps/scrobbles/dataclasses.py new file mode 100644 index 0000000..f1502f4 --- /dev/null +++ b/vrobbler/apps/scrobbles/dataclasses.py @@ -0,0 +1,57 @@ +import json +from dataclasses import dataclass, asdict + +from typing import Optional + + +class JSONMetadata(object): + @property + def asdict(self): + return asdict(self) + + @property + def json(self): + return json.dumps(self.asdict) + + +@dataclass +class BoardGameScore(JSONMetadata): + user_id: int + score: Optional[int] + win: Optional[bool] + + +@dataclass +class BoardGameMetadata(JSONMetadata): + players: Optional[list[BoardGameScore]] + + +@dataclass +class LifeEventMetadata(JSONMetadata): + location: Optional[str] + geo_location_id: Optional[int] + participant_user_ids: Optional[list[int]] + + @property + def __dict__(self): + return asdict(self) + + @property + def json(self): + return json.dumps(self.__dict__) + + +@dataclass +class VideoMetadata(JSONMetadata): + title: str + video_type: str + run_time_seconds: int + kind: str + year: Optional[int] + episode_number: Optional[int] + source_url: Optional[str] + imdbID: Optional[str] + season_number: Optional[int] + cover_url = Optional[str] + next_imdb_id: Optional[int] + tv_series_id: Optional[str]