import os import sys import sqlalchemy.exc from flask import Flask, request, jsonify from routes import org_bp, user_bp, file_bp, role_bp from database import db_connection, db from models import Organization, User, File, Session app = Flask(__name__) app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///database.db" app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True app.config["SQLALCHEMY_AUTOCOMMIT"] = False app.config["SQLALCHEMY_AUTOFLUSH"] = False db_connection.init_app(app) with app.app_context(): try: db_connection.session.query(Session).delete() db_connection.session.commit() except sqlalchemy.exc.OperationalError: pass db_connection.create_all() app.register_blueprint(org_bp, url_prefix="/org") app.register_blueprint(user_bp, url_prefix="/user") app.register_blueprint(file_bp, url_prefix="/file") app.register_blueprint(role_bp, url_prefix="/role") def reset_all(): with app.app_context(): db_connection.drop_all() db_connection.create_all() repos = os.path.join(os.path.dirname(os.path.abspath(__file__)), "repository") for repo in os.listdir(repos): if os.path.isdir(os.path.join(repos, repo)): for file in os.listdir(os.path.join(repos, repo)): os.remove(os.path.join(repos, repo, file)) os.rmdir(os.path.join(repos, repo)) @app.route("/", methods=["GET"]) def index(): return jsonify({"message": "Welcome to the API"}), 200 @app.route("/reset", methods=["POST"]) def reset(): password = request.json.get("password") if password != "123": return jsonify({"error": "Invalid password"}), 403 try: reset_all() except sqlalchemy.exc.OperationalError: return jsonify({"error": "Database error"}), 500 return jsonify({"message": "Database reset"}), 200 if __name__ == "__main__": args = sys.argv[1:] for arg in args: if arg == "--reset": try: reset_all() except sqlalchemy.exc.OperationalError: print("Database error") sys.exit(1) break app.run(debug=True)