about summary refs log tree commit diff
path: root/uploader/base_routes.py
blob: 3d0e1b2dc2390398fd8ad711782cdddf1e70ac15 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
"""Basic routes required for all pages"""
import os
import logging
from urllib.parse import urljoin

from gn_libs.mysqldb import database_connection
from flask import (flash,
                   request,
                   url_for,
                   redirect,
                   Blueprint,
                   current_app as app,
                   send_from_directory)

from uploader.ui import make_template_renderer
from uploader.oauth2.client import user_logged_in
from uploader.species.models import all_species, species_by_id

base = Blueprint("base", __name__)
logger = logging.getLogger(__name__)
render_template = make_template_renderer("home")


@base.route("/favicon.ico", methods=["GET"])
def favicon():
    """Return the favicon."""
    return send_from_directory(os.path.join(app.root_path, "static"),
                               "images/CITGLogo.png",
                               mimetype="image/png")


@base.route("/", methods=["GET"])
def index():
    """Load the landing page"""
    streamlined_ui = request.args.get("streamlined_ui")
    if not bool(streamlined_ui):# TODO: Remove this section
        return render_template(
            "index.html" if user_logged_in() else "login.html",
            gn2server_intro=urljoin(app.config["GN2_SERVER_URL"], "/intro"))

    with database_connection(app.config["SQL_URI"]) as conn:
        print("We found a species ID. Processing...")
        if not bool(request.args.get("species_id")):
            return render_template(
                "sui-index.html",# TODO: Rename: sui-index.html, sui_base.html
                gn2server_intro=urljoin(app.config["GN2_SERVER_URL"], "/intro"),
                species=all_species(conn),
                streamlined_ui=streamlined_ui)

        species = species_by_id(conn, request.args.get("species_id"))
        if not bool(species):
            flash("Selected species was not found!", "alert alert-danger")
            return redirect(url_for("base.index", streamlined_ui=streamlined_ui))

        return redirect(url_for("species.view_species",
                                species_id=species["SpeciesId"],
                                streamlined_ui=streamlined_ui))


def appenv():
    """Get app's guix environment path."""
    return os.environ.get("GN_UPLOADER_ENVIRONMENT")

@base.route("/bootstrap/<path:filename>")
def bootstrap(filename):
    """Fetch bootstrap files."""
    return send_from_directory(appenv(), f"share/web/bootstrap/{filename}")



@base.route("/jquery/<path:filename>")
def jquery(filename):
    """Fetch jquery files."""
    return send_from_directory(
        appenv(), f"share/genenetwork2/javascript/jquery/{filename}")


@base.route("/datatables/<path:filename>")
def datatables(filename):
    """Fetch DataTables files."""
    return send_from_directory(
        appenv(), f"share/genenetwork2/javascript/DataTables/{filename}")

@base.route("/datatables-extensions/<path:filename>")
def datatables_extensions(filename):
    """Fetch DataTables files."""
    return send_from_directory(
        appenv(), f"share/genenetwork2/javascript/DataTablesExtensions/{filename}")


@base.route("/node-modules/<path:filename>")
def node_modules(filename):
    """Fetch node-js modules."""
    return send_from_directory(
        appenv(), f"lib/node_modules/{filename}")