Files
digifi-flaskA001/app.py
T
2025-03-20 13:35:44 +01:00

76 lines
2.4 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 api.routes import register_blueprints
from api.middleware import register_middleware
import logging
import socket
import sys
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()
# Get port from config or use a default
port = app.config.get('PORT', 5000)
# Try to run the app, with better error handling for socket issues
try:
app.run(debug=app.config.get('DEBUG', False), host='0.0.0.0', port=port)
except socket.error as e:
if e.errno == 10013: # Permission denied error on Windows
print(f"Error: Permission denied when trying to bind to port {port}.")
print("Try one of the following solutions:")
print(f"1. Use a different port (above 1024): set PORT=8080 in your environment variables")
print("2. Run the application with administrator privileges")
print("3. Check if another application is already using this port")
else:
print(f"Socket error: {e}")
sys.exit(1)