mirror of
https://github.com/nirvana-7777/script.service.ultimate.git
synced 2026-09-21 08:32:11 +02:00
102 lines
3.2 KiB
Python
102 lines
3.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Event-related route handlers
|
|
"""
|
|
|
|
from datetime import datetime
|
|
|
|
from bottle import request, response
|
|
from streaming_providers.base.utils import logger
|
|
|
|
|
|
def setup_events_routes(app, manager, service):
|
|
"""Setup event-related routes"""
|
|
|
|
@app.route("/api/providers/<provider>/events", method="GET")
|
|
def get_provider_events(provider):
|
|
"""
|
|
Get events from a specific provider.
|
|
|
|
Query parameters:
|
|
- start_time: Optional ISO 8601 timestamp — only return events ending after this time
|
|
- end_time: Optional ISO 8601 timestamp — only return events starting before this time
|
|
|
|
Returns:
|
|
{
|
|
"provider": "provider_name",
|
|
"events": [
|
|
{
|
|
...Event fields...
|
|
}
|
|
],
|
|
"count": 1
|
|
}
|
|
"""
|
|
try:
|
|
# Parse optional time range query parameters
|
|
start_time = None
|
|
end_time = None
|
|
|
|
start_time_str = request.params.get("start_time")
|
|
end_time_str = request.params.get("end_time")
|
|
|
|
if start_time_str:
|
|
try:
|
|
start_time = datetime.fromisoformat(start_time_str)
|
|
except ValueError:
|
|
response.status = 400
|
|
return {
|
|
"error": "Invalid start_time format",
|
|
"message": "Use ISO 8601 format, e.g. 2026-03-01T00:00:00",
|
|
}
|
|
|
|
if end_time_str:
|
|
try:
|
|
end_time = datetime.fromisoformat(end_time_str)
|
|
except ValueError:
|
|
response.status = 400
|
|
return {
|
|
"error": "Invalid end_time format",
|
|
"message": "Use ISO 8601 format, e.g. 2026-03-01T23:59:59",
|
|
}
|
|
|
|
try:
|
|
events = manager.event_ops.get_events(
|
|
provider_name=provider,
|
|
start_time=start_time,
|
|
end_time=end_time,
|
|
)
|
|
except ValueError as e:
|
|
response.status = 404
|
|
return {
|
|
"error": "Provider not found",
|
|
"message": str(e),
|
|
"provider": provider,
|
|
}
|
|
except Exception as e:
|
|
logger.error(f"Failed to get events from '{provider}': {e}")
|
|
response.status = 500
|
|
return {
|
|
"error": "Failed to get events",
|
|
"message": str(e),
|
|
"provider": provider,
|
|
}
|
|
|
|
# Serialize Event objects to dicts
|
|
serialized = [event.to_dict() for event in events]
|
|
|
|
response.status = 200
|
|
return {
|
|
"provider": provider,
|
|
"events": serialized,
|
|
"count": len(serialized),
|
|
}
|
|
|
|
except Exception as e:
|
|
logger.error(f"Unexpected error in get_provider_events: {e}")
|
|
response.status = 500
|
|
return {
|
|
"error": "Internal server error",
|
|
"message": str(e),
|
|
"provider": provider,
|
|
} |