Now fabric function creates app

This commit is contained in:
Marcin-Ramotowski 2025-03-29 20:32:38 +00:00
parent 3ad5f0ca94
commit 99dd5148b1

View File

@ -4,44 +4,56 @@ from flask_jwt_extended import JWTManager
from jwt import ExpiredSignatureError from jwt import ExpiredSignatureError
from models import db from models import db
import os import os
from utils import init_db from task_views import task_bp
from views import user_bp from user_views import user_bp, init_db
from werkzeug.exceptions import HTTPException from werkzeug.exceptions import HTTPException
# App initialization def create_app(config_name="default"):
load_dotenv() """Creates and returns a new instance of Flask app."""
app = Flask(__name__) load_dotenv()
app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('SQLALCHEMY_DATABASE_URI') app = Flask(__name__)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
app.config['JWT_SECRET_KEY'] = os.getenv('JWT_SECRET_KEY', 'changeme') # 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 # Blueprints registration
app.register_blueprint(user_bp) app.register_blueprint(user_bp)
app.register_blueprint(task_bp)
# Database and JWT initialization # Database and JWT initialization
db.init_app(app) db.init_app(app)
jwt = JWTManager(app) jwt = JWTManager(app)
# Global error handler # Global error handler
@app.errorhandler(Exception) @app.errorhandler(Exception)
def global_error_handler(error): def global_error_handler(error):
if isinstance(error, HTTPException): if isinstance(error, HTTPException):
response = jsonify({"error": error.description}) response = jsonify({"error": error.description})
response.status_code = error.code response.status_code = error.code
elif isinstance(error, ExpiredSignatureError): elif isinstance(error, ExpiredSignatureError):
response = jsonify({"error": "Token has expired"}) response = jsonify({"error": "Token has expired"})
response.status_code = 401 response.status_code = 401
else: # Wszystkie inne błędy else: # All other errors
response = jsonify({"error": str(error)}) response = jsonify({"error": str(error)})
response.status_code = 500 response.status_code = 500
return response 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 # Server start only if we run app directly
with app.app_context():
db.create_all()
init_db()
# Server start
if __name__ == "__main__": if __name__ == "__main__":
app.run(host='0.0.0.0') app = create_app()
app.run(host="0.0.0.0")