diff --git a/api/app.py b/api/app.py index 338e739..ec6c1c8 100644 --- a/api/app.py +++ b/api/app.py @@ -4,44 +4,56 @@ from flask_jwt_extended import JWTManager from jwt import ExpiredSignatureError from models import db import os -from utils import init_db -from views import user_bp +from task_views import task_bp +from user_views import user_bp, init_db from werkzeug.exceptions import HTTPException -# App initialization -load_dotenv() -app = Flask(__name__) -app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('SQLALCHEMY_DATABASE_URI') -app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True -app.config['JWT_SECRET_KEY'] = os.getenv('JWT_SECRET_KEY', 'changeme') +def create_app(config_name="default"): + """Creates and returns a new instance of Flask app.""" + load_dotenv() + app = Flask(__name__) + + # Database settings + if config_name == "testing": + app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///:memory:" # Database in memory + app.config["TESTING"] = True + else: + app.config["SQLALCHEMY_DATABASE_URI"] = os.getenv("SQLALCHEMY_DATABASE_URI") + + app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False + app.config["JWT_SECRET_KEY"] = os.getenv("JWT_SECRET_KEY", "changeme") -# Blueprint registration -app.register_blueprint(user_bp) + # Blueprints registration + app.register_blueprint(user_bp) + app.register_blueprint(task_bp) -# Database and JWT initialization -db.init_app(app) -jwt = JWTManager(app) + # Database and JWT initialization + db.init_app(app) + jwt = JWTManager(app) -# Global error handler -@app.errorhandler(Exception) -def global_error_handler(error): - if isinstance(error, HTTPException): - response = jsonify({"error": error.description}) - response.status_code = error.code - elif isinstance(error, ExpiredSignatureError): - response = jsonify({"error": "Token has expired"}) - response.status_code = 401 - else: # Wszystkie inne błędy - response = jsonify({"error": str(error)}) - response.status_code = 500 - return response + # Global error handler + @app.errorhandler(Exception) + def global_error_handler(error): + if isinstance(error, HTTPException): + response = jsonify({"error": error.description}) + response.status_code = error.code + elif isinstance(error, ExpiredSignatureError): + response = jsonify({"error": "Token has expired"}) + response.status_code = 401 + else: # All other errors + response = jsonify({"error": str(error)}) + response.status_code = 500 + return response + + # Fill database by initial values (only if we are not testing) + with app.app_context(): + db.create_all() + if config_name != "testing": + init_db() + return app -# Fill database by initial values -with app.app_context(): - db.create_all() - init_db() - -# Server start +# Server start only if we run app directly if __name__ == "__main__": - app.run(host='0.0.0.0') + app = create_app() + app.run(host="0.0.0.0")