Spaces:
Running
Running
| # main.py | |
| import os | |
| import logging | |
| import warnings | |
| # Suppress protobuf version warnings (they're harmless but noisy) | |
| warnings.filterwarnings("ignore", category=UserWarning, module="google.protobuf") | |
| os.environ["PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION"] = "python" | |
| # Make PROJECT_ROOT explicit so module-level code in the container works reliably | |
| PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) | |
| # Ensure logs dir exists | |
| LOG_DIR = os.path.join(PROJECT_ROOT, "logs") | |
| os.makedirs(LOG_DIR, exist_ok=True) | |
| # Configure file logging (keeps container stdout clean and persists errors) | |
| logfile = os.path.join(LOG_DIR, "app.log") | |
| handler = logging.FileHandler(logfile) | |
| handler.setLevel(logging.INFO) | |
| formatter = logging.Formatter("%(asctime)s [%(levelname)s] %(module)s: %(message)s") | |
| handler.setFormatter(formatter) | |
| root_logger = logging.getLogger() | |
| # Add handler only if not already added (avoids duplicates in dev reload) | |
| if not any(isinstance(h, logging.FileHandler) and getattr(h, "baseFilename", "") == logfile for h in root_logger.handlers): | |
| root_logger.addHandler(handler) | |
| # Import factory after logging and directory setup so imports don't crash during bootstrap | |
| from app import create_app | |
| # Create app (allow env-driven config if needed) | |
| app = create_app() | |
| if __name__ == "__main__": | |
| # allow overriding host/port via env (useful in Docker) | |
| host = os.environ.get("HOST", "0.0.0.0") | |
| port = int(os.environ.get("PORT", os.environ.get("FLASK_RUN_PORT", 5000))) | |
| debug = os.environ.get("FLASK_DEBUG", "0") in ("1", "true", "True") | |
| app.logger.info("Starting app on %s:%s (debug=%s)", host, port, debug) | |
| app.run(host=host, port=port, debug=debug) | |