Files
vrobbler/vrobbler/apps/moods/models.py

64 lines
1.6 KiB
Python

import logging
from dataclasses import dataclass
from typing import Optional
from django.contrib.auth import get_user_model
from django.db import models
from django.urls import reverse
from imagekit.models import ImageSpecField
from imagekit.processors import ResizeToFit
from scrobbles.dataclasses import BaseLogData
from scrobbles.mixins import ScrobblableConstants, ScrobblableMixin
logger = logging.getLogger(__name__)
BNULL = {"blank": True, "null": True}
User = get_user_model()
@dataclass
class MoodLogData(BaseLogData):
reasons: Optional[str] = None
class Mood(ScrobblableMixin):
description = models.TextField(**BNULL)
image = models.ImageField(upload_to="moods/", **BNULL)
image_small = ImageSpecField(
source="thumbnail",
processors=[ResizeToFit(100, 100)],
format="JPEG",
options={"quality": 60},
)
image_medium = ImageSpecField(
source="thumbnail",
processors=[ResizeToFit(300, 300)],
format="JPEG",
options={"quality": 75},
)
def __str__(self):
if self.title:
return self.title
return str(self.uuid)
def get_absolute_url(self):
return reverse("moods:mood_detail", kwargs={"slug": self.uuid})
@property
def subtitle(self) -> str:
return ""
@property
def strings(self) -> ScrobblableConstants:
return ScrobblableConstants(verb="Feeling", tags="thinking")
@property
def logdata_cls(self):
return MoodLogData
@property
def primary_image_url(self) -> str:
if self.image:
return self.image.url
return ""