def venues(): """Show a list all of the venues, organized by city.""" shows_by_city = {} upcoming_shows = Show.query.filter( Show.start_time > datetime.utcnow()).subquery() venues_query = (Venue.query.outerjoin( upcoming_shows, Venue.id == upcoming_shows.c.venue_id).with_entities( Venue.city, Venue.state, Venue.id, Venue.name, func.count(upcoming_shows.c.venue_id)).group_by(Venue.id)) for v in venues_query: city_state = f'{v[0]}_{v[1]}' location = shows_by_city.setdefault(city_state, {}) venues = location.setdefault('venues', []) venues.append({'id': v[2], 'name': v[3], 'num_upcoming_shows': v[4]}) data = [{ 'city': c.split('_')[0], 'state': c.split('_')[1], 'venues': shows_by_city[c]['venues'] } for c in shows_by_city] return render_template('pages/venues.html', areas=data)
def register(): form = RegisterUserForm() token = request.args.get('token') if request.method == 'GET' and token: user = db.session.query(User).filter(User.token == token).first() if user: if user.token == token and user.timestamp > datetime.utcnow(): return render_template('register.html', user=user, form=form) else: return render_template('401.html'), 401 else: return render_template('404.html'), 404 elif request.method == 'POST': if token: user = db.session.query(User).filter(User.token == token).first() if user: if user.token == token and user.timestamp > datetime.utcnow(): try: user.ssid = form.ssid.data user.psk = form.psk.data db.session.commit() except exc.IntegrityError as e: db.session.rollback() return render_template('adduserfail.html', error=e), 400 wifiprov = provision(user.hotelid, user.roomid, form.ssid.data, form.psk.data) if isinstance(wifiprov, Exception): return render_template('wififail.html', error=wifiprov), 400 elif wifiprov['name'] == form.ssid.data and wifiprov['psk'] == form.psk.data: user.wifiprovisioned = True db.session.commit() return render_template('thankyou.html') else: return render_template('404.html'), 404 else: return render_template('401.html'), 401 else: return render_template('404.html'), 404
def view_item_new_post(): """handle new item requests""" # ensure user is logged in and session is active if not check_active_session(login_session) and "user_info" not in login_session.keys(): flash("Error: you are not logged in.") return redirect("/login/") form = ItemForm() if form.validate_on_submit(): # add category if needed try: new_cat = session.query(Category).filter_by(name=form.category.data).one() except db.NoResultFound: new_cat = Category(name=form.category.data) session.add(new_cat) # create db image new_image = push_image(session, form.image.data.filename) # create item new_item = Item( name=form.name.data, category=new_cat, description=form.description.data, created_date=datetime.utcnow(), updated_date=datetime.utcnow(), user_id=login_session["user_info"]["user_id"], image=new_image, ) # update db session.add(new_item) session.commit() # save image near commit form.image.data.save(os.path.join(app.config["UPLOAD_DIR"], new_image.filename)) flash("%s added to items." % new_item.name) return redirect("/item/") else: flash("Error: bad form %s" % form.errors) return redirect("/item/new/")
def view_item_post(id): """handle post requests for an item""" if not check_active_session(login_session) and "user_info" not in login_session.keys(): flash("Error: invalid session") return redirect("/item/") item = session.query(Item).get(id) if not item: flash("Error: Item not found") return redirect("/item/") # ensure logged in user owns the item if not login_session["user_info"]["user_id"] == item.user_id: flash("Error: You are not logged in") return redirect("/login/") edit_form = ItemForm() if edit_form.validate_on_submit(): # update image if included item.image = push_image(session, edit_form.image.data.filename) if item.category != edit_form.category.data: # update category if changed item.category = update_category(edit_form.category.data, session, item.category) # update item item.name = edit_form.name.data item.description = edit_form.description.data item.updated_date = datetime.utcnow() session.add(item) # save image near commit edit_form.image.data.save(os.path.join(app.config["UPLOAD_DIR"], item.image.filename)) session.commit() flash("%s updated." % item.name) return redirect("/item/%s/" % item.id) del_form = ItemDeleteForm() if del_form.validate_on_submit(): # remove unused category pop_category(item.category, session) # remove item session.delete(item) session.commit() flash("%s deleted" % item.name) return redirect("/item/")