Almost all administration is done by now.
This commit is contained in:
parent
720d10f025
commit
055600e611
4 changed files with 145 additions and 40 deletions
166
app.py
166
app.py
|
@ -14,45 +14,82 @@ db = web.database(dbn = 'sqlite', db = 'game.db')
|
|||
urls = (
|
||||
'/app', 'summary',
|
||||
'/app/', 'summary',
|
||||
'/app/config', 'config',
|
||||
'/app/config/', 'config',
|
||||
'/app/config/add', 'stat_add',
|
||||
'/app/config/remove/(.+)', 'remove_stat',
|
||||
'/app/config/edit/(.+)', 'edit_stat',
|
||||
'/app/stats', 'statistics',
|
||||
'/app/stats/', 'statistics',
|
||||
'/app/stats/add', 'stat_add',
|
||||
'/app/stats/remove/(.+)', 'remove_stat',
|
||||
'/app/stats/edit/(.+)', 'edit_stat',
|
||||
'/app/register', 'register',
|
||||
'/app/register/', 'register',
|
||||
'/app/player/(.+)', 'player',
|
||||
'/app/player_remove/(.+)', 'remove_player',
|
||||
'/app/player_edit/(.+)', 'edit_player',
|
||||
'/app/config', 'config',
|
||||
'/app/config/', 'config',
|
||||
)
|
||||
|
||||
# Forms used by the app
|
||||
# See dynamic_register_form for the
|
||||
# character sheet configuration
|
||||
add_stat = form.Form(
|
||||
form.Textbox('stat_name',
|
||||
description = 'Stat name:'),
|
||||
form.Textbox('default_value',
|
||||
description = 'Default value:',
|
||||
value = 0),
|
||||
form.Button('Add Stat')
|
||||
form.Button('OK')
|
||||
)
|
||||
|
||||
config_form = form.Form(
|
||||
form.Textbox('game_name',
|
||||
description = 'Game name'),
|
||||
form.Button('Send'))
|
||||
|
||||
app = web.application(urls, globals())
|
||||
|
||||
# Auxiliary functions
|
||||
|
||||
def render_web(game_name, main_block):
|
||||
def render_web(main_block):
|
||||
"""
|
||||
Cobbles together all the pieces we've broken our
|
||||
templates, so we can have a kind of modular design
|
||||
"""
|
||||
game_name = get_game_name()
|
||||
sidebar = render.sidebar()
|
||||
return render.layout(main_block, sidebar, game_name)
|
||||
|
||||
def get_game_name():
|
||||
"""
|
||||
Gets the name of the game
|
||||
"""
|
||||
try:
|
||||
for e in db.select('game_config'):
|
||||
name = e.game_name
|
||||
|
||||
if name == '':
|
||||
return "My Game"
|
||||
|
||||
else:
|
||||
return name
|
||||
|
||||
except:
|
||||
return "My Game"
|
||||
|
||||
def dynamic_register_form(player_name = 'New Player'):
|
||||
"""
|
||||
Creates a register new player dynamicly
|
||||
"""
|
||||
reg_elems = [form.Textbox('name',
|
||||
description = 'Player name:',
|
||||
value = player_name)]
|
||||
if player_name == 'New Player':
|
||||
reg_elems = [form.Textbox('name',
|
||||
description = 'Player name:',
|
||||
value = player_name)]
|
||||
|
||||
else:
|
||||
reg_elems = [form.Textbox('name',
|
||||
description = 'Player name:',
|
||||
value = player_name,
|
||||
readonly = 'on')]
|
||||
|
||||
|
||||
if player_name == 'New Player':
|
||||
for stat in db.select('stats'):
|
||||
|
@ -106,8 +143,7 @@ def get_stat_info_by_id(stat_id):
|
|||
|
||||
class summary(object):
|
||||
def GET(self):
|
||||
# TODO: Get from main configuration file
|
||||
game_name = "My Game"
|
||||
game_name = get_game_name()
|
||||
|
||||
# Variable initialization
|
||||
player_num = 0
|
||||
|
@ -127,23 +163,23 @@ class summary(object):
|
|||
player_num,
|
||||
stats_num,
|
||||
players)
|
||||
return render_web(game_name, summary)
|
||||
return render_web(summary)
|
||||
|
||||
|
||||
class config(object):
|
||||
class statistics(object):
|
||||
def GET(self):
|
||||
game_name = "My Game"
|
||||
game_name = get_game_name()
|
||||
stats = []
|
||||
for stat in db.select("stats"):
|
||||
stats.append(stat)
|
||||
|
||||
add_stat_form = add_stat.render()
|
||||
|
||||
config = render.config(game_name,
|
||||
stats,
|
||||
add_stat_form)
|
||||
config = render.statistics(game_name,
|
||||
stats,
|
||||
add_stat_form)
|
||||
|
||||
return render_web(game_name, config)
|
||||
return render_web(config)
|
||||
|
||||
|
||||
class stat_add(object):
|
||||
|
@ -169,7 +205,6 @@ class remove_stat(object):
|
|||
|
||||
class edit_stat(object):
|
||||
def GET(self, index_to_remove):
|
||||
game_name = "My Game"
|
||||
try:
|
||||
index = int(index_to_remove)
|
||||
|
||||
|
@ -180,7 +215,7 @@ class edit_stat(object):
|
|||
edit_stat_form = edit_form.render()
|
||||
edit_stat = render.edit_stat(stat_info, edit_stat_form)
|
||||
|
||||
return render_web(game_name, edit_stat)
|
||||
return render_web(edit_stat)
|
||||
|
||||
except Exception as e:
|
||||
return "Ooops! Wrong index!"
|
||||
|
@ -210,13 +245,11 @@ class edit_stat(object):
|
|||
|
||||
class register(object):
|
||||
def GET(self):
|
||||
game_name = "My Game"
|
||||
form = dynamic_register_form()
|
||||
register_block = render.register(form.render())
|
||||
return render_web(game_name, register_block)
|
||||
register_block = render.register(form.render(), True)
|
||||
return render_web(register_block)
|
||||
|
||||
def POST(self):
|
||||
game_name = "My Game"
|
||||
stats = {}
|
||||
form = dict(web.input())
|
||||
name = form['name']
|
||||
|
@ -238,8 +271,87 @@ class register(object):
|
|||
value = final_value)
|
||||
stats[key] = final_value
|
||||
|
||||
result_render = render.player(name, code, stats)
|
||||
return render_web(game_name, result_render)
|
||||
result_render = render.player(name, code, stats, False)
|
||||
return render_web(result_render)
|
||||
|
||||
|
||||
class player(object):
|
||||
def GET(self, player_name):
|
||||
for p in db.select('players', where = 'name = $player_name', vars = locals()):
|
||||
player_data = p
|
||||
|
||||
stats = {}
|
||||
for s in db.select('sheet', where = 'player_name = $player_name', vars = locals()):
|
||||
try:
|
||||
stat_name, def_val = get_stat_info_by_id(s.stat_id)
|
||||
stats[stat_name] = s.value
|
||||
|
||||
except Exception as e:
|
||||
continue
|
||||
|
||||
result_render = render.player(player_data.name, player_data.code, stats, True)
|
||||
return render_web(result_render)
|
||||
|
||||
|
||||
class edit_player(object):
|
||||
def GET(self, player_name):
|
||||
form = dynamic_register_form(player_name)
|
||||
edit_block = render.register(form.render(), False)
|
||||
return render_web(edit_block)
|
||||
|
||||
def POST(self, player_name):
|
||||
stats = {}
|
||||
form = dict(web.input())
|
||||
name = form['name']
|
||||
code = generate_uuid(name)
|
||||
|
||||
for key in form:
|
||||
if key != 'name' and key != 'Register Player' and key != 'Modify Player':
|
||||
stat_id, default_value = get_stat_info(key)
|
||||
if form[key] != '' and form[key] != '0':
|
||||
final_value = form[key]
|
||||
|
||||
else:
|
||||
final_value = default_value
|
||||
|
||||
db.update('sheet',
|
||||
where = 'stat_id = $stat_id AND player_name = $name',
|
||||
value = final_value,
|
||||
vars = locals())
|
||||
stats[key] = final_value
|
||||
|
||||
result_render = render.player(name, code, stats, False)
|
||||
return render_web(result_render)
|
||||
|
||||
|
||||
class remove_player(object):
|
||||
def GET(self, player_name):
|
||||
try:
|
||||
db.delete('players', where = 'name = $player_name', vars = locals())
|
||||
db.delete('sheet', where = 'player_name = $player_name', vars = locals())
|
||||
|
||||
except:
|
||||
pass
|
||||
|
||||
raise web.seeother('/app')
|
||||
|
||||
|
||||
class config(object):
|
||||
def GET(self):
|
||||
form = config_form()
|
||||
config = render.config(form.render())
|
||||
return render_web(config)
|
||||
|
||||
def POST(self):
|
||||
form = config_form()
|
||||
if form.validates():
|
||||
new_game_name = form.d.game_name
|
||||
db.delete('game_config', where = 'game_name = game_name')
|
||||
db.insert('game_config', game_name = new_game_name)
|
||||
raise web.seeother('/app')
|
||||
|
||||
else:
|
||||
return "Ooops! Something went wrong."
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
Binary file not shown.
|
@ -1,14 +1,7 @@
|
|||
$def with (game_name, stats, add_stat_form)
|
||||
<h2>$game_name stat list</h2>
|
||||
<ul>
|
||||
$for stat in stats:
|
||||
<li>$stat.name (default: $stat.default_value)
|
||||
<a href="/app/config/edit/$stat.id">[edit]</a>
|
||||
<a href="/app/config/remove/$stat.id">[remove]</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="stat_form">
|
||||
<form name="add_stat_form" method="post" action="config/add">
|
||||
$:add_stat_form
|
||||
$def with (config_form)
|
||||
<h2>Main game configuration</h2>
|
||||
<div class="config_form">
|
||||
<form name="config_form" method="post" action="config">
|
||||
$:config_form
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -2,7 +2,7 @@ $def with (stat_info, edit_stat_form)
|
|||
<h2>Editing $stat_info.name stat</h2>
|
||||
<p>Stat current default value: $stat_info.default_value</p>
|
||||
<div class="stat_form">
|
||||
<form name="edit_stat_form" method="post" action="config/edit/$stat_info.id">
|
||||
<form name="edit_stat_form" method="post" action="stats/edit/$stat_info.id">
|
||||
$:edit_stat_form
|
||||
</form>
|
||||
</div>
|
||||
|
|
Loading…
Reference in a new issue