mirror of
https://git.vectorsigma.ru/public/tubearchivist.git
synced 2026-08-04 23:59:24 +00:00
use enums for validation
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
from channel.serializers import ChannelSerializer
|
||||
from common.serializers import PaginationSerializer
|
||||
from rest_framework import serializers
|
||||
from video.src.constants import OrderEnum, SortEnum, VideoTypeEnum, WatchedEnum
|
||||
|
||||
|
||||
class PlayerSerializer(serializers.Serializer):
|
||||
@@ -91,7 +92,7 @@ class VideoSerializer(serializers.Serializer):
|
||||
title = serializers.CharField()
|
||||
vid_last_refresh = serializers.CharField()
|
||||
vid_thumb_url = serializers.CharField()
|
||||
vid_type = serializers.ChoiceField(choices=["video", "stream", "short"])
|
||||
vid_type = serializers.ChoiceField(choices=VideoTypeEnum.values_known())
|
||||
youtube_id = serializers.CharField()
|
||||
_index = serializers.CharField(required=False)
|
||||
_score = serializers.FloatField(required=False)
|
||||
@@ -110,22 +111,12 @@ class VideoListQuerySerializer(serializers.Serializer):
|
||||
playlist = serializers.CharField(required=False)
|
||||
channel = serializers.CharField(required=False)
|
||||
watch = serializers.ChoiceField(
|
||||
choices=["watched", "unwatched", "continue"], required=False
|
||||
choices=WatchedEnum.values(), required=False
|
||||
)
|
||||
sort = serializers.ChoiceField(
|
||||
choices=[
|
||||
"published",
|
||||
"downloaded",
|
||||
"views",
|
||||
"likes",
|
||||
"duration",
|
||||
"filesize",
|
||||
],
|
||||
required=False,
|
||||
)
|
||||
order = serializers.ChoiceField(choices=["asc", "desc"], required=False)
|
||||
sort = serializers.ChoiceField(choices=SortEnum.names(), required=False)
|
||||
order = serializers.ChoiceField(choices=OrderEnum.values(), required=False)
|
||||
type = serializers.ChoiceField(
|
||||
choices=["videos", "streams", "shorts"], required=False
|
||||
choices=VideoTypeEnum.values_known(), required=False
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -11,6 +11,16 @@ class VideoTypeEnum(enum.Enum):
|
||||
SHORTS = "shorts"
|
||||
UNKNOWN = "unknown"
|
||||
|
||||
@classmethod
|
||||
def values(cls) -> list[str]:
|
||||
"""value list"""
|
||||
return [i.value for i in cls]
|
||||
|
||||
@classmethod
|
||||
def values_known(cls) -> list[str]:
|
||||
"""values known"""
|
||||
return [i.value for i in cls if i.value != "unknown"]
|
||||
|
||||
|
||||
class SortEnum(enum.Enum):
|
||||
"""all sort by options"""
|
||||
@@ -22,9 +32,37 @@ class SortEnum(enum.Enum):
|
||||
DURATION = "player.duration"
|
||||
MEDIASIZE = "media_size"
|
||||
|
||||
@classmethod
|
||||
def values(cls) -> list[str]:
|
||||
"""value list"""
|
||||
return [i.value for i in cls]
|
||||
|
||||
@classmethod
|
||||
def names(cls) -> list[str]:
|
||||
"""name list"""
|
||||
return [i.name.lower() for i in cls]
|
||||
|
||||
|
||||
class OrderEnum(enum.Enum):
|
||||
"""all order by options"""
|
||||
|
||||
ASC = "asc"
|
||||
DESC = "desc"
|
||||
|
||||
@classmethod
|
||||
def values(cls) -> list[str]:
|
||||
"""value list"""
|
||||
return [i.value for i in cls]
|
||||
|
||||
|
||||
class WatchedEnum(enum.Enum):
|
||||
"""watched state enum"""
|
||||
|
||||
WATCHED = "watched"
|
||||
UNWATCHED = "unwatched"
|
||||
CONTINUE = "continue"
|
||||
|
||||
@classmethod
|
||||
def values(cls) -> list[str]:
|
||||
"""value list"""
|
||||
return [i.value for i in cls]
|
||||
|
||||
Reference in New Issue
Block a user