import flask from db_classes import * from sqlalchemy.orm import Session from sqlalchemy import create_engine from flask_cors import CORS app = flask.Flask(__name__) CORS(app) def setup_session(): engine = create_engine("mariadb+mariadbconnector://videogamedb:MumMTK3bwjYJRfe@simailadjalim.fr/videogamedb") return Session(engine) def close_session(session): session.close() @app.route("/langage", methods=["GET"]) def get_langage(): session = setup_session() data = [] for language in session.query(Language).all(): data.append({ "id": language.id, "name": language.name }) close_session(session) return flask.jsonify(data), 200 @app.route("/langage/", methods=["GET"]) def get_langage_id(langage_id): session = setup_session() language = session.query(Language).filter(Language.id == langage_id).first() if language is None: close_session(session) return flask.jsonify({"error": "language not found"}), 404 data = { "id": language.id, "name": language.name } close_session(session) return flask.jsonify(data), 200 @app.route("/extention", methods=["GET"]) def get_extention(): session = setup_session() data = [] for extention in session.query(RomFileExtensions).all(): data.append({ "id": extention.id, "name": extention.name }) close_session(session) return flask.jsonify(data), 200 @app.route("/extention/", methods=["GET"]) def get_extention_id(extention_id): session = setup_session() extention = session.query(RomFileExtensions).filter(RomFileExtensions.id == extention_id).first() if extention is None: close_session(session) return flask.jsonify({"error": "extention not found"}), 404 data = { "id": extention.id, "name": extention.name } close_session(session) return flask.jsonify(data), 200 @app.route("/consoles", methods=["GET"]) def get_consoles(): session = setup_session() send_data = [] for console in session.query(Console).all(): data = { "id": console.id, "name": console.name, "core": console.core, #TODO Fix "playable": True if console.playable else False } send_data.append(data) close_session(session) return send_data, 200 @app.route("/consoles/", methods=["GET"]) def get_console(console_id): session = setup_session() console = session.query(Console).filter(Console.id == console_id).first() if console is None: close_session(session) return flask.jsonify({"error": "console not found"}), 404 data = { "id": console.id, "core": console.core, "name": console.name, "playable": True if console.playable else False } close_session(session) return flask.jsonify(data), 200 @app.route("/consoles//roms", methods=["GET"]) def get_console_roms(console_id): session = setup_session() console = session.query(Console).filter(Console.id == console_id).first() if console is None: close_session(session) return flask.jsonify({"error": "console not found"}), 404 data = [] for rom in console.rom_files: data.append({ "id": rom.id, "name": rom.name, "console_id": rom.console_id, "extension_id": rom.extension_id, "language_id": [language.id for language in rom.languages], }) close_session(session) return flask.jsonify(data), 200 @app.route("/roms", methods=["GET"]) def get_roms(): session = setup_session() data = [] for rom in session.query(RomFile).all(): data.append({ "id": rom.id, "name": rom.name, "console_id": rom.console_id, "extension_id": rom.extension_id, "language_id": [language.id for language in rom.languages], }) close_session(session) return flask.jsonify(data), 200 @app.route("/roms/", methods=["GET"]) def get_rom(rom_id): session = setup_session() rom = session.query(RomFile).filter(RomFile.id == rom_id).first() if rom is None: close_session(session) return flask.jsonify({"error": "rom not found"}), 404 if flask.request.args.get("romfile"): return flask.send_file(rom.path), 200 else : data = { "id": rom.id, "name": rom.name, "console_id": rom.console_id, "extension_id": rom.extension_id, "categories": [category.id for category in rom.categories], "language_id": [language.id for language in rom.languages], } close_session(session) return flask.jsonify(data), 200 @app.route("/categories", methods=["GET"]) def get_categories(): session = setup_session() data = [] for category in session.query(Category).all(): data.append({ "id": category.id, "name": category.name }) close_session(session) return flask.jsonify(data), 200 @app.route("/categories/", methods=["GET"]) def get_category(category_id): session = setup_session() category = session.query(Category).filter(Category.id == category_id).first() if category is None: close_session(session) return flask.jsonify({"error": "category not found"}), 404 data = { "id": category.id, "name": category.name } close_session(session) return flask.jsonify(data), 200 @app.route("/emulator", methods=["GET"]) def get_emulator(): rom_id = flask.request.args.get("rom_id") if rom_id is None: return flask.jsonify({"error": "rom_id not found"}), 404 console_core = flask.request.args.get("console_core") if console_core is None: return flask.jsonify({"error": "console_core not found"}), 404 return flask.render_template("emulator.html",rom_id=rom_id,console_core=console_core), 200 app.run(host="0.0.0.0", port=5000, debug=True)