Source code for tvb.interfaces.web.run_landing_page

# -*- coding: utf-8 -*-
#
#
# TheVirtualBrain-Framework Package. This package holds all Data Management, and 
# Web-UI helpful to run brain-simulations. To use it, you also need to download
# TheVirtualBrain-Scientific Package (for simulators). See content of the
# documentation-folder for more details. See also http://www.thevirtualbrain.org
#
# (c) 2012-2023, Baycrest Centre for Geriatric Care ("Baycrest") and others
#
# This program is free software: you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software Foundation,
# either version 3 of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.  See the GNU General Public License for more details.
# You should have received a copy of the GNU General Public License along with this
# program.  If not, see <http://www.gnu.org/licenses/>.
#
#
#   CITATION:
# When using The Virtual Brain for scientific publications, please cite it as explained here:
# https://www.thevirtualbrain.org/tvb/zwei/neuroscience-publications
#
#

"""
Launches the common landing page

.. moduleauthor:: Bogdan Valean
.. moduleauthor:: Lia Domide <lia.domide@codemart.ro>
"""

import os
from flask import Flask, render_template
from gevent.pywsgi import WSGIServer
from tvb.basic.logger.builder import get_logger

CURRENT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
try:
    import tvb.interfaces

    CURRENT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(tvb.interfaces.__file__)))
except ImportError:
    pass

LOGGER = get_logger('tvb.interfaces.web.run_landing_page')
TEMPLATE_FOLDER = os.path.join(CURRENT_DIR, 'interfaces', 'web', 'templates', 'landing_page')
STATIC_FOLDER = os.path.join(CURRENT_DIR, 'interfaces', 'web', 'static')
REDIRECT_OPTIONS = []
app = Flask(__name__, template_folder=TEMPLATE_FOLDER,
            static_folder=STATIC_FOLDER, static_url_path='/static')


[docs]class RedirectOption(object): def __init__(self, url, label, description): self.url = url self.label = label self.description = description def __repr__(self): return "RedirectOption( " + self.label + " , " + self.url + ")"
[docs]def parse_config_file(file_name=os.path.expanduser("~/.tvb.landing.page.configuration")): result = [] no_of_redirect_options = "0" try: config_dict = {} with open(file_name, 'r') as cfg_file: data = cfg_file.read() entries = [line for line in data.split('\n') if not line.startswith('#') and len(line.strip()) > 0] for one_entry in entries: name, value = one_entry.split('=', 1) config_dict[name] = value no_of_redirect_options = config_dict.get('no_of_options') for i in range(int(no_of_redirect_options)): result.append(RedirectOption(config_dict.get(str(i) + ".option.url"), config_dict.get(str(i) + ".option.label"), config_dict.get(str(i) + ".option.description"))) except Exception: LOGGER.exception("Could not parse the configuration file:" + str(file_name)) LOGGER.info("Parsed " + no_of_redirect_options + " redirect options") LOGGER.info(result) return result
[docs]@app.route('/') def index(): return render_template('landing.html', apps=REDIRECT_OPTIONS)
if __name__ == '__main__': REDIRECT_OPTIONS = parse_config_file() server_port = int(os.environ.get('SERVER_PORT', 8080)) http_server = WSGIServer(("0.0.0.0", server_port), app) http_server.serve_forever()