78 lines
2.7 KiB
Python
78 lines
2.7 KiB
Python
#!/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
|
|
|
|
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)
|