Extract function for compiling ticket context

Solves the issue that required context data is not provided when form
validation fails, e.g. when entering a comment or adding a label.
This commit is contained in:
Ivan Habunek 2018-11-27 10:01:39 +01:00 committed by Drew DeVault
parent 7bdd29ebae
commit bb002ed319
1 changed files with 27 additions and 20 deletions

View File

@ -15,6 +15,25 @@ from todosrht.urls import ticket_url
ticket = Blueprint("ticket", __name__)
def get_ticket_context(ticket, tracker, access):
"""Returns the context required to render ticket.html"""
tracker_sub = None
ticket_sub = None
if current_user:
tracker_sub = TicketSubscription.query.filter_by(
ticket=None, tracker=tracker, user=current_user).one_or_none()
ticket_sub = TicketSubscription.query.filter_by(
ticket=ticket, tracker=None, user=current_user).one_or_none()
return {
"tracker": tracker,
"ticket": ticket,
"access": access,
"tracker_sub": tracker_sub,
"ticket_sub": ticket_sub,
}
@ticket.route("/<owner>/<name>/<int:ticket_id>")
def ticket_GET(owner, name, ticket_id):
tracker, _ = get_tracker(owner, name)
@ -24,21 +43,12 @@ def ticket_GET(owner, name, ticket_id):
if not ticket:
abort(404)
tracker_sub = None
ticket_sub = None
if current_user:
mark_seen(ticket, current_user)
db.session.commit()
tracker_sub = TicketSubscription.query.filter_by(
ticket=None, tracker=tracker, user=current_user).one_or_none()
ticket_sub = TicketSubscription.query.filter_by(
ticket=ticket, tracker=None, user=current_user).one_or_none()
return render_template("ticket.html", tracker=tracker, ticket=ticket,
access=access, ticket_sub=ticket_sub, tracker_sub=tracker_sub)
ctx = get_ticket_context(ticket, tracker, access)
return render_template("ticket.html", **ctx)
@ticket.route("/<owner>/<name>/<int:ticket_id>/enable_notifications", methods=["POST"])
@loginrequired
@ -123,11 +133,8 @@ def ticket_comment_POST(owner, name, ticket_id):
resolution = None
if not valid.ok:
return render_template("ticket.html",
tracker=tracker,
ticket=ticket,
access=access,
**valid.kwargs)
ctx = get_ticket_context(ticket, tracker, access)
return render_template("ticket.html", **ctx, **valid.kwargs)
comment = add_comment(current_user, ticket,
text=text, resolve=resolve, resolution=resolution, reopen=reopen)
@ -196,14 +203,14 @@ def ticket_add_label(owner, name, ticket_id):
valid = Validation(request)
label_id = valid.require("label_id", friendly_name="A label")
if not valid.ok:
return render_template("ticket.html",
tracker=tracker, ticket=ticket, access=access, **valid.kwargs)
ctx = get_ticket_context(ticket, tracker, access)
return render_template("ticket.html", **ctx, **valid.kwargs)
valid.expect(re.match(r"^\d+$", label_id),
"Label ID must be numeric", field="label_id")
if not valid.ok:
return render_template("ticket.html",
tracker=tracker, ticket=ticket, access=access, **valid.kwargs)
ctx = get_ticket_context(ticket, tracker, access)
return render_template("ticket.html", **ctx, **valid.kwargs)
label_id = int(request.form.get('label_id'))
label = Label.query.filter(Label.id == label_id).first()