Exemple #1
0
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)
Exemple #2
0
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/")