59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
"""
|
|
Simbrella FirstAdvance API Flask Implementation
|
|
This module serves as the entry point for the Flask application.
|
|
"""
|
|
from flask import Flask
|
|
from flask.typing import ResponseReturnValue
|
|
from config import Config
|
|
from app.routes import register_blueprints
|
|
from app.middleware import register_middleware
|
|
import logging
|
|
|
|
def create_app(config_class=Config) -> Flask:
|
|
"""
|
|
Factory pattern to create the Flask application.
|
|
|
|
Args:
|
|
config_class: Configuration class to use
|
|
|
|
Returns:
|
|
Flask application instance
|
|
"""
|
|
app = Flask(__name__)
|
|
app.config.from_object(config_class)
|
|
|
|
# Configure logging
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
|
)
|
|
|
|
# Register middleware
|
|
register_middleware(app)
|
|
|
|
# Register blueprints
|
|
register_blueprints(app)
|
|
|
|
# Register error handlers
|
|
@app.errorhandler(400)
|
|
def bad_request(error) -> ResponseReturnValue:
|
|
return {"resultCode": "400", "resultDescription": f"Bad request: {str(error)}"}, 400
|
|
|
|
@app.errorhandler(404)
|
|
def not_found(error) -> ResponseReturnValue:
|
|
return {"resultCode": "404", "resultDescription": "Resource not found"}, 404
|
|
|
|
@app.errorhandler(422)
|
|
def validation_error(error) -> ResponseReturnValue:
|
|
return {"resultCode": "422", "resultDescription": f"Validation error: {str(error)}"}, 422
|
|
|
|
@app.errorhandler(500)
|
|
def server_error(error) -> ResponseReturnValue:
|
|
return {"resultCode": "500", "resultDescription": "Internal server error"}, 500
|
|
|
|
return app
|
|
|
|
if __name__ == '__main__':
|
|
app = create_app()
|
|
port = app.config.get('PORT', 5000)
|
|
app.run(debug=app.config.get('DEBUG', False), host='0.0.0.0', port=port) |