Files
marbas/eveal/models_sde.py

128 lines
5.5 KiB
Python

from typing import Optional, List
from sqlmodel import SQLModel, Field, Relationship
from functools import partial
DynamicRelationship = partial(Relationship, sa_relationship_kwargs={"lazy": "dynamic"}) # change default lazy loading to dynamic
class SDEIcon(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
description: Optional[str] = None
iconFile: str
categories: List['SDECategory'] = DynamicRelationship(back_populates="icon")
groups: List['SDEGroup'] = DynamicRelationship(back_populates="icon")
marketgroups: List['SDEMarketGroup'] = DynamicRelationship(back_populates="icon")
types: List['SDEType'] = DynamicRelationship(back_populates="icon")
metagroups: List['SDEMetaGroup'] = DynamicRelationship(back_populates="icon")
class SDECategory(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
icon_id: Optional[int] = Field(default=None, foreign_key="sdeicon.id")
icon: Optional[SDEIcon] = Relationship(back_populates="categories")
name: str
published: bool
groups: List['SDEGroup'] = DynamicRelationship(back_populates="category")
class SDEGroup(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
anchorable: bool
anchored: bool
category_id: Optional[int] = Field(default=None, foreign_key="sdecategory.id")
category: Optional[SDECategory] = Relationship(back_populates="groups")
fittableNonSingletion: bool
icon_id: Optional[int] = Field(default=None, foreign_key="sdeicon.id")
icon: Optional[SDEIcon] = Relationship(back_populates="groups")
name: str
published: bool
useBasePrice: bool
types: List['SDEType'] = DynamicRelationship(back_populates="group")
class SDEMarketGroup(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
description: Optional[str] = None
hasTypes: bool
icon_id: Optional[int] = Field(default=None, foreign_key="sdeicon.id")
icon: Optional[SDEIcon] = Relationship(back_populates="marketgroups")
name: str
parent_marketgroup_id: Optional[int] = Field(default=None, foreign_key="sdemarketgroup.id")
parent_marketgroup: Optional['SDEMarketGroup'] = Relationship(back_populates="children_marketgroups",
sa_relationship_kwargs={"remote_side": 'SDEMarketGroup.id'}) # workaround for self reference: https://github.com/tiangolo/sqlmodel/issues/127#issuecomment-1224135123
children_marketgroups: List['SDEMarketGroup'] = DynamicRelationship(back_populates="parent_marketgroup")
types: List['SDEType'] = DynamicRelationship(back_populates="marketgroup")
class SDEMetaGroup(SQLModel, table=True):
id: int = Field(primary_key=True)
name: str
iconSuffix: Optional[str] = None
icon_id: Optional[int] = Field(default=None, foreign_key="sdeicon.id")
icon: Optional[SDEIcon] = Relationship(back_populates="metagroups")
types: List['SDEType'] = DynamicRelationship(back_populates="metagroup")
class SDEType(SQLModel, table=True):
id: int = Field(primary_key=True)
group_id: Optional[int] = Field(default=None, foreign_key="sdegroup.id")
group: Optional[SDEGroup] = Relationship(back_populates="types")
marketgroup_id: Optional[int] = Field(default=None, foreign_key="sdemarketgroup.id")
marketgroup: Optional[SDEMarketGroup] = Relationship(back_populates="types")
metagroup_id: Optional[int] = Field(default=None, foreign_key="sdemetagroup.id")
metagroup: Optional[SDEMetaGroup] = Relationship(back_populates="types")
name: str
published: bool = False
description: Optional[str] = None
basePrice: Optional[float] = None
icon_id: Optional[int] = Field(default=None, foreign_key="sdeicon.id")
icon: Optional[SDEIcon] = Relationship(back_populates="types")
volume: Optional[float] = None
portionSize: int
materials: List['SDETypeMaterial'] = DynamicRelationship(back_populates="type",
sa_relationship_kwargs={"lazy": "dynamic", "foreign_keys": '[SDETypeMaterial.type_id]'}) # https://github.com/tiangolo/sqlmodel/issues/10#issuecomment-1537445078
material_of: List['SDETypeMaterial'] = DynamicRelationship(back_populates="material_type",
sa_relationship_kwargs={"lazy": "dynamic", "foreign_keys": '[SDETypeMaterial.material_type_id]'}) # https://github.com/tiangolo/sqlmodel/issues/10#issuecomment-1537445078
class SDETypeMaterial(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
type_id: Optional[int] = Field(default=None, foreign_key="sdetype.id")
type: Optional[SDEType] = Relationship(back_populates="materials",
sa_relationship_kwargs={"primaryjoin": 'SDETypeMaterial.type_id==SDEType.id',
'lazy': 'joined'}) # workaround: https://github.com/tiangolo/sqlmodel/issues/10#issuecomment-1002835506
material_type_id: Optional[int] = Field(default=None, foreign_key="sdetype.id")
material_type: Optional[SDEType] = Relationship(back_populates="material_of",
sa_relationship_kwargs={"primaryjoin": 'SDETypeMaterial.material_type_id==SDEType.id',
'lazy': 'joined'}) # workaround: https://github.com/tiangolo/sqlmodel/issues/10#issuecomment-1002835506
quantity: int