Almost all administration is done by now.

This commit is contained in:
José Carlos Cuevas 2013-06-04 01:27:46 +02:00
parent 720d10f025
commit 055600e611
4 changed files with 145 additions and 40 deletions

166
app.py
View file

@ -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.

View file

@ -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>&nbsp;
<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>

View file

@ -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>