add support for skills

This commit is contained in:
evilchili
2024-05-06 00:13:52 -07:00
parent b574dacfa1
commit 9a2d28ae75
8 changed files with 278 additions and 113 deletions
-33
View File
@@ -54,36 +54,6 @@ class BaseObject(MappedAsDataclass, DeclarativeBase):
return str(dict(self))
def multivalue_string_factory(name, column=Column(String), separator=";"):
"""
Generate a mixin class that adds a string column with getters and setters
that convert list values to strings and back again. Equivalent to:
class MultiValueString:
_name = column
@property
def name_property(self):
return self._name.split(';')
@name.setter
def name(self, val):
return ';'.join(val)
"""
attr = f"_{name}"
prop = property(lambda self: getattr(self, attr).split(separator))
setter = prop.setter(lambda self, val: setattr(self, attr, separator.join(val)))
return type(
"MultiValueString",
(object,),
{
attr: column,
f"{name}_property": prop,
name: setter,
},
)
class EnumField(enum.Enum):
"""
A serializable enum.
@@ -93,9 +63,6 @@ class EnumField(enum.Enum):
return self.value
SavingThrowsMixin = multivalue_string_factory("saving_throws")
SkillsMixin = multivalue_string_factory("skills")
STATS = ["STR", "DEX", "CON", "INT", "WIS", "CHA"]
CREATURE_TYPES = [
"aberation",