cleaning up app and improving html
This commit is contained in:
52
app.py
52
app.py
@@ -7,47 +7,53 @@ from flask_session import Session
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
# Configure session
|
||||
app.config["SESSION_PERMANENT"] = False
|
||||
app.config["SESSION_TYPE"] = "filesystem"
|
||||
Session(app)
|
||||
# useful functions
|
||||
def compress_character(adventurer):
|
||||
cookie_string = adventurer.identifier
|
||||
adventurer_json = json.dumps(adventurer.get_json())
|
||||
compressed_data = zlib.compress(adventurer_json.encode())
|
||||
cookie_data = base64.urlsafe_b64encode(compressed_data).decode()
|
||||
return cookie_string, cookie_data
|
||||
|
||||
def return_character_from_cookie(cookie):
|
||||
cookie_decompressed = base64.urlsafe_b64decode(cookie)
|
||||
adventurer_dict = json.loads(zlib.decompress(cookie_decompressed).decode())
|
||||
adventurer = createCharacterWithDict(adventurer_dict)
|
||||
return adventurer
|
||||
|
||||
@app.route('/')
|
||||
def index():
|
||||
tab = request.args.get("tab", default="what", type=str)
|
||||
# control argument inputs to tabs available on index.html
|
||||
if tab not in [ "what", "how", "why", "about" ]:
|
||||
tab = "what"
|
||||
return render_template("index.html", tab=tab)
|
||||
|
||||
@app.route('/party', methods = ["GET"])
|
||||
def party():
|
||||
print("generating party")
|
||||
# default values, modified if cookies exist
|
||||
stored_adv_party = []
|
||||
stored_count = None
|
||||
stored_level = None
|
||||
if request.method == "GET":
|
||||
print('in get if')
|
||||
count = request.args.get("count", default=4, type=int)
|
||||
level = request.args.get("level", default=1, type=int)
|
||||
cache = request.args.get("cache", default='true', type=str)
|
||||
# control inputs to prevent abuse
|
||||
if cache not in [ "true", "false" ]:
|
||||
cache = 'true'
|
||||
if level < 1 or level > 5:
|
||||
level = 1
|
||||
if count < 2 or count > 5:
|
||||
count = 4
|
||||
# generate an adventuring party
|
||||
adv_party = returnParty(count, level)
|
||||
# check for cookies present
|
||||
if request.cookies:
|
||||
stored_count = len(request.cookies)
|
||||
#print(request.cookies)
|
||||
for c in request.cookies:
|
||||
if c.startswith('adv'):
|
||||
cookie_encoded = request.cookies[c]
|
||||
cookie_compressed = base64.urlsafe_b64decode(cookie_encoded)
|
||||
character_dict = json.loads(zlib.decompress(cookie_compressed).decode())
|
||||
new_char = createCharacterWithDict(character_dict)
|
||||
new_char = return_character_from_cookie(request.cookies[c])
|
||||
stored_level = new_char.level
|
||||
stored_adv_party.append(new_char)
|
||||
# if request arguments match the adventure party count & level stored in the cookies, just use the cookies
|
||||
@@ -68,14 +74,9 @@ def party():
|
||||
adv_party.set_party(reduced_party, count, level)
|
||||
# generate page
|
||||
response = make_response(render_template("party.html", adv_party=adv_party, count=count, level=level, cache=cache))
|
||||
print(response)
|
||||
# make a cookie for each character
|
||||
# this took a while to figure out, json was too large, b64 encoded json was too large, but it turns out you can compress json as a cookie
|
||||
for character in adv_party.adventurers:
|
||||
cookie_string = character.identifier
|
||||
char_json = json.dumps(character.get_json())
|
||||
compressed = zlib.compress(char_json.encode())
|
||||
cookie_data = base64.urlsafe_b64encode(compressed).decode()
|
||||
for adv in adv_party.adventurers:
|
||||
cookie_string, cookie_data = compress_character(adv)
|
||||
response.set_cookie(cookie_string, cookie_data)
|
||||
return response
|
||||
|
||||
@@ -95,19 +96,17 @@ def character():
|
||||
if role not in [ 'fighter','magic-user','cleric', 'thief', 'dwarf', 'elf', 'halfling']:
|
||||
role = 'fighter'
|
||||
if request.cookies and cache != "false":
|
||||
cookie_encoded = request.cookies[c_id]
|
||||
cookie_compressed = base64.urlsafe_b64decode(cookie_encoded)
|
||||
character_dict = json.loads(zlib.decompress(cookie_compressed).decode())
|
||||
character = createCharacterWithDict(character_dict)
|
||||
character = return_character_from_cookie(request.cookies[c_id])
|
||||
print(character.player_class)
|
||||
if character.level != level:
|
||||
character.set_level(level)
|
||||
# reroll until we get our class
|
||||
while character.player_class != role.replace("-"," "):
|
||||
new_char = Adventurer(c_id, 1)
|
||||
new_char = Adventurer(c_id, level)
|
||||
selected_class = ClassSelector(new_char).selection()
|
||||
character = selected_class(new_char.identifier, new_char.level, new_char.get_attributes())
|
||||
else:
|
||||
new_char = Adventurer(c_id, 1)
|
||||
new_char = Adventurer(c_id, level)
|
||||
selected_class = ClassSelector(new_char).selection()
|
||||
character = selected_class(new_char.identifier, new_char.level, new_char.get_attributes())
|
||||
role = character.player_class
|
||||
@@ -116,9 +115,6 @@ def character():
|
||||
if character.player_class == "cleric":
|
||||
character.turn_undead = { int(k) : v for k,v in character.turn_undead.items() }
|
||||
response = make_response(render_template("character.html", character=character, level=level, cache=cache,role=role))
|
||||
cookie_string = character.identifier
|
||||
char_json = json.dumps(character.get_json())
|
||||
compressed = zlib.compress(char_json.encode())
|
||||
cookie_data = base64.urlsafe_b64encode(compressed).decode()
|
||||
cookie_string, cookie_data = compress_character(character)
|
||||
response.set_cookie(cookie_string, cookie_data)
|
||||
return response
|
||||
|
||||
Reference in New Issue
Block a user