Untested Ormar and FastAPI update
This commit is contained in:
+83
-74
@@ -10,7 +10,7 @@ from typing import Optional
|
||||
|
||||
import ormar
|
||||
from ormar import ReferentialAction
|
||||
from pydantic import BaseModel, Json, validator
|
||||
from pydantic import BaseModel, Json, field_validator, ConfigDict, RootModel
|
||||
from enum import Enum
|
||||
from . import metadata, database
|
||||
from .quiztivity import QuizTivityPage
|
||||
@@ -45,13 +45,13 @@ class User(ormar.Model):
|
||||
totp_secret: str = ormar.String(max_length=32, min_length=32, nullable=True, default=None)
|
||||
storage_used: int = ormar.BigInteger(nullable=False, default=0, minimum=0)
|
||||
|
||||
class Meta:
|
||||
tablename = "users"
|
||||
metadata = metadata
|
||||
database = database
|
||||
ormar_config = ormar.OrmarConfig(
|
||||
tablename="users",
|
||||
metadata=metadata,
|
||||
database=database,
|
||||
)
|
||||
|
||||
class Config:
|
||||
use_enum_values = True
|
||||
model_config = ConfigDict(use_enum_values=True)
|
||||
|
||||
|
||||
class FidoCredentials(ormar.Model):
|
||||
@@ -61,20 +61,22 @@ class FidoCredentials(ormar.Model):
|
||||
sign_count: int = ormar.Integer()
|
||||
user: Optional[User] = ormar.ForeignKey(User, ondelete=ReferentialAction.CASCADE)
|
||||
|
||||
class Meta:
|
||||
tablename = "fido_credentials"
|
||||
metadata = metadata
|
||||
database = database
|
||||
ormar_config = ormar.OrmarConfig(
|
||||
tablename="fido_credentials",
|
||||
metadata=metadata,
|
||||
database=database,
|
||||
)
|
||||
|
||||
|
||||
class ApiKey(ormar.Model):
|
||||
key: str = ormar.String(max_length=48, min_length=48, primary_key=True)
|
||||
user: Optional[User] = ormar.ForeignKey(User, ondelete=ReferentialAction.CASCADE)
|
||||
|
||||
class Meta:
|
||||
tablename = "api_keys"
|
||||
metadata = metadata
|
||||
database = database
|
||||
ormar_config = ormar.OrmarConfig(
|
||||
tablename="api_keys",
|
||||
metadata=metadata,
|
||||
database=database,
|
||||
)
|
||||
|
||||
|
||||
class UserSession(ormar.Model):
|
||||
@@ -90,10 +92,11 @@ class UserSession(ormar.Model):
|
||||
user_agent: str = ormar.String(max_length=255, nullable=True)
|
||||
last_seen: datetime = ormar.DateTime(default=datetime.now())
|
||||
|
||||
class Meta:
|
||||
tablename = "user_sessions"
|
||||
metadata = metadata
|
||||
database = database
|
||||
ormar_config = ormar.OrmarConfig(
|
||||
tablename="user_sessions",
|
||||
metadata=metadata,
|
||||
database=database,
|
||||
)
|
||||
|
||||
|
||||
class ABCDQuizAnswer(BaseModel):
|
||||
@@ -137,7 +140,7 @@ class QuizQuestion(BaseModel):
|
||||
answers: list[ABCDQuizAnswer] | RangeQuizAnswer | list[TextQuizAnswer] | list[VotingQuizAnswer] | str
|
||||
image: str | None = None
|
||||
|
||||
@validator("answers")
|
||||
@field_validator("answers")
|
||||
def answers_not_none_if_abcd_type(cls, v, values):
|
||||
if values["type"] == QuizQuestionType.ABCD and not isinstance(v[0], ABCDQuizAnswer):
|
||||
raise ValueError("Answers can't be none if type is ABCD")
|
||||
@@ -157,13 +160,13 @@ class QuizQuestion(BaseModel):
|
||||
|
||||
|
||||
class QuizInput(BaseModel):
|
||||
public: bool = False
|
||||
public: bool | None = False
|
||||
title: str
|
||||
description: str
|
||||
cover_image: str | None
|
||||
background_color: str | None
|
||||
cover_image: str | None = None
|
||||
background_color: str | None = None
|
||||
questions: list[QuizQuestion]
|
||||
background_image: str | None
|
||||
background_image: str | None = None
|
||||
|
||||
|
||||
class Quiz(ormar.Model):
|
||||
@@ -186,19 +189,21 @@ class Quiz(ormar.Model):
|
||||
views: int = ormar.Integer(nullable=False, default=0, server_default="0")
|
||||
mod_rating: int | None = ormar.SmallInteger(nullable=True)
|
||||
|
||||
class Meta:
|
||||
tablename = "quiz"
|
||||
metadata = metadata
|
||||
database = database
|
||||
ormar_config = ormar.OrmarConfig(
|
||||
tablename="quiz",
|
||||
metadata=metadata,
|
||||
database=database,
|
||||
)
|
||||
|
||||
|
||||
class InstanceData(ormar.Model):
|
||||
instance_id: uuid.UUID = ormar.UUID(primary_key=True, default=uuid.uuid4(), nullable=False, unique=True)
|
||||
|
||||
class Meta:
|
||||
tablename = "instance_data"
|
||||
metadata = metadata
|
||||
database = database
|
||||
ormar_config = ormar.OrmarConfig(
|
||||
tablename="instance_data",
|
||||
metadata=metadata,
|
||||
database=database,
|
||||
)
|
||||
|
||||
|
||||
class Token(BaseModel):
|
||||
@@ -228,18 +233,18 @@ class PlayGame(BaseModel):
|
||||
game_pin: str
|
||||
started: bool = False
|
||||
captcha_enabled: bool = False
|
||||
cover_image: str | None
|
||||
game_mode: str | None
|
||||
cover_image: str | None = None
|
||||
game_mode: str | None = None
|
||||
current_question: int = -1
|
||||
background_color: str | None
|
||||
background_image: str | None
|
||||
custom_field: str | None
|
||||
background_color: str | None = None
|
||||
background_image: str | None = None
|
||||
custom_field: str | None = None
|
||||
question_show: bool = False
|
||||
|
||||
|
||||
class GamePlayer(BaseModel):
|
||||
username: str
|
||||
sid: str | None
|
||||
sid: str | None = None
|
||||
|
||||
|
||||
class GameAnswer2(BaseModel):
|
||||
@@ -273,9 +278,7 @@ class AnswerData(BaseModel):
|
||||
score: int
|
||||
|
||||
|
||||
class AnswerDataList(BaseModel):
|
||||
# Just a method to make a top-level list
|
||||
__root__: list[AnswerData]
|
||||
AnswerDataList = RootModel[list[AnswerData]]
|
||||
|
||||
|
||||
class GameInLobby(BaseModel):
|
||||
@@ -307,10 +310,11 @@ class GameResults(ormar.Model):
|
||||
description: str = ormar.Text(nullable=False)
|
||||
questions: Json[list[QuizQuestion]] = ormar.JSON(nullable=False)
|
||||
|
||||
class Meta:
|
||||
tablename = "game_results"
|
||||
metadata = metadata
|
||||
database = database
|
||||
ormar_config = ormar.OrmarConfig(
|
||||
tablename="game_results",
|
||||
metadata=metadata,
|
||||
database=database,
|
||||
)
|
||||
|
||||
|
||||
class QuizTivityInput(BaseModel):
|
||||
@@ -325,10 +329,11 @@ class QuizTivity(ormar.Model):
|
||||
user: User | None = ormar.ForeignKey(User, ondelete=ReferentialAction.CASCADE)
|
||||
pages: list[QuizTivityPage] = ormar.JSON(nullable=False)
|
||||
|
||||
class Meta:
|
||||
tablename = "quiztivitys"
|
||||
metadata = metadata
|
||||
database = database
|
||||
ormar_config = ormar.OrmarConfig(
|
||||
tablename="quiztivitys",
|
||||
metadata=metadata,
|
||||
database=database,
|
||||
)
|
||||
|
||||
|
||||
class QuizTivityShare(ormar.Model):
|
||||
@@ -338,10 +343,11 @@ class QuizTivityShare(ormar.Model):
|
||||
quiztivity: QuizTivity | None = ormar.ForeignKey(QuizTivity, ondelete=ReferentialAction.CASCADE)
|
||||
user: User | None = ormar.ForeignKey(User, ondelete=ReferentialAction.CASCADE)
|
||||
|
||||
class Meta:
|
||||
tablename = "quiztivityshares"
|
||||
metadata = metadata
|
||||
database = database
|
||||
ormar_config = ormar.OrmarConfig(
|
||||
tablename="quiztivityshares",
|
||||
metadata=metadata,
|
||||
database=database,
|
||||
)
|
||||
|
||||
|
||||
class OnlyId(BaseModel):
|
||||
@@ -350,8 +356,8 @@ class OnlyId(BaseModel):
|
||||
|
||||
class PublicQuizTivityShare(BaseModel):
|
||||
id: uuid.UUID
|
||||
name: str | None
|
||||
expire_in: int | None
|
||||
name: str | None = None
|
||||
expire_in: int | None = None
|
||||
quiztivity: OnlyId
|
||||
user: OnlyId
|
||||
|
||||
@@ -386,10 +392,11 @@ class StorageItem(ormar.Model):
|
||||
server: str | None = ormar.Text(default=None, nullable=True)
|
||||
imported: bool = ormar.Boolean(default=False, nullable=True)
|
||||
|
||||
class Meta:
|
||||
tablename = "storage_items"
|
||||
metadata = metadata
|
||||
database = database
|
||||
ormar_config = ormar.OrmarConfig(
|
||||
tablename="storage_items",
|
||||
metadata=metadata,
|
||||
database=database,
|
||||
)
|
||||
|
||||
|
||||
class PublicStorageItem(BaseModel):
|
||||
@@ -398,11 +405,11 @@ class PublicStorageItem(BaseModel):
|
||||
mime_type: str
|
||||
hash: str | None
|
||||
size: int
|
||||
deleted_at: datetime | None
|
||||
alt_text: str | None
|
||||
filename: str | None
|
||||
thumbhash: str | None
|
||||
server: str | None
|
||||
deleted_at: datetime | None = None
|
||||
alt_text: str | None = None
|
||||
filename: str | None = None
|
||||
thumbhash: str | None = None
|
||||
server: str | None = None
|
||||
imported: bool
|
||||
|
||||
@classmethod
|
||||
@@ -458,8 +465,8 @@ class PrivateStorageItem(PublicStorageItem):
|
||||
|
||||
|
||||
class UpdateStorageItem(BaseModel):
|
||||
filename: str | None
|
||||
alt_text: str | None
|
||||
filename: str | None = None
|
||||
alt_text: str | None = None
|
||||
|
||||
|
||||
class Controller(ormar.Model):
|
||||
@@ -473,10 +480,11 @@ class Controller(ormar.Model):
|
||||
os_version: str | None = ormar.Text(nullable=True)
|
||||
wanted_os_version: str = ormar.Text(nullable=True, default=None)
|
||||
|
||||
class Meta:
|
||||
tablename = "controller"
|
||||
metadata = metadata
|
||||
database = database
|
||||
ormar_config = ormar.OrmarConfig(
|
||||
tablename="controller",
|
||||
metadata=metadata,
|
||||
database=database,
|
||||
)
|
||||
|
||||
|
||||
class Rating(ormar.Model):
|
||||
@@ -486,7 +494,8 @@ class Rating(ormar.Model):
|
||||
created_at: datetime = ormar.DateTime(nullable=False, server_default=func.now())
|
||||
quiz: uuid.UUID | Quiz = ormar.ForeignKey(Quiz)
|
||||
|
||||
class Meta:
|
||||
tablename = "rating"
|
||||
metadata = metadata
|
||||
database = database
|
||||
ormar_config = ormar.OrmarConfig(
|
||||
tablename="rating",
|
||||
metadata=metadata,
|
||||
database=database,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user