app.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #!/usr/bin/env python3
  2. import requests
  3. import json
  4. import datetime
  5. from jinja2 import Environment, FileSystemLoader
  6. from flask import Flask
  7. from flask import render_template, request
  8. app = Flask(__name__)
  9. gancio_instance = 'balotta.org'
  10. template_name = 'simple'
  11. events_ep = f'https://{gancio_instance}/api/events'
  12. def day2giorno(day):
  13. days = {
  14. 'Monday': 'Lunedì',
  15. 'Tuesday': 'Martedì',
  16. 'Wednesday': 'Mercoledì',
  17. 'Thursday': 'Giovedì',
  18. 'Friday': 'Venerdì',
  19. 'Saturday': 'Sabato',
  20. 'Sunday': 'Domenica'
  21. }
  22. if day in days:
  23. return days[day]
  24. def fetch_events(api_endpoint):
  25. events = requests.get(events_ep).json()
  26. for event in events:
  27. start_dt = datetime.datetime.fromtimestamp(event['start_datetime'])
  28. start_day = f"{day2giorno(start_dt.strftime('%A'))} {start_dt.strftime('%d')}"
  29. start_hour = start_dt.strftime("%H:%M")
  30. when = f"{start_day} dalle {start_hour}"
  31. if event['end_datetime']:
  32. end_dt = datetime.datetime.fromtimestamp(event['end_datetime'])
  33. end_day = f"{day2giorno(start_dt.strftime('%A'))} {end_dt.strftime('%d')}"
  34. end_hour = end_dt.strftime("%H:%M")
  35. if event['multidate']:
  36. when = f"da {when} a {end_day}"
  37. when += " alle "
  38. when += end_hour
  39. event['when'] = when
  40. event['media'][0]['thumbnailPosition'] = f"{(event['media'][0]['focalpoint'][0] + 1) * 50}% {(event['media'][0]['focalpoint'][1] + 1) * 50}%"
  41. return events
  42. @app.route("/")
  43. def main():
  44. events = fetch_events(events_ep)
  45. return render_template('index.html', events=events)
  46. @app.route("/flyer")
  47. def flyer():
  48. relevant_events = request.args.getlist('events', type=int)
  49. events = fetch_events(events_ep)
  50. events = [ e for e in events if e['id'] in relevant_events ]
  51. return render_template(f'flyers/{template_name}.html', events=events)