Files
vaiola/modules/civit/datamodel.py
2025-10-16 18:42:32 +07:00

234 lines
6.8 KiB
Python

from dataclasses import dataclass
from typing import Optional
from modules.shared.DataClassDatabase import DataClassDatabase
@dataclass
class ModelVersionFileHashes(DataClassDatabase):
# primitives
AutoV1: Optional[str] = None
AutoV2: Optional[str] = None
AutoV3: Optional[str] = None
CRC32: Optional[str] = None
SHA256: Optional[str] = None
BLAKE3: Optional[str] = None
def __post_init__(self):
super().__post_init__()
self._forwarding = {}
self._table_name = 'model_versions_files_hashes'
self._standalone_entity = False
@dataclass
class ModelVersionFileMetadata(DataClassDatabase):
# primitives
format: Optional[str] = None
size: Optional[str] = None
fp: Optional[str] = None
def __post_init__(self):
super().__post_init__()
self._forwarding = {}
self._table_name = 'model_versions_files_metadata'
self._standalone_entity = False
@dataclass
class ModelVersionFile(DataClassDatabase):
# primary key
id: Optional[int] = None
# primitives
sizeKB: Optional[float] = None
name: Optional[str] = None
type: Optional[str] = None
pickleScanResult: Optional[str] = None
pickleScanMessage: Optional[str] = None
virusScanResult: Optional[str] = None
virusScanMessage: Optional[str] = None
scannedAt: Optional[str] = None
downloadUrl: Optional[str] = None
primary: Optional[bool] = None
# child entities
metadata: Optional[ModelVersionFileMetadata] = None
hashes: Optional[ModelVersionFileHashes] = None
def __post_init__(self):
super().__post_init__()
self._forwarding = {
'metadata': ModelVersionFileMetadata,
'hashes': ModelVersionFileHashes,
}
self._key_field = 'id'
self._table_name = 'model_versions_files'
self._standalone_entity = False
@dataclass
class ModelVersionStats(DataClassDatabase):
downloadCount: Optional[int] = None
ratingCount: Optional[int] = None
rating: Optional[float] = None
thumbsUpCount: Optional[int] = None
thumbsDownCount: Optional[int] = None
def __post_init__(self):
super().__post_init__()
self._forwarding = {}
self._table_name = 'model_versions_stats'
self._standalone_entity = False
@dataclass
class ModelVersionImage(DataClassDatabase):
# primary key
id: Optional[int] = None
# primitives
url: Optional[str] = None
nsfwLevel: Optional[int] = None
width: Optional[int] = None
height: Optional[int] = None
hash: Optional[str] = None
type: Optional[str] = None
minor: Optional[bool] = None
poi: Optional[bool] = None
hasMeta: Optional[bool] = None
hasPositivePrompt: Optional[bool] = None
onSite: Optional[int] = None
remixOfId: Optional[int] = None
def __post_init__(self):
super().__post_init__()
self._forwarding = {}
self._key_field = 'id'
self._table_name = 'model_versions_images'
self._standalone_entity = False
@dataclass
class ModelVersion(DataClassDatabase):
# primary key
id: Optional[int] = None
# primitives
index: Optional[int] = None
name: Optional[str] = None
baseModel: Optional[str] = None
baseModelType: Optional[str] = None
publishedAt: Optional[str] = None
availability: Optional[str] = None
nsfwLevel: Optional[int] = None
description: Optional[str] = None
supportsGeneration: Optional[bool] = None
downloadUrl: Optional[str] = None
# list of primitives
trainedWords: Optional[list] = None
# child entities
stats: Optional[ModelVersionStats] = None
files: Optional[list[ModelVersionFile]] = None
images: Optional[list[ModelVersionImage]] = None
def __post_init__(self):
super().__post_init__()
self._forwarding = {
'stats': ModelVersionStats,
'files': ModelVersionFile,
'images': ModelVersionImage,
}
self._key_field = 'id'
self._table_name = 'model_versions'
self._standalone_entity = False
@dataclass
class ModelStats(DataClassDatabase):
# primitives
downloadCount: Optional[int] = None
favoriteCount: Optional[int] = None
thumbsUpCount: Optional[int] = None
thumbsDownCount: Optional[int] = None
commentCount: Optional[int] = None
ratingCount: Optional[int] = None
rating: Optional[int] = None
tippedAmountCount: Optional[int] = None
def __post_init__(self):
super().__post_init__()
self._forwarding = {}
self._table_name = 'model_stats'
self._standalone_entity = False
@dataclass
class ModelCreator(DataClassDatabase):
# primitives
username: Optional[str] = None
image: Optional[str] = None
def __post_init__(self):
super().__post_init__()
self._forwarding = {}
self._table_name = 'model_creators'
self._standalone_entity = False
@dataclass
class Model(DataClassDatabase):
# primary key
id: Optional[int] = None
# primitives
name: Optional[str] = None
description: Optional[str] = None
allowNoCredit: Optional[bool] = None
allowCommercialUse: Optional[list] = None
allowDerivatives: Optional[bool] = None
allowDifferentLicense: Optional[bool] = None
type: Optional[str] = None
minor: Optional[bool] = None
sfwOnly: Optional[bool] = None
poi: Optional[bool] = None
nsfw: Optional[bool] = None
nsfwLevel: Optional[int] = None
availability: Optional[str] = None
cosmetic: Optional[str] = None
supportsGeneration: Optional[bool] = None
mode: Optional[str] = None
# list of primitives
tags: Optional[list] = None
# child entities
stats: Optional[ModelStats] = None
creator: Optional[ModelCreator] = None
modelVersions: Optional[list[ModelVersion]] = None
def __post_init__(self):
super().__post_init__()
self._forwarding = {
'stats': ModelStats,
'creator': ModelCreator,
'modelVersions': ModelVersion,
}
self._key_field = 'id'
self._table_name = 'models'
self._standalone_entity = True
@dataclass
class Tag(DataClassDatabase):
name: Optional[str] = None
link: Optional[str] = None
def __post_init__(self):
super().__post_init__()
self._forwarding = {}
self._key_field = 'name'
self._table_name = 'tags'
self._standalone_entity = True
@dataclass
class Creator(DataClassDatabase):
# primary key
username: Optional[str] = None
# primitives
modelCount: Optional[int] = None
link: Optional[str] = None
image: Optional[str] = None
def __post_init__(self):
super().__post_init__()
self._forwarding = {}
self._key_field = 'username'
self._table_name = 'creators'
self._standalone_entity = True