#!/usr/bin/env python3 """ OpenEventDatabase Backend This is the main entry point for the OpenEventDatabase backend. It initializes the Falcon application and sets up the routes. """ import sys import falcon # Import utility modules from oedb.utils.logging import logger from oedb.utils.db import check_db_connection # Import middleware from oedb.middleware.headers import HeaderMiddleware from oedb.middleware.cache import CacheMiddleware from oedb.middleware.rate_limit import RateLimitMiddleware # Import resources from oedb.resources.event import event from oedb.resources.stats import StatsResource from oedb.resources.search import EventSearch from oedb.resources.root import root from oedb.resources.demo import demo from oedb.resources.event_form import event_form def create_app(): """ Create and configure the Falcon application. Returns: falcon.App: The configured Falcon application. """ # Create the Falcon application with middleware logger.info("Initializing Falcon application") app = falcon.App(middleware=[ HeaderMiddleware(), CacheMiddleware(), RateLimitMiddleware() ]) # Check database connection before continuing if not check_db_connection(): logger.error("Cannot start server - PostgreSQL database is not responding") sys.exit(1) # Create resource instances stats = StatsResource() event_search = EventSearch() # Add routes logger.info("Setting up API routes") app.add_route('/', root) # Handle root requests app.add_route('/event/search', event_search) # Handle event search requests app.add_route('/event/{id}', event) # Handle single event requests app.add_route('/event', event) # Handle event collection requests app.add_route('/stats', stats) # Handle stats requests app.add_route('/demo', demo) # Handle demo page requests app.add_route('/demo/add', event_form) # Handle event submission form app.add_route('/demo/by-what', demo, suffix='by_what') # Handle events by type page app.add_route('/demo/map-by-what', demo, suffix='map_by_what') # Handle map by event type page app.add_route('/demo/edit/{id}', demo, suffix='edit') # Handle event editing page app.add_route('/demo/traffic', demo, suffix='traffic') # Handle traffic jam reporting page app.add_route('/demo/view-events', demo, suffix='view_events') # Handle view saved events page logger.success("Application initialized successfully") return app # Create the WSGI application app = create_app() if __name__ == '__main__': # This block is executed when the script is run directly import waitress logger.info(" -------------- Starting server on http://127.0.0.1:8080 ------------") waitress.serve(app, host='127.0.0.1', port=8080)