mirror of
https://github.com/rommapp/romm.git
synced 2026-07-01 08:16:21 +00:00
77 lines
1.7 KiB
Python
77 lines
1.7 KiB
Python
from typing import Any
|
|
|
|
from pydantic import ConfigDict, model_validator
|
|
from sqlalchemy import inspect
|
|
from sqlalchemy.exc import InvalidRequestError
|
|
|
|
from .base import BaseModel, UTCDatetime
|
|
from .device import DeviceSyncSchema
|
|
|
|
|
|
class BaseAsset(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: int
|
|
rom_id: int
|
|
user_id: int
|
|
file_name: str
|
|
file_name_no_tags: str
|
|
file_name_no_ext: str
|
|
file_extension: str
|
|
file_path: str
|
|
file_size_bytes: int
|
|
full_path: str
|
|
download_path: str
|
|
|
|
missing_from_fs: bool
|
|
|
|
created_at: UTCDatetime
|
|
updated_at: UTCDatetime
|
|
|
|
|
|
class ScreenshotSchema(BaseAsset):
|
|
pass
|
|
|
|
|
|
class SaveSchema(BaseAsset):
|
|
emulator: str | None
|
|
slot: str | None = None
|
|
content_hash: str | None = None
|
|
screenshot: ScreenshotSchema | None
|
|
device_syncs: list[DeviceSyncSchema] = []
|
|
|
|
@model_validator(mode="before")
|
|
@classmethod
|
|
def handle_lazy_relationships(cls, data: Any) -> Any:
|
|
if isinstance(data, dict):
|
|
return data
|
|
try:
|
|
state = inspect(data)
|
|
except Exception:
|
|
return data
|
|
result = {}
|
|
for field_name in cls.model_fields:
|
|
if field_name in state.unloaded:
|
|
continue
|
|
try:
|
|
result[field_name] = getattr(data, field_name)
|
|
except InvalidRequestError:
|
|
continue
|
|
return result
|
|
|
|
|
|
class SlotSummarySchema(BaseModel):
|
|
slot: str | None
|
|
count: int
|
|
latest: SaveSchema
|
|
|
|
|
|
class SaveSummarySchema(BaseModel):
|
|
total_count: int
|
|
slots: list[SlotSummarySchema]
|
|
|
|
|
|
class StateSchema(BaseAsset):
|
|
emulator: str | None
|
|
screenshot: ScreenshotSchema | None
|