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, current_app
import flask_babel
from flask_login import login_required, current_user
from babel import get_locale_identifier, negotiate_locale, parse_locale
import six
from .. import db, babel, sentry
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=description, code=code) elif request.is_xml: pass else: response_content = render_template('error.html', code=code, description=description, name=name, title=code) if code == 500 and current_app.config.get('SENTRY_RELEASE') is not None: sentry.captureException() # 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