From daea2684654b98cd9133b23a7cdc6006f83772e6 Mon Sep 17 00:00:00 2001 From: Colin Powell Date: Thu, 23 May 2024 00:26:56 -0400 Subject: [PATCH] Fix display of life events --- vrobbler/apps/lifeevents/models.py | 3 +++ vrobbler/apps/lifeevents/urls.py | 12 +++++++----- vrobbler/apps/lifeevents/views.py | 4 ++-- vrobbler/apps/scrobbles/dataclasses.py | 10 ++++++++++ vrobbler/apps/scrobbles/models.py | 10 +++++++++- 5 files changed, 31 insertions(+), 8 deletions(-) diff --git a/vrobbler/apps/lifeevents/models.py b/vrobbler/apps/lifeevents/models.py index 927ea08..b826c48 100644 --- a/vrobbler/apps/lifeevents/models.py +++ b/vrobbler/apps/lifeevents/models.py @@ -13,6 +13,9 @@ class LifeEvent(ScrobblableMixin): description = models.TextField(**BNULL) + def __str__(self): + return self.title + def get_absolute_url(self): return reverse( "life-events:life-event_detail", kwargs={"slug": self.uuid} diff --git a/vrobbler/apps/lifeevents/urls.py b/vrobbler/apps/lifeevents/urls.py index b922f60..c803fba 100644 --- a/vrobbler/apps/lifeevents/urls.py +++ b/vrobbler/apps/lifeevents/urls.py @@ -1,14 +1,16 @@ from django.urls import path from lifeevents import views -app_name = "events" +app_name = "lifeevents" urlpatterns = [ - path("events/", views.EventListView.as_view(), name="event_list"), path( - "event//", - views.EventDetailView.as_view(), - name="event_detail", + "lifeevents/", views.LifeEventListView.as_view(), name="lifeevent_list" + ), + path( + "lifeevent//", + views.LifeEventDetailView.as_view(), + name="life-event_detail", ), ] diff --git a/vrobbler/apps/lifeevents/views.py b/vrobbler/apps/lifeevents/views.py index 1b28622..ed3609c 100644 --- a/vrobbler/apps/lifeevents/views.py +++ b/vrobbler/apps/lifeevents/views.py @@ -2,11 +2,11 @@ from django.views import generic from lifeevents.models import LifeEvent -class EventListView(generic.ListView): +class LifeEventListView(generic.ListView): model = LifeEvent paginate_by = 20 -class EventDetailView(generic.DetailView): +class LifeEventDetailView(generic.DetailView): model = LifeEvent slug_field = "uuid" diff --git a/vrobbler/apps/scrobbles/dataclasses.py b/vrobbler/apps/scrobbles/dataclasses.py index f1502f4..018d1b0 100644 --- a/vrobbler/apps/scrobbles/dataclasses.py +++ b/vrobbler/apps/scrobbles/dataclasses.py @@ -4,6 +4,16 @@ from dataclasses import dataclass, asdict from typing import Optional +class ScrobbleMetadataEncoder(json.JSONEncoder): + def default(self, o): + return o.__dict__ + + +class ScrobbleMetadataDecoder(json.JSONDecoder): + def default(self, o): + return o.__dict__ + + class JSONMetadata(object): @property def asdict(self): diff --git a/vrobbler/apps/scrobbles/models.py b/vrobbler/apps/scrobbles/models.py index 7a9c69d..02c4bcd 100644 --- a/vrobbler/apps/scrobbles/models.py +++ b/vrobbler/apps/scrobbles/models.py @@ -38,6 +38,10 @@ from sports.models import SportEvent from videogames import retroarch from videogames.models import VideoGame from videos.models import Series, Video +from scrobbles.dataclasses import ( + ScrobbleMetadataDecoder, + ScrobbleMetadataEncoder, +) from webpages.models import WebPage from lifeevents.models import LifeEvent @@ -526,7 +530,11 @@ class Scrobble(TimeStampedModel): # Metadata source = models.CharField(max_length=255, **BNULL) - log = models.JSONField(**BNULL) + log = models.JSONField( + **BNULL, + encoder=ScrobbleMetadataEncoder, + decoder=ScrobbleMetadataDecoder, + ) timezone = models.CharField(max_length=50, **BNULL) # Fields for keeping track of book data