예제 #1
0
파일: routes.py 프로젝트: x89/qdb
def home():
	query = db_session.query(Quote) \
		.filter(Quote.approved == True)

	order = request.args.get('order', 'desc').lower()
	if order == 'asc':
		query = query.order_by(Quote.submitted_at.asc()) \
			.order_by(Quote.id.asc())
	else:
		query = query.order_by(Quote.submitted_at.desc()) \
			.order_by(Quote.id.desc())

	search = request.args.get('s')
	if search:
		query = query.filter(Quote.body.ilike('%'+search+'%'))

	page = int(request.args.get('p', 1))
	if page < 1:
		page = 1
	paginator = Paginator(query, page, request.url)
	quotes = paginator.items

	if request.headers.get('Accept') == 'application/json':
		return jsonify(quotes=paginator)

	return render_template('list.html.jinja', quotes=quotes, paginator=paginator)
예제 #2
0
파일: __init__.py 프로젝트: anlutro/qdb
def jinja_globals():
	context = dict()

	if session.get('logged_in'):
		context['pending_count'] = db_session.query(Quote) \
			.filter(Quote.approved == False) \
			.count()

	# cache busting URLs
	if not app.debug:
		url_cache = {}

		def dated_url_for(endpoint, **values):
			if endpoint == 'static':
				filename = values.get('filename')
				if filename:
					if filename not in url_cache:
						file_path = os.path.join(app.static_folder, filename)
						if os.path.isfile(file_path):
							timestamp = int(os.stat(file_path).st_mtime)
							directory, filename = os.path.split(filename)
							filename, extension = filename.split('.', 1)
							filename = '{}.{}.{}'.format(filename, timestamp, extension)
							url_cache[filename] = os.path.join(directory, filename)
						else:
							url_cache[filename] = filename
					values['filename'] = url_cache[filename]
			return url_for(endpoint, **values)

		context['url_for'] = dated_url_for

	return context
예제 #3
0
파일: routes.py 프로젝트: risb0r/qdb
def show(quote_id):
    quote = db_session.query(Quote).filter(Quote.id == quote_id).first()

    if not quote:
        return abort(404)

    if request.method in ("GET", "HEAD"):
        if request.headers.get("Accept") == "application/json":
            return jsonify(quote=quote)
        return render_template("show.html.jinja", quote=quote)

    if not session.get("logged_in"):
        return abort(401)

    if request.method == "DELETE":
        db_session.delete(quote)
        db_session.commit()
        return "OK"

    quote.body = prepare_quote(
        request.form["body"],
        strip_timestamps=bool(request.form.get("strip_timestamps")),
    )
    db_session.add(quote)
    db_session.commit()
    return "OK"
예제 #4
0
파일: routes.py 프로젝트: risb0r/qdb
def home():
    query = db_session.query(Quote).filter(Quote.approved == True)

    order = request.args.get("order", "desc").lower()
    if order == "asc":
        query = query.order_by(Quote.submitted_at.asc()).order_by(
            Quote.id.asc())
    else:
        query = query.order_by(Quote.submitted_at.desc()).order_by(
            Quote.id.desc())

    search = request.args.get("s")
    if search:
        query = query.filter(Quote.body.ilike("%" + search + "%"))

    try:
        page = int(request.args.get("p", 1))
    except ValueError:
        resp = jsonify(error="invalid page number")
        resp.status_code = 400
        return resp

    if page < 1:
        page = 1
    paginator = Paginator(query, page, request.url)
    quotes = paginator.items

    if request.headers.get("Accept") == "application/json":
        return jsonify(quotes=paginator)

    return render_template("list.html.jinja",
                           quotes=quotes,
                           paginator=paginator)
예제 #5
0
파일: routes.py 프로젝트: x89/qdb
def show(quote_id):
	quote = db_session.query(Quote) \
		.filter(Quote.id == quote_id) \
		.first()

	if not quote:
		return abort(404)

	if request.method == 'GET' or request.method == 'HEAD':
		if request.headers.get('Accept') == 'application/json':
			return jsonify(quote=quote)
		return render_template('show.html.jinja', quote=quote)

	if not session.get('logged_in'):
		return abort(401)

	if request.method == 'DELETE':
		db_session.delete(quote)
		db_session.commit()
		return 'OK'

	body = Quote.prepare(request.form['body'])
	quote.body = body
	db_session.add(quote)
	db_session.commit()
	return 'OK'
예제 #6
0
파일: routes.py 프로젝트: x89/qdb
def show(quote_id):
    quote = db_session.query(Quote) \
     .filter(Quote.id == quote_id) \
     .first()

    if not quote:
        return abort(404)

    if request.method == 'GET' or request.method == 'HEAD':
        if request.headers.get('Accept') == 'application/json':
            return jsonify(quote=quote)
        return render_template('show.html.jinja', quote=quote)

    if not session.get('logged_in'):
        return abort(401)

    if request.method == 'DELETE':
        db_session.delete(quote)
        db_session.commit()
        return 'OK'

    body = Quote.prepare(request.form['body'])
    quote.body = body
    db_session.add(quote)
    db_session.commit()
    return 'OK'
예제 #7
0
파일: routes.py 프로젝트: x89/qdb
def home():
    query = db_session.query(Quote) \
     .filter(Quote.approved == True)

    order = request.args.get('order', 'desc').lower()
    if order == 'asc':
        query = query.order_by(Quote.submitted_at.asc()) \
         .order_by(Quote.id.asc())
    else:
        query = query.order_by(Quote.submitted_at.desc()) \
         .order_by(Quote.id.desc())

    search = request.args.get('s')
    if search:
        query = query.filter(Quote.body.ilike('%' + search + '%'))

    page = int(request.args.get('p', 1))
    if page < 1:
        page = 1
    paginator = Paginator(query, page, request.url)
    quotes = paginator.items

    if request.headers.get('Accept') == 'application/json':
        return jsonify(quotes=paginator)

    return render_template('list.html.jinja',
                           quotes=quotes,
                           paginator=paginator)
예제 #8
0
파일: __init__.py 프로젝트: x89/qdb
def jinja_globals():
	context = dict()

	if session.get('logged_in'):
		context['pending_count'] = db_session.query(Quote) \
			.filter(Quote.approved == False) \
			.count()

	return context
예제 #9
0
def jinja_globals():
    context = dict()

    if session.get('logged_in'):
        context['pending_count'] = db_session.query(Quote) \
         .filter(Quote.approved == False) \
         .count()

    return context
예제 #10
0
파일: routes.py 프로젝트: risb0r/qdb
def reject(quote_id):
    if not session.get("logged_in"):
        return abort(401)

    quote = db_session.query(Quote).filter(Quote.id == quote_id).first()

    if not quote:
        return abort(404)

    quote.approved = False
    db_session.add(quote)
    db_session.commit()

    return "OK"
예제 #11
0
파일: routes.py 프로젝트: risb0r/qdb
def pending():
    if not session.get("logged_in"):
        flash("You must be logged in to do that!")
        return redirect(url_for("home"))

    query = (db_session.query(Quote).filter(Quote.approved == None).order_by(
        Quote.submitted_at.desc()))

    quotes = query.all()

    if request.headers.get("Accept") == "application/json":
        return jsonify(quotes=quotes)

    return render_template("list.html.jinja", quotes=quotes)
예제 #12
0
파일: routes.py 프로젝트: x89/qdb
def pending():
	if not session.get('logged_in'):
		flash('You must be logged in to do that!')
		return redirect(url_for('home'))

	query = db_session.query(Quote) \
		.filter(Quote.approved == False) \
		.order_by(Quote.submitted_at.desc())

	quotes = query.all()

	if request.headers.get('Accept') == 'application/json':
		return jsonify(quotes=quotes)

	return render_template('list.html.jinja', quotes=quotes)
예제 #13
0
파일: routes.py 프로젝트: x89/qdb
def pending():
    if not session.get('logged_in'):
        flash('You must be logged in to do that!')
        return redirect(url_for('home'))

    query = db_session.query(Quote) \
     .filter(Quote.approved == False) \
     .order_by(Quote.submitted_at.desc())

    quotes = query.all()

    if request.headers.get('Accept') == 'application/json':
        return jsonify(quotes=quotes)

    return render_template('list.html.jinja', quotes=quotes)
예제 #14
0
파일: routes.py 프로젝트: risb0r/qdb
def random():
    query = db_session.query(Quote)

    search = request.args.get("s")
    if search:
        query = query.filter(Quote.body.ilike("%" + search + "%"))

    query = query.filter(Quote.approved == True).order_by(
        func.random()).limit(10)

    quotes = query.all()

    if request.headers.get("Accept") == "application/json":
        return jsonify(quotes=quotes)

    return render_template("list.html.jinja", quotes=quotes)
예제 #15
0
파일: routes.py 프로젝트: risb0r/qdb
def get_all():
    query = db_session.query(Quote).filter(Quote.approved == True)

    order = request.args.get("order", "desc").lower()
    if order == "asc":
        query = query.order_by(Quote.submitted_at.asc()).order_by(
            Quote.id.asc())
    else:
        query = query.order_by(Quote.submitted_at.desc()).order_by(
            Quote.id.desc())

    quotes = query.all()

    if request.headers.get("Accept") == "application/json":
        return jsonify(quotes=quotes)

    return render_template("list.html.jinja", quotes=quotes)
예제 #16
0
파일: routes.py 프로젝트: risb0r/qdb
def approve(quote_id):
    if not session.get("logged_in"):
        return abort(401)

    quote = db_session.query(Quote).filter(Quote.id == quote_id).first()

    if not quote:
        return abort(404)

    quote.approved = True
    db_session.add(quote)
    db_session.commit()

    if app.config.get("ENABLE_IRCBOT_WEBHOOKS"):
        ircbot.notify_bot(quote)

    return "OK"
예제 #17
0
파일: routes.py 프로젝트: x89/qdb
def random():
    query = db_session.query(Quote)

    search = request.args.get('s')
    if search:
        query = query.filter(Quote.body.ilike('%' + search + '%'))

    query = query.filter(Quote.approved == True) \
     .order_by(func.random()) \
     .limit(10)

    quotes = query.all()

    if request.headers.get('Accept') == 'application/json':
        return jsonify(quotes=quotes)

    return render_template('list.html.jinja', quotes=quotes)
예제 #18
0
파일: routes.py 프로젝트: x89/qdb
def random():
	query = db_session.query(Quote)

	search = request.args.get('s')
	if search:
		query = query.filter(Quote.body.ilike('%'+search+'%'))

	query = query.filter(Quote.approved == True) \
		.order_by(func.random()) \
		.limit(10)

	quotes = query.all()

	if request.headers.get('Accept') == 'application/json':
		return jsonify(quotes=quotes)

	return render_template('list.html.jinja', quotes=quotes)
예제 #19
0
파일: routes.py 프로젝트: x89/qdb
def get_all():
	query = db_session.query(Quote) \
		.filter(Quote.approved == True)

	order = request.args.get('order', 'desc').lower()
	if order == 'asc':
		query = query.order_by(Quote.submitted_at.asc()) \
			.order_by(Quote.id.asc())
	else:
		query = query.order_by(Quote.submitted_at.desc()) \
			.order_by(Quote.id.desc())

	quotes = query.all()

	if request.headers.get('Accept') == 'application/json':
		return jsonify(quotes=quotes)

	return render_template('list.html.jinja', quotes=quotes)
예제 #20
0
파일: routes.py 프로젝트: x89/qdb
def get_all():
    query = db_session.query(Quote) \
     .filter(Quote.approved == True)

    order = request.args.get('order', 'desc').lower()
    if order == 'asc':
        query = query.order_by(Quote.submitted_at.asc()) \
         .order_by(Quote.id.asc())
    else:
        query = query.order_by(Quote.submitted_at.desc()) \
         .order_by(Quote.id.desc())

    quotes = query.all()

    if request.headers.get('Accept') == 'application/json':
        return jsonify(quotes=quotes)

    return render_template('list.html.jinja', quotes=quotes)
예제 #21
0
파일: routes.py 프로젝트: x89/qdb
def approve(quote_id):
	if not session.get('logged_in'):
		return abort(401)

	quote = db_session.query(Quote) \
		.filter(Quote.id == quote_id) \
		.first()

	if not quote:
		return abort(404)

	quote.approved = True
	db_session.add(quote)
	db_session.commit()

	if app.config.get('ENABLE_IRCBOT_WEBHOOKS'):
		ircbot.notify_bot(quote)

	return 'OK'
예제 #22
0
파일: __init__.py 프로젝트: moopie/qdb
def jinja_globals():
    # inject global jinja variables
    from qdb.database import db_session
    from qdb.models import Quote

    context = dict()

    if session.get('logged_in'):
        context['pending_count'] = db_session.query(Quote) \
         .filter(Quote.approved == None) \
         .count()

    # cache busting URLs
    if not app.debug:
        url_cache = {}

        def dated_url_for(endpoint, **values):
            if endpoint == 'static':
                filename = values.get('filename')
                if filename:
                    if filename not in url_cache:
                        file_path = os.path.join(app.static_folder, filename)
                        if os.path.isfile(file_path):
                            timestamp = int(os.stat(file_path).st_mtime)
                            directory, filename = os.path.split(filename)
                            filename, extension = filename.split('.', 1)
                            filename = '{}.{}.{}'.format(
                                filename, timestamp, extension)
                            url_cache[filename] = os.path.join(
                                directory, filename)
                        else:
                            url_cache[filename] = filename
                    values['filename'] = url_cache[filename]
            return url_for(endpoint, **values)

        context['url_for'] = dated_url_for

    return context
예제 #23
0
파일: routes.py 프로젝트: risb0r/qdb
def rejected():
    query = db_session.query(Quote).filter(Quote.approved == False)

    order = request.args.get("order", "desc").lower()
    if order == "asc":
        query = query.order_by(Quote.submitted_at.asc()).order_by(
            Quote.id.asc())
    else:
        query = query.order_by(Quote.submitted_at.desc()).order_by(
            Quote.id.desc())

    page = int(request.args.get("p", 1))
    if page < 1:
        page = 1
    paginator = Paginator(query, page, request.url)
    quotes = paginator.items

    if request.headers.get("Accept") == "application/json":
        return jsonify(quotes=paginator)

    return render_template("list.html.jinja",
                           quotes=quotes,
                           paginator=paginator)