-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
81 lines (67 loc) · 2.68 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from json import loads
from flask import Blueprint, abort, redirect, render_template, request, url_for
from flask_login import current_user, login_required
from jinja2 import TemplateNotFound
import fetch
from app import pathfinder_character_db
# This module is for the main functions of the site - characters, campaigns, spells, etc.
main = Blueprint('main', __name__)
@main.route('/')
def index():
characters = []
if current_user.is_authenticated: # type: ignore
characters = pathfinder_character_db.query("name, character_id, game", where_column="user_id", where_data=[current_user.get_id()]) # type: ignore
return render_template("_core/index.html",
characters = characters
)
@main.route('/characters/<game>/new')
@login_required
def new_character(game):
user_id = current_user.get_id() # type: ignore
user_name = current_user.get_name() # type: ignore
#TODO - make sure user is authorized for that character
if request.args.get("npc") == "true":
return render_template(f"{game}/new_npc.html")
else:
character_id = fetch.new_character(game, user_id, user_name)
return redirect(url_for('main.character_sheet', game=game, character_id=character_id))
@main.route('/characters/<game>/<character_id>')
@login_required
def character_sheet(game, character_id):
#TODO - make sure user is authorized for that character
character = fetch.fetch_character(character_id)
if not character:
abort(404)
return render_template(f"{game}/character_sheet.html",
editable=False if request.args.get('readonly') else True,
fetch=fetch,
**character)
#ANCHOR - Edit character
@main.route('/characters/<character_id>', methods=['POST'])
def set_character(character_id):
value = request.form.get('value', '')
game = request.form.get("game", '')
value = loads(value)
fetch.update_character(character_id, request.form.get('attribute', ''),
value)
#TODO - make sure user is authorized for that character
return {'success':True}
@main.route('/fetch/<game>/<to_fetch>')
def fetch_from_rules(game, to_fetch):
if game == 'character':
if (response := fetch.fetch_character(to_fetch)):
return response
match to_fetch:
case value if value.startswith("condition"):
return fetch.fetch_condition(game, value[value.index(':')+1:])
case "skills":
return fetch.fetch_skills(game, full=True)
case _:
return ''
#TODO - add a place to print the character and have it in a pathfinder pdf
@main.route('/campaigns')
def campaign_hub():
abort(501)
@main.route('/campaign/<campaign_id>')
def campaign(campaign_id):
abort(501)