site_liveq/liveq/models.py

141 lines
2.8 KiB
Python

#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
from typing import Any, Dict, Optional
from pydantic import BaseModel
class JsonableMixin:
def to_json(self) -> dict[str, Any]:
raise NotImplementedError()
@classmethod
def from_json(cls, o: dict[str, Any]) -> 'JsonableMixin':
raise NotImplementedError()
class QueueItem(JsonableMixin):
def __init__(self,
id: int,
sid: int,
tid: int,
played: bool,
requester_platform: str,
requester_uid: str,
requester_display: str,
) -> None:
self.id = id
self.sid = sid
self.tid = tid
self.played = played
self.requester_platform = requester_platform
self.requester_uid = requester_uid
self.requester_display = requester_display
def to_json(self) -> dict[str, Any]:
return dict(
id=self.id,
sid=self.sid,
tid=self.tid,
played=self.played,
requester_platform=self.requester_platform,
requester_uid=self.requester_uid,
requester_display=self.requester_display,
)
@ classmethod
def from_json(cls, o: dict[str, Any]) -> 'QueueItem':
return cls(**o)
class DetailModel(BaseModel):
detail: Optional[str]
class ConfigAppModel(BaseModel):
root: str
lang: str
title: str
description: str
streamer: str
maxqueue: str
maxbyviewer: str
obschangekeepms: str
class ConfigModulesModel(BaseModel):
osuddr4k: str
osumania4k: str
osumania7k: str
osucatch: str
osutaiko: str
osustd: str
ragnarock: str
class ConfigDifficultiesModel(BaseModel):
osuddr4k: str
osumania4k: str
osumania7k: str
osucatch: str
osutaiko: str
osustd: str
ragnarock: str
class ConfigModel(BaseModel):
app: ConfigAppModel
localization: Dict[str, str]
modules: ConfigModulesModel
difficulties: ConfigDifficultiesModel
class TwitchCallbackModel(BaseModel):
access_token: str
scope: str
state: str
token_type: str
class TokenPayloadModel(BaseModel):
platform: str
id: str
login: str
display: str
expiration: str
avatar: Optional[str]
class UserPermissionsModel(BaseModel):
is_admin: bool
class TokenUserWithPermissionsModel(BaseModel):
user: TokenPayloadModel
permissions: UserPermissionsModel
class SongModel(BaseModel):
title: str
artist: str
mapper: str
difficulty: float
difficulty_name: str
preview: str
thumbnail: str
gamemode: int
url_reference: Optional[str]
tid: int
sid: int
id: int
class QueuedSongModel(BaseModel):
id: int
sid: int
played: bool
requester_platform: str
requester_uid: str
requester_display: str