eventcally/views/api.py
2020-10-02 12:47:09 +02:00

59 lines
1.8 KiB
Python

from app import app
from models import EventDate, Event, AdminUnit
from dateutils import today
from flask import jsonify
from jsonld import get_sd_for_event_date
from services.event import get_event_dates_query
from services.event_search import EventSearchParams
from services.organizer import get_event_places
@app.route("/api/events")
def api_events():
dates = EventDate.query.join(Event).filter(EventDate.start >= today).filter(Event.verified).order_by(EventDate.start).all()
return json_from_event_dates(dates)
@app.route("/api/event_dates")
def api_event_dates():
params = EventSearchParams()
params.load_from_request()
dates = get_event_dates_query(params).paginate()
return json_from_event_dates(dates.items)
@app.route("/api/<string:au_short_name>/event_dates")
def api_infoscreen(au_short_name):
admin_unit = AdminUnit.query.filter(AdminUnit.short_name == au_short_name).first_or_404()
params = EventSearchParams()
params.load_from_request()
params.admin_unit_id = admin_unit.id
dates = get_event_dates_query(params).paginate()
return json_from_event_dates(dates.items)
@app.route("/api/organizer/<int:id>/event_places")
def api_event_places(id):
places = get_event_places(id)
result = list()
for place in places:
item = {}
item["id"] = place.id
item["name"] = place.name
result.append(item)
return jsonify(result)
def json_from_event_dates(dates):
structured_events = list()
for event_date in dates:
structured_event = get_sd_for_event_date(event_date)
structured_event.pop('@context', None)
structured_events.append(structured_event)
result = {}
result["@context"] = "https://schema.org"
result["@type"] = "Project"
result["name"] = "Prototyp"
result['event'] = structured_events
return jsonify(result)