oedb-backend/backend.py

80 lines
2.8 KiB
Python
Raw Normal View History

2025-09-15 23:25:11 +02:00
#!/usr/bin/env python3
"""
OpenEventDatabase Backend
2016-04-14 17:46:30 +02:00
2025-09-15 23:25:11 +02:00
This is the main entry point for the OpenEventDatabase backend.
It initializes the Falcon application and sets up the routes.
"""
2016-05-13 21:11:33 +02:00
2025-09-15 23:25:11 +02:00
import sys
2016-04-14 17:46:30 +02:00
import falcon
2025-09-15 23:25:11 +02:00
# 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
2025-09-15 23:25:11 +02:00
# Import resources
from oedb.resources.event import event
from oedb.resources.stats import StatsResource
from oedb.resources.search import EventSearch
2025-09-15 23:54:04 +02:00
from oedb.resources.root import root
2025-09-16 00:04:53 +02:00
from oedb.resources.demo import demo
from oedb.resources.event_form import event_form
2025-09-15 23:25:11 +02:00
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()
])
2025-09-15 23:25:11 +02:00
# 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")
2025-09-15 23:54:04 +02:00
app.add_route('/', root) # Handle root requests
app.add_route('/event/search', event_search) # Handle event search requests
2025-09-15 23:25:11 +02:00
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
2025-09-16 00:04:53 +02:00
app.add_route('/demo', demo) # Handle demo page requests
app.add_route('/demo/add', event_form) # Handle event submission form
2025-09-16 01:01:32 +02:00
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
2025-09-16 01:09:20 +02:00
app.add_route('/demo/edit/{id}', demo, suffix='edit') # Handle event editing page
2025-09-21 12:27:00 +02:00
app.add_route('/demo/traffic', demo, suffix='traffic') # Handle traffic jam reporting page
2025-09-21 13:35:01 +02:00
app.add_route('/demo/view-events', demo, suffix='view_events') # Handle view saved events page
2025-09-15 23:25:11 +02:00
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
2025-09-18 19:09:25 +02:00
logger.info(" -------------- Starting server on http://127.0.0.1:8080 ------------")
2025-09-15 23:25:11 +02:00
waitress.serve(app, host='127.0.0.1', port=8080)