63 lines
1.4 KiB
Python
63 lines
1.4 KiB
Python
from flask import Flask
|
|
from flask_cors import CORS
|
|
from flask_migrate import Migrate
|
|
from flask_jwt_extended import JWTManager
|
|
import logging
|
|
import os
|
|
|
|
from .config import config_by_name
|
|
from .models import db
|
|
|
|
|
|
def create_app(config_name=None):
|
|
app = Flask(__name__)
|
|
|
|
if config_name is None:
|
|
config_name = os.environ.get("FLASK_ENV", "development")
|
|
|
|
app.config.from_object(config_by_name[config_name])
|
|
|
|
CORS(app, origins=app.config["CORS_ORIGINS"])
|
|
|
|
db.init_app(app)
|
|
migrate = Migrate(app, db)
|
|
|
|
jwt = JWTManager(app)
|
|
|
|
setup_logging(app)
|
|
|
|
register_blueprints(app)
|
|
|
|
setup_error_handlers(app)
|
|
|
|
return app
|
|
|
|
|
|
def setup_logging(app):
|
|
log_dir = os.path.dirname(app.config["LOG_FILE"])
|
|
if not os.path.exists(log_dir):
|
|
os.makedirs(log_dir)
|
|
|
|
logging.basicConfig(
|
|
level=getattr(logging, app.config["LOG_LEVEL"]),
|
|
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|
handlers=[logging.FileHandler(app.config["LOG_FILE"]), logging.StreamHandler()],
|
|
)
|
|
|
|
|
|
def register_blueprints(app):
|
|
from .api import api_bp
|
|
|
|
app.register_blueprint(api_bp, url_prefix="/api")
|
|
|
|
|
|
def setup_error_handlers(app):
|
|
@app.errorhandler(404)
|
|
def not_found(error):
|
|
return {"error": "Not found"}, 404
|
|
|
|
@app.errorhandler(500)
|
|
def internal_error(error):
|
|
app.logger.error(f"Internal error: {error}")
|
|
return {"error": "Internal server error"}, 500
|