improve conditions test
This commit is contained in:
@@ -7,7 +7,7 @@ from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
from ttfrog.db.base import BaseObject, SlugMixin
|
||||
from ttfrog.db.schema.classes import CharacterClass, ClassFeature
|
||||
from ttfrog.db.schema.constants import DamageType, Defenses
|
||||
from ttfrog.db.schema.modifiers import Condition, Modifier, ModifierMixin, Stat
|
||||
from ttfrog.db.schema.modifiers import Modifier, ModifierMixin, Stat
|
||||
from ttfrog.db.schema.skill import Skill
|
||||
|
||||
__all__ = [
|
||||
@@ -32,6 +32,7 @@ def skill_creator(fields):
|
||||
return fields
|
||||
return CharacterSkillMap(**fields)
|
||||
|
||||
|
||||
def condition_creator(fields):
|
||||
if isinstance(fields, CharacterConditionMap):
|
||||
return fields
|
||||
@@ -165,14 +166,16 @@ class CharacterClassFeatureMap(BaseObject):
|
||||
uselist=False,
|
||||
)
|
||||
|
||||
|
||||
class CharacterConditionMap(BaseObject):
|
||||
__tablename__ = "character_condition_map"
|
||||
__table_args__ = (UniqueConstraint("condition_id", "character_id"), )
|
||||
__table_args__ = (UniqueConstraint("condition_id", "character_id"),)
|
||||
id: Mapped[int] = mapped_column(init=False, primary_key=True, autoincrement=True)
|
||||
condition_id: Mapped[int] = mapped_column(ForeignKey("condition.id"))
|
||||
character_id: Mapped[int] = mapped_column(ForeignKey("character.id"), nullable=True, default=None)
|
||||
condition = relationship("Condition", lazy="immediate")
|
||||
|
||||
|
||||
class Character(BaseObject, SlugMixin, ModifierMixin):
|
||||
__tablename__ = "character"
|
||||
|
||||
@@ -207,9 +210,15 @@ class Character(BaseObject, SlugMixin, ModifierMixin):
|
||||
nullable=False, default=10, info={"min": 0, "max": 30, "modifiable_class": Stat}
|
||||
)
|
||||
|
||||
_actions_per_turn: Mapped[int] = mapped_column(nullable=False, default=1, info={"min": 0, "max": 99, "modifiable": True})
|
||||
_bonus_actions_per_turn: Mapped[int] = mapped_column(nullable=False, default=1, info={"min": 0, "max": 99, "modifiable": True})
|
||||
_reactions_per_turn: Mapped[int] = mapped_column(nullable=False, default=1, info={"min": 0, "max": 99, "modifiable": True})
|
||||
_actions_per_turn: Mapped[int] = mapped_column(
|
||||
nullable=False, default=1, info={"min": 0, "max": 99, "modifiable": True}
|
||||
)
|
||||
_bonus_actions_per_turn: Mapped[int] = mapped_column(
|
||||
nullable=False, default=1, info={"min": 0, "max": 99, "modifiable": True}
|
||||
)
|
||||
_reactions_per_turn: Mapped[int] = mapped_column(
|
||||
nullable=False, default=1, info={"min": 0, "max": 99, "modifiable": True}
|
||||
)
|
||||
|
||||
vision: Mapped[int] = mapped_column(default=None, nullable=True, info={"min": 0, "modifiable": True})
|
||||
exhaustion: Mapped[int] = mapped_column(nullable=False, default=0, info={"min": 0, "max": 5})
|
||||
@@ -220,7 +229,9 @@ class Character(BaseObject, SlugMixin, ModifierMixin):
|
||||
_skills = relationship("CharacterSkillMap", uselist=True, cascade="all,delete,delete-orphan", lazy="immediate")
|
||||
skills = association_proxy("_skills", "skill", creator=skill_creator)
|
||||
|
||||
_conditions = relationship("CharacterConditionMap", uselist=True, cascade="all,delete,delete-orphan", lazy="immediate")
|
||||
_conditions = relationship(
|
||||
"CharacterConditionMap", uselist=True, cascade="all,delete,delete-orphan", lazy="immediate"
|
||||
)
|
||||
conditions = association_proxy("_conditions", "condition", creator=condition_creator)
|
||||
|
||||
character_class_feature_map = relationship("CharacterClassFeatureMap", cascade="all,delete,delete-orphan")
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
from collections import defaultdict
|
||||
from typing import Any, Union
|
||||
|
||||
from sqlalchemy import ForeignKey, UniqueConstraint, String
|
||||
from sqlalchemy import ForeignKey, String, UniqueConstraint
|
||||
from sqlalchemy.ext.declarative import declared_attr
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
# from sqlalchemy.ext.associationproxy import association_proxy
|
||||
|
||||
from ttfrog.db.base import BaseObject
|
||||
|
||||
# from sqlalchemy.ext.associationproxy import association_proxy
|
||||
|
||||
|
||||
class Modifiable:
|
||||
def __new__(cls, base, modified=None):
|
||||
@@ -334,7 +335,7 @@ class Condition(BaseObject):
|
||||
return self.name
|
||||
|
||||
def __repr__(self):
|
||||
mods = ''
|
||||
mods = ""
|
||||
if self._modifiers:
|
||||
mods = "\n" + "\n".join([f" - {mod}" for mod in self._modifiers])
|
||||
return f"{self.name}{mods}"
|
||||
|
||||
Reference in New Issue
Block a user