Spaces:
Sleeping
Sleeping
| import logging # Imports the logging module for event logging. | |
| from fastapi import FastAPI # Imports FastAPI, a modern, fast (high-performance) web framework for building APIs. | |
| from fastapi.middleware.cors import CORSMiddleware # Imports CORSMiddleware for handling Cross-Origin Resource Sharing. | |
| # Imports the API router, recommender system, MongoDB connection, and application settings. | |
| #from api.routes import router | |
| from src.api.routes import router | |
| from src.core.recommender import recommender | |
| from src.database.mongodb import mongodb | |
| from src.config.settings import API_TITLE, API_DESCRIPTION, API_VERSION | |
| # Configure logging settings. | |
| logging.basicConfig( | |
| level=logging.INFO, # Sets the minimum logging level to INFO. | |
| format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' # Defines the format for log messages. | |
| ) | |
| logger = logging.getLogger(__name__) # Creates a logger instance for this module. | |
| # Create an instance of the FastAPI application. | |
| app = FastAPI( | |
| title=API_TITLE, # Sets the title of the API, loaded from settings. | |
| description=API_DESCRIPTION, # Sets the description of the API, loaded from settings. | |
| version=API_VERSION # Sets the version of the API, loaded from settings. | |
| ) | |
| # Add CORS (Cross-Origin Resource Sharing) middleware to the application. | |
| # This allows requests from different origins (domains) to access the API. | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], # Allows all origins. In production, this should be restricted to specific origins for security. | |
| allow_credentials=True, # Allows cookies to be included in cross-origin requests. | |
| allow_methods=["*"], # Allows all HTTP methods (GET, POST, PUT, DELETE, etc.). | |
| allow_headers=["*"], # Allows all headers in requests. | |
| ) | |
| # Include the API routes defined in 'src.api.routes.router'. | |
| # This makes the endpoints defined in the router accessible through the app. | |
| app.include_router(router) | |
| async def startup_event(): | |
| """ | |
| Asynchronous function to be executed when the application starts up. | |
| It initializes necessary components like the recommender system. | |
| """ | |
| try: | |
| # Initialize recommender | |
| logger.info("Initializing recommender system...") | |
| recommender.load_components() | |
| app.state.recommender = recommender # Attach recommender to app state | |
| logger.info("Recommender system initialized successfully") | |
| except Exception as e: | |
| logger.error(f"Failed to initialize recommender system: {e}", exc_info=True) | |
| raise # Re-raises the caught exception to halt startup if initialization fails. | |
| async def shutdown_event(): | |
| """ | |
| Asynchronous function to be executed when the application shuts down. | |
| It performs cleanup tasks, such as closing database connections. | |
| """ | |
| try: | |
| # Close MongoDB connection | |
| mongodb.close() | |
| logger.info("MongoDB connection closed") | |
| except Exception as e: | |
| # Logs an error if any issue occurs during the shutdown process. | |
| logger.error(f"Error during shutdown: {e}", exc_info=True) | |
| # This block executes if the script is run directly (e.g., `python main.py`). | |
| if __name__ == "__main__": | |
| import uvicorn # Imports Uvicorn, an ASGI server, for running the FastAPI application. | |
| # Runs the FastAPI application using Uvicorn. | |
| # host="0.0.0.0" makes the server accessible from any network interface. | |
| # port=8000 specifies the port on which the server will listen. | |
| uvicorn.run(app, host="0.0.0.0", port=8000) |