sintonia/api/libretime_api/core/models/preference.py

71 lines
1.6 KiB
Python

import logging
from typing import Optional, Union
from django.db import models
logger = logging.getLogger(__name__)
class Preference(models.Model):
user = models.ForeignKey(
"core.User",
on_delete=models.CASCADE,
blank=True,
null=True,
db_column="subjid",
)
key = models.CharField(
max_length=255,
unique=True,
blank=True,
null=True,
db_column="keystr",
)
value = models.TextField(
blank=True,
null=True,
db_column="valstr",
)
class Meta:
managed = False
db_table = "cc_pref"
unique_together = (("user", "key"),)
class StreamSetting(models.Model):
key = models.CharField(
primary_key=True,
max_length=64,
db_column="keyname",
)
raw_value = models.CharField(
max_length=255,
blank=True,
null=True,
db_column="value",
)
type = models.CharField(
max_length=16,
)
@property
def value(self) -> Optional[Union[bool, int, str]]:
# Ignore if value is an empty string
if not self.raw_value:
return None
if self.type == "boolean":
return self.raw_value.lower() == "true"
if self.type == "integer":
return int(self.raw_value)
if self.type == "string":
return self.raw_value
logger.warning(f"StreamSetting {self.key} has invalid type {self.type}")
return self.raw_value
class Meta:
managed = False
db_table = "cc_stream_setting"