from datetime import date from flask import render_template, Flask, request from json import JSONEncoder import bcnsGDSSite.modules.init import os import inspect import json import glob import tomllib class MyJSONEncoder(JSONEncoder): def default(self, o): if isinstance(o, date): return o.isoformat() return super().default(o) def create_app(test_config=None): app = Flask(__name__, instance_relative_config=True) app.config.from_mapping( SECRET_KEY='dev', DATABASE=os.path.join(app.instance_path, 'bcns_gds.sqlite'), ) app.config['JSON_AS_ASCII'] = False if test_config is None: # load the instance config, if it exists, when not testing app.config.from_file("config.toml", load=tomllib.load, text=False) else: # load the test config if passed in app.config.from_mapping(test_config) # ensure the instance folder exists try: os.makedirs(app.instance_path, exist_ok=True) except OSError: print( "Error: Instance-path not found!" + " No configuration-file has been loaded") pass bcnsGDSSite.modules.init.init(app.config) from bcnsGDSSite.modules.gamelist import gamelist from bcnsGDSSite.modules.game import game app.register_blueprint(gamelist) app.register_blueprint(game) languages = bcnsGDSSite.modules.init.get_languages() if not languages: languages_path = os.path.dirname( os.path.abspath(inspect.getfile( inspect.currentframe()))) language_list = glob.glob(languages_path + "/language/*.json") print("### Loaded languages") for language in language_list: filename = os.path.basename(language) lang_code = filename.split('.')[0] with open(language, 'r', encoding='utf-8') as file: print("# ", lang_code) languages[lang_code] = json.loads(file.read()) bcnsGDSSite.modules.init.set_languages(language) # Check if valid language code is set. If not, return app default def lang(lang_code): if lang_code not in languages: return "en_US" return lang_code @app.route("/", methods=["GET", "POST"]) @app.route("//", methods=["GET", "POST"]) def home(lang_code=False): lang_code = lang(lang_code) if request.form: lang_code = request.form["language_select"] return render_template('home.html', **languages[lang_code], lang_code=lang_code, languages=languages.keys()) return app