Parcourir la source

Add dataclass wizard and fix dataclasses

Colin Powell il y a 10 mois
Parent
commit
2e57b2ce07
3 fichiers modifiés avec 453 ajouts et 346 suppressions
  1. 431 326
      poetry.lock
  2. 1 0
      pyproject.toml
  3. 21 20
      vrobbler/apps/scrobbles/dataclasses.py

Fichier diff supprimé car celui-ci est trop grand
+ 431 - 326
poetry.lock


+ 1 - 0
pyproject.toml

@@ -45,6 +45,7 @@ pendulum = "^2.1.2"
 trafilatura = "^1.6.3"
 django-imagekit = "^5.0.0"
 thefuzz = "^0.22.1"
+dataclass-wizard = "0.22.0"
 
 [tool.poetry.group.dev]
 optional = true

+ 21 - 20
vrobbler/apps/scrobbles/dataclasses.py

@@ -5,8 +5,7 @@ from typing import Optional
 
 from dataclass_wizard import JSONWizard
 from django.contrib.auth import get_user_model
-
-from vrobbler.apps.locations.models import GeoLocation
+from locations.models import GeoLocation
 
 User = get_user_model()
 
@@ -21,7 +20,7 @@ class ScrobbleMetadataDecoder(json.JSONDecoder):
         return o.__dict__
 
 
-class BaseJSONMetadata(JSONWizard):
+class JSONMetadata(JSONWizard):
     @property
     def asdict(self):
         return asdict(self)
@@ -32,21 +31,16 @@ class BaseJSONMetadata(JSONWizard):
 
 
 @dataclass
-class BoardGameScore(BaseJSONMetadata):
+class BoardGameScore(JSONMetadata):
     user_id: Optional[int] = None
     name: Optional[str] = None
     color: Optional[str] = None
     score: Optional[int] = None
     win: Optional[bool] = None
-    location: Optional[str] = None
-    geo_location_id: Optional[int] = None
-
-    def user(self):
-        return User.objects.filter(id=self.user_id).first()
 
 
 @dataclass
-class BoardGameMetadata(BaseJSONMetadata):
+class BoardGameMetadata(JSONMetadata):
     players: Optional[list[BoardGameScore]] = None
 
     def geo_location(self):
@@ -54,19 +48,26 @@ class BoardGameMetadata(BaseJSONMetadata):
 
 
 @dataclass
-class LifeEventMetadata(BaseJSONMetadata):
+class BookPageMetadata(JSONMetadata):
+    page_number: Optional[int] = None
+    end_ts: Optional[int] = None
+    start_ts: Optional[int] = None
+    duration: Optional[int] = None
+
+
+@dataclass
+class BookMetadata(JSONMetadata):
+    koreader_hash: Optional[str]
+    pages_read: Optional[int]
+    page_data: Optional[list[BookPageMetadata]]
+
+
+@dataclass
+class LifeEventMetadata(JSONMetadata):
     participant_user_ids: Optional[list[int]] = None
     location: Optional[str] = None
     geo_location_id: Optional[int] = None
 
-    @property
-    def __dict__(self):
-        return asdict(self)
-
-    @property
-    def json(self):
-        return json.dumps(self.__dict__)
-
     def participants(self) -> list[User]:
         participants = []
         if self.participant_user_ids:
@@ -79,7 +80,7 @@ class LifeEventMetadata(BaseJSONMetadata):
 
 
 @dataclass
-class VideoMetadata(BaseJSONMetadata):
+class VideoMetadata(JSONMetadata):
     title: str
     video_type: str
     run_time_seconds: int

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff