""" Onlylegs Gallery - Index view """ from math import ceil from flask import Blueprint, render_template, request from werkzeug.exceptions import abort from sqlalchemy.orm import sessionmaker from gallery import db blueprint = Blueprint('gallery', __name__) db_session = sessionmaker(bind=db.engine) db_session = db_session() @blueprint.route('/') def index(): """ Home page of the website, shows the feed of the latest images """ # meme if request.args.get('coffee') == 'please': abort(418) # pagination, defaults to page 1 if no page is specified page = request.args.get('page', default=1, type=int) limit = 100 # get the total number of images in the database # calculate the total number of pages, and make sure the page number is valid total_images = db_session.query(db.Posts.id).count() pages = ceil(max(total_images, limit) / limit) if page > pages: abort(404, 'You have reached the far and beyond, ' + 'but you will not find your answers here.') # get the images for the current page images = (db_session.query(db.Posts.filename, db.Posts.alt, db.Posts.colours, db.Posts.created_at, db.Posts.id) .order_by(db.Posts.id.desc()) .offset((page - 1) * limit) .limit(limit) .all()) return render_template('index.html', images=images, total_images=total_images, pages=pages, page=page)