Source code for evesrp.views

from __future__ import absolute_import
from __future__ import unicode_literals
from flask import redirect, url_for, render_template, make_response, request,\
        json, session
from flask.ext import babel as flask_babel
from flask.ext.login import login_required, current_user
from babel import get_locale_identifier, negotiate_locale, parse_locale
import six
from .. import db, babel
from ..models import Request, ActionType
from ..auth import PermissionType
from ..auth.models import Permission, Division
from ..util import jsonify, varies, locale


if six.PY3:
    unicode = str


@login_required
[docs]def index(): """The index page for EVE-SRP.""" return redirect(url_for('requests.personal_requests'))
@varies('Accept', 'X-Requested-With') def error_page(error): """View function for displaying error pages.""" # Try to get some meaningful bits of information about the error # HTTPExceptions (raised by abort()) have code and description attributes. # Try to prefer those rich values over more generic information. code = error.code if hasattr(error, 'code') else 500 if hasattr(error, 'description'): description = error.description else: description = str(error) name = error.name if hasattr(error, 'name') else u'Application Error' # Give the error information in a machine readable format for APIs if request.is_json or request.is_xhr: response_content = jsonify(description=error.description, code=code) elif request.is_xml: pass else: response_content = render_template('error.html', code=code, description=description, name=name, title=code) # Give a default response code for generic exceptions return make_response(response_content, code) def request_count(permission, statuses=None): """Function intended for counting the number of requests for Jinja templates. """ if statuses is None: if permission == PermissionType.review: statuses = (ActionType.evaluating,) elif permission == PermissionType.pay: statuses = (ActionType.approved,) elif permission == PermissionType.submit: statuses = (ActionType.incomplete,) else: return 0 elif statuses in ActionType.statuses: statuses = (statuses,) permissions = current_user.permissions.\ filter(Permission.permission==permission).\ subquery() divisions = db.session.query(Division.id).\ join(permissions).\ subquery() requests = db.session.query(db.func.count(db.distinct(Request.id))).\ join(divisions).\ filter(Request.status.in_(statuses)) if permission == PermissionType.submit: requests = requests.filter(Request.submitter==current_user) return requests.one()[0] def update_navbar(response): if request.endpoint == 'static': return response if 'application/json' not in response.mimetype: return response response_json = json.loads(response.get_data()) counts = { 'pending': 0, 'payouts': 0, 'personal': 0 } response_json['nav_counts'] = counts # Unauthenticated users get nothing if not current_user.is_authenticated: response.set_data(json.dumps(response_json)) return response counts['pending'] = request_count(PermissionType.review) counts['payouts'] = request_count(PermissionType.pay) counts['personal'] = request_count(PermissionType.submit) response.set_data(json.dumps(response_json)) return response def detect_language(): if 'lang' in request.args: requested_locale = request.args['lang'] locales = [unicode(l) for l in babel.list_translations()] locale = negotiate_locale([requested_locale,], locales) session['locale'] = locale flask_babel.refresh() def locale_selector(): requested_locale = session.get('locale') supported_locales = [unicode(l) for l in locale.enabled_locales()] if requested_locale is not None and \ requested_locale not in supported_locales: requested_locale = None del session['locale'] return requested_locale