adding defaults, modifiers, traits and attributes

This commit is contained in:
evilchili
2024-02-08 23:04:28 -08:00
parent da6255a86a
commit 8bde2ab5f3
8 changed files with 178 additions and 40 deletions
+12 -13
View File
@@ -6,7 +6,6 @@ from collections import defaultdict
from pyramid.httpexceptions import HTTPFound
from pyramid.interfaces import IRoutesMapper
from ttfrog.attribute_map import AttributeMap
from ttfrog.db.manager import db
from ttfrog.db import transaction_log
@@ -69,6 +68,8 @@ class BaseController:
self._form = self.model_form(self.request.POST, obj=self.record)
else:
self._form = self.model_form(obj=self.record)
if not self.record.id:
self._form.process()
return self._form
@property
@@ -82,18 +83,16 @@ class BaseController:
self.attrs['all_records'] = db.query(self.model).all()
def template_context(self, **kwargs) -> dict:
return AttributeMap.from_dict({
'c': dict(
config=self.config,
request=self.request,
form=self.form,
record=self.record,
routes=get_all_routes(self.request),
resources=self.resources,
**self.attrs,
**kwargs,
)
})
return dict(
config=self.config,
request=self.request,
form=self.form,
record=self.record,
routes=get_all_routes(self.request),
resources=self.resources,
**self.attrs,
**kwargs,
)
def save(self):
if not self.form.save.data:
@@ -1,6 +1,9 @@
from ttfrog.webserver.controllers.base import BaseController
from ttfrog.webserver.forms import DeferredSelectField, DeferredSelectMultipleField
from ttfrog.db.schema import Character, Ancestry, CharacterClass, STATS
from ttfrog.db.schema import Character, Ancestry, CharacterClass, AncestryTrait, Modifier, STATS
from ttfrog.db.manager import db
from ttfrog.attribute_map import AttributeMap
from wtforms_alchemy import ModelForm
from wtforms.fields import SubmitField, SelectMultipleField
from wtforms.widgets import Select
@@ -35,3 +38,14 @@ class CharacterSheet(BaseController):
return super().resources + [
{'type': 'script', 'uri': 'js/character_sheet.js'},
]
def template_context(self, **kwargs) -> dict:
ctx = super().template_context(**kwargs)
if self.record.ancestry:
ancestry = db.query(Ancestry).filter_by(name=self.record.ancestry).one()
ctx['traits'] = {}
for trait in db.query(AncestryTrait).filter_by(ancestry_id=ancestry.id).all():
ctx['traits'][trait.description] = db.query(Modifier).filter_by(source_table_name=trait.__tablename__, source_table_id=trait.id).all()
else:
ctx['traits'] = {};
return ctx
+5 -2
View File
@@ -2,6 +2,10 @@ from pyramid.response import Response
from pyramid.view import view_config
from ttfrog.db.manager import db
from ttfrog.db.schema import Ancestry
from ttfrog.attribute_map import AttributeMap
def response_from(controller):
return controller.response() or AttributeMap.from_dict({'c': controller.template_context()})
@view_config(route_name='index')
@@ -12,5 +16,4 @@ def index(request):
@view_config(route_name='sheet', renderer='character_sheet.html')
def sheet(request):
controller = request.context
return controller.response() or controller.template_context()
return response_from(request.context)