79 lines
2.3 KiB
Python
79 lines
2.3 KiB
Python
"""
|
|
Flask application factory and setup.
|
|
"""
|
|
|
|
from flask import Flask
|
|
from flask_cors import CORS
|
|
from .config import Config
|
|
from .utils.logger import get_logger
|
|
from .utils.error_handler import setup_error_handlers
|
|
|
|
# Import controllers
|
|
from .controllers.system_controller import system_bp
|
|
from .controllers.sensors_controller import sensors_bp
|
|
from .controllers.timers_controller import timers_bp
|
|
from .controllers.outputs_controller import outputs_bp
|
|
from .controllers.dts_controller import dts_bp
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
|
|
def create_app(config_object=None):
|
|
"""
|
|
Application factory pattern for creating Flask app.
|
|
|
|
Args:
|
|
config_object: Configuration class or object to use
|
|
|
|
Returns:
|
|
Flask: Configured Flask application
|
|
"""
|
|
app = Flask(__name__)
|
|
|
|
# Configure the app
|
|
if config_object is None:
|
|
config_object = Config
|
|
|
|
app.config.from_object(config_object)
|
|
|
|
# Enable CORS for web-based control panels
|
|
if config_object.CORS_ENABLED:
|
|
CORS(app)
|
|
logger.info("CORS enabled for web applications")
|
|
|
|
# Setup error handlers
|
|
setup_error_handlers(app)
|
|
|
|
# Register blueprints
|
|
register_blueprints(app)
|
|
|
|
# Log application startup
|
|
logger.info(f"Flask application created")
|
|
logger.info(f"Debug mode: {app.config.get('DEBUG', False)}")
|
|
logger.info(f"PLC target: {config_object.PLC_IP}:{config_object.PLC_PORT}")
|
|
|
|
return app
|
|
|
|
|
|
def register_blueprints(app):
|
|
"""Register all route blueprints with the Flask app"""
|
|
|
|
# System and status endpoints
|
|
app.register_blueprint(system_bp, url_prefix='/api')
|
|
|
|
# Data monitoring endpoints
|
|
app.register_blueprint(sensors_bp, url_prefix='/api')
|
|
app.register_blueprint(timers_bp, url_prefix='/api')
|
|
app.register_blueprint(outputs_bp, url_prefix='/api')
|
|
|
|
# Control endpoints
|
|
app.register_blueprint(dts_bp, url_prefix='/api')
|
|
|
|
logger.info("All blueprints registered successfully")
|
|
|
|
# Log registered routes
|
|
if app.config.get('DEBUG', False):
|
|
logger.debug("Registered routes:")
|
|
for rule in app.url_map.iter_rules():
|
|
methods = ','.join(rule.methods - {'OPTIONS', 'HEAD'})
|
|
logger.debug(f" {rule.rule} [{methods}] -> {rule.endpoint}") |