adding containers

This commit is contained in:
evilchili 2024-08-29 17:10:39 -07:00
parent 709b0f5ad0
commit 01a4360dca
5 changed files with 28 additions and 3 deletions

View File

@ -1,6 +1,7 @@
from .character import * from .character import *
from .classes import * from .classes import *
from .constants import * from .constants import *
from .container import *
from .log import * from .log import *
from .modifiers import * from .modifiers import *
from .skill import * from .skill import *

View File

@ -277,7 +277,6 @@ class Character(BaseObject, SlugMixin, ModifierMixin):
def spells(self): def spells(self):
return self.inventories[InventoryType.SPELL] return self.inventories[InventoryType.SPELL]
@property @property
def prepared_spells(self): def prepared_spells(self):
hashmap = dict([(mapping.item.name, mapping) for mapping in self.spells if mapping.prepared]) hashmap = dict([(mapping.item.name, mapping) for mapping in self.spells if mapping.prepared])

View File

@ -0,0 +1,21 @@
from sqlalchemy import ForeignKey
from sqlalchemy.orm import Mapped, mapped_column, relationship
from ttfrog.db.schema.inventory import Inventory, InventoryType
from ttfrog.db.schema.item import Item, ItemType
__all__ = [
"Container",
]
class Container(Item):
__tablename__ = "container"
__mapper_args__ = {"polymorphic_identity": ItemType.CONTAINER}
id: Mapped[int] = mapped_column(ForeignKey("item.id"), primary_key=True, init=False)
item_type: Mapped[ItemType] = ItemType.CONTAINER
inventory: Mapped["Inventory"] = relationship(
cascade="all,delete,delete-orphan",
lazy="immediate",
default_factory=lambda: Inventory(inventory_type=InventoryType.EQUIPMENT),
)

View File

@ -32,16 +32,19 @@ def inventory_map_creator(fields):
class Inventory(BaseObject): class Inventory(BaseObject):
__tablename__ = "inventory" __tablename__ = "inventory"
__table_args__ = (UniqueConstraint("character_id", "inventory_type"),) __table_args__ = (UniqueConstraint("character_id", "container_id", "inventory_type"),)
id: Mapped[int] = mapped_column(init=False, primary_key=True, autoincrement=True) id: Mapped[int] = mapped_column(init=False, primary_key=True, autoincrement=True)
character_id: Mapped[int] = mapped_column(ForeignKey("character.id"))
inventory_type: Mapped[InventoryType] = mapped_column(nullable=False) inventory_type: Mapped[InventoryType] = mapped_column(nullable=False)
items: Mapped[List["InventoryMap"]] = relationship( items: Mapped[List["InventoryMap"]] = relationship(
uselist=True, cascade="all,delete,delete-orphan", lazy="immediate", default_factory=lambda: [] uselist=True, cascade="all,delete,delete-orphan", lazy="immediate", default_factory=lambda: []
) )
character_id: Mapped[int] = mapped_column(ForeignKey("character.id"), nullable=True, default=None)
container_id: Mapped[int] = mapped_column(ForeignKey("item.id"), nullable=True, default=None)
character = relationship("Character", init=False, viewonly=True, lazy="immediate") character = relationship("Character", init=False, viewonly=True, lazy="immediate")
container = relationship("Item", init=False, viewonly=True, lazy="immediate")
def get(self, item): def get(self, item):
return self.get_all(item)[0] return self.get_all(item)[0]

View File

@ -21,6 +21,7 @@ ITEM_TYPES = [
"WEAPON", "WEAPON",
"ARMOR", "ARMOR",
"SHIELD", "SHIELD",
"CONTAINER",
] ]
RECHARGE_TIMES = [ RECHARGE_TIMES = [