73 lines
2.3 KiB
Python
73 lines
2.3 KiB
Python
from flask import render_template, request, redirect
|
|
|
|
from estusshots import app
|
|
from estusshots import forms, models, orm
|
|
from estusshots.util import authorize
|
|
from estusshots.orm import Enemy
|
|
from sqlalchemy.orm import subqueryload
|
|
|
|
|
|
@app.route("/enemy")
|
|
@authorize
|
|
def enemy_list():
|
|
db = orm.new_session()
|
|
enemies = db.query(Enemy).options(subqueryload(Enemy.season)).order_by(Enemy.name).all()
|
|
model = {"enemies": enemies}
|
|
return render_template("enemies.html", model=model)
|
|
|
|
|
|
@app.route("/enemy/new", methods=["GET"])
|
|
@authorize
|
|
def enemy_new(preselect_season=None):
|
|
form = forms.EnemyForm()
|
|
|
|
if preselect_season:
|
|
form.season_id.default = preselect_season
|
|
|
|
model = models.GenericFormModel(
|
|
page_title="Enemies",
|
|
form_title="Create a new Enemy",
|
|
post_url=f"/enemy/null/edit",
|
|
)
|
|
return render_template("generic_form.html", model=model, form=form)
|
|
|
|
|
|
@app.route("/enemy/<enemy_id>/edit", methods=["GET", "POST"])
|
|
@authorize
|
|
def enemy_edit(enemy_id: int):
|
|
model = models.GenericFormModel(
|
|
page_title="Enemies",
|
|
form_title="Edit Enemy",
|
|
post_url=f"/enemy/{enemy_id}/edit",
|
|
)
|
|
|
|
if request.method == "GET":
|
|
db = orm.new_session()
|
|
enemy = db.query(Enemy).filter(Enemy.id == enemy_id).first()
|
|
|
|
form = forms.EnemyForm()
|
|
form.season_id.data = enemy.season_id if enemy.season_id else -1
|
|
form.name.data = enemy.name
|
|
form.is_boss.data = enemy.boss
|
|
form.enemy_id.data = enemy_id
|
|
|
|
model.form_title = f'Edit Enemy "{enemy.name}"'
|
|
return render_template("generic_form.html", model=model, form=form)
|
|
else:
|
|
form = forms.EnemyForm()
|
|
if form.validate_on_submit():
|
|
db = orm.new_session()
|
|
enemy = db.query(Enemy).filter(Enemy.id == enemy_id).first()
|
|
if not enemy:
|
|
enemy = Enemy()
|
|
db.add(enemy)
|
|
enemy.populate_from_form(form)
|
|
db.commit()
|
|
if form.submit_continue_button.data:
|
|
form.name.data = None
|
|
return enemy_new(preselect_season=enemy.season_id)
|
|
return redirect("/enemy")
|
|
|
|
model.form_title = "Incorrect Data"
|
|
return render_template("generic_form.html", model=model, form=form)
|