app.py 2.5 KB

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