feat(api): cast StreamSetting raw_value to value (#1991)

This commit is contained in:
Jonas L 2022-07-26 14:16:34 +02:00 committed by GitHub
parent e75426bc4c
commit 951dc68394
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 53 additions and 3 deletions

View File

@ -1,5 +1,10 @@
import logging
from typing import Optional, Union
from django.db import models
logger = logging.getLogger(__name__)
class Preference(models.Model):
user = models.ForeignKey(
@ -34,15 +39,32 @@ class StreamSetting(models.Model):
max_length=64,
db_column="keyname",
)
value = models.CharField(
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"

View File

@ -0,0 +1,28 @@
import pytest
from ...models import StreamSetting
# pylint: disable=invalid-name,unused-argument
@pytest.mark.parametrize(
"type_name, value",
[
("boolean", True),
("integer", 1),
("string", "hello"),
],
)
def test_stream_setting_value(db, type_name, value):
setting = StreamSetting.objects.create(
key=f"some_{type_name}",
type=type_name,
raw_value=str(value),
)
assert isinstance(setting.value, type(value))
empty_setting = StreamSetting.objects.create(
key=f"some_empty_{type_name}",
type=type_name,
raw_value="",
)
assert empty_setting.value is None

View File

@ -6826,7 +6826,7 @@ components:
type: string
format: uri
readOnly: true
value:
raw_value:
type: string
nullable: true
maxLength: 255
@ -7796,7 +7796,7 @@ components:
type: string
format: uri
readOnly: true
value:
raw_value:
type: string
nullable: true
maxLength: 255