feat(api): cast StreamSetting raw_value to value (#1991)
This commit is contained in:
parent
e75426bc4c
commit
951dc68394
|
@ -1,5 +1,10 @@
|
||||||
|
import logging
|
||||||
|
from typing import Optional, Union
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class Preference(models.Model):
|
class Preference(models.Model):
|
||||||
user = models.ForeignKey(
|
user = models.ForeignKey(
|
||||||
|
@ -34,15 +39,32 @@ class StreamSetting(models.Model):
|
||||||
max_length=64,
|
max_length=64,
|
||||||
db_column="keyname",
|
db_column="keyname",
|
||||||
)
|
)
|
||||||
value = models.CharField(
|
raw_value = models.CharField(
|
||||||
max_length=255,
|
max_length=255,
|
||||||
blank=True,
|
blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
|
db_column="value",
|
||||||
)
|
)
|
||||||
type = models.CharField(
|
type = models.CharField(
|
||||||
max_length=16,
|
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:
|
class Meta:
|
||||||
managed = False
|
managed = False
|
||||||
db_table = "cc_stream_setting"
|
db_table = "cc_stream_setting"
|
||||||
|
|
|
@ -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
|
|
@ -6826,7 +6826,7 @@ components:
|
||||||
type: string
|
type: string
|
||||||
format: uri
|
format: uri
|
||||||
readOnly: true
|
readOnly: true
|
||||||
value:
|
raw_value:
|
||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
maxLength: 255
|
maxLength: 255
|
||||||
|
@ -7796,7 +7796,7 @@ components:
|
||||||
type: string
|
type: string
|
||||||
format: uri
|
format: uri
|
||||||
readOnly: true
|
readOnly: true
|
||||||
value:
|
raw_value:
|
||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
maxLength: 255
|
maxLength: 255
|
||||||
|
|
Loading…
Reference in New Issue