wip: planning

This commit is contained in:
Michael Costa
2023-04-09 06:17:34 +11:00
parent 27a6205595
commit a76b8e034a
30 changed files with 1078 additions and 22 deletions

View File

@@ -1,9 +1,11 @@
import sys
import json
import logging
from logging import config
import yaml
from flask import Flask, render_template, redirect, request, url_for
# from thsf.backend import Backend
from thsf.backend import Backend
from thsf.schedule import Schedule
# ------------------------------------------------------------------------------
@@ -26,14 +28,15 @@ app = Flask(__name__)
# ------------------------------------------------------------------------------
app.config.from_object(__name__ + '.AppConfig')
try:
with open(app.config["CONFIG_FILENAME"], "r") as local_config_file:
with open(app.config["CONFIG_FILENAME"], mode="r", encoding="utf-8") as local_config_file:
app.local_config = yaml.load(local_config_file, Loader=yaml.SafeLoader)
app.config["SECRET_KEY"] = app.local_config["app"]["secret_key"]
app.config["LANGUAGES"] = app.local_config["app"]["languages"]
config.dictConfig(app.local_config["log"])
# backend = Backend(url=app.local_config["pretalx"]["url"],
# apiprefix=app.local_config["pretalx"]["apiprefix"],
# apikey=app.local_config["pretalx"]["apikey"])
backend = Backend(url=app.local_config["pretalx"]["url"],
apiprefix=app.local_config["pretalx"]["apiprefix"],
apikey=app.local_config["pretalx"]["apikey"])
schedule = Schedule()
except Exception as err:
logger.critical("[{}] {}".format(err.__class__, str(err)))
sys.exit(1)
@@ -54,43 +57,63 @@ def page_not_found(err):
def favicon():
return redirect(url_for('static', filename='images/favicon.png'))
@app.route('/', methods=['GET'])
def index():
return render_template("index.html")
@app.route('/planning', methods=['GET'])
def planning():
backend.get(endpoint=f"events/{app.local_config['pretalx']['event']}/schedules/{app.local_config['pretalx']['schedule']}")
return "planning"
slots = backend.get(endpoint=f"events/{app.local_config['pretalx']['event']}/schedules/{app.local_config['pretalx']['schedule']}").json()
# schedule.set_slots(slots["slots"])
return render_template("planning.html", slots=slots["slots"])
# return "toto"
# for slot in sched["slots"]:
# schedule.add_slot(slot)
# return schedule.df.to_html()
@app.route('/concerts', methods=['GET'])
def concerts():
return "concerts"
@app.route('/djsets', methods=['GET'])
def djsets():
return "djsets"
@app.route('/exhibitions', methods=['GET'])
def exhibitions():
return "exhibitions"
@app.route('/lighttalks', methods=['GET'])
def lighttalks():
return "lighttalks"
@app.route('/paneldiscussions', methods=['GET'])
def paneldiscussions():
return "paneldiscussions"
@app.route('/screenings', methods=['GET'])
def screenings():
return "screenings"
@app.route('/talks', methods=['GET'])
def talks():
return "talks"
@app.route('/workshops', methods=['GET'])
def workshops():
return "workshops"

View File

@@ -1,7 +1,7 @@
import requests
import logging
class Backend(url, apiprefix, apikey):
class Backend:
def __init__(self, url, apiprefix, apikey):
self.url = url
self.apiprefix = apiprefix
@@ -10,6 +10,6 @@ class Backend(url, apiprefix, apikey):
def get(self, endpoint, params=None):
url = f"{self.url}/{self.apiprefix}/{endpoint}"
headers = {f"Authorization: Token {self.apikey}"}
return self.session.get(url, **{"params": params, "headers": headers})
headers = {"Authorization": f"Token {self.apikey}",
"Accept": "application/json"}
return self.session.get(url, params=params, headers=headers)

View File

@@ -0,0 +1,6 @@
class Schedule:
def __init__(self):
self.slots = list()
def set_slots(self, slots):
self.slots = slots

View File

@@ -0,0 +1,50 @@
#schedule {
display: flex;
flex-direction: column;
justify-content: start;
align-items: flex-start;
align-content: flex-start;
margin-bottom: 5em;
}
.slot {
display: flex;
flex-direction: row;
align-items: flex-start;
align-content: flex-start;
margin: 1em;
border-radius: 5px;
border-color: var(--alt-color);
background-color: var(--main-color);
border-style: solid;
border-width: 1px;
font-size: 2em;
width: 25em;
}
.metadata {
display: flex;
flex-direction: column;
justify-content: start;
align-items: flex-start;
align-content: flex-start;
}
.data {
display: flex;
flex-direction: column;
justify-content: start;
align-items: flex-start;
align-content: flex-start;
margin-left: 2em;
}
.speaker_avatar {
height: 50px;
width: 50px;
}
.data_img {
height: 50px;
width: 50px;
}

View File

@@ -1,18 +1,44 @@
{% extends "base.html" %}
{% block headers %}
<script type="text/javascript" src="https://23.thsf.net/thsf-2023/schedule/widget/v2.en.js"></script>
<link rel="stylesheet"
href="{{ url_for('static', filename='css/planning.css') }}">
{% endblock %}
{% block content %}
<div id="thsf-schedule-wrapper">
<pretalx-schedule event-url="https://23.thsf.net/thsf-2023/" locale="fr" format="list" style="--pretalx-clr-primary: #91AE2C"></pretalx-schedule>
<noscript>
<div class="pretalx-widget">
<div class="pretalx-widget-info-message">
JavaScript is disabled in your browser. To access our schedule without JavaScript,
please <a target="_blank" href="https://23.thsf.net/thsf-2023/schedule/">click here</a>.
<div id="main_wrapper">
<div id="#schedule">
{% for slot in slots %}
<div class="slot">
<div class="metadata">
<div class="title">{{slot["title"]}}</div>
<div class="speakers">
{% for speaker in slot["speakers"] %}
<div class="speaker">
<div class="name">{{speaker["name"]}}</div>
<img class="speaker_avatar" src="{{speaker['avatar']}}"/>
<div class="speaker_biography">{{speaker["biography"]}}</div>
</div>
{% endfor %}
</div>
<div class="type">{{slot["submission_type"]["fr"]}}</div>
<div class="start">{{slot["slot"]["start"]}}</div>
<div class="duration">{{slot["duration"]}}</div>
<div class="room">{{slot["slot"]["room"]["fr"]}}</div>
<div class="locale">{{slot["content_locale"]}}</div>
</div>
</noscript>
<div class="data">
<div class="abstract">{{slot["abstract"]}}</div>
<div class="description">{{slot["description"]}}</div>
<img class="data_img" src="{{slot['image']}}"/>
<div class="resources">
{% for resource in slot["resources"] %}
<div class="resources">
<a href="{{resource['resource']}}">{{resource["description"]}}</a>
</div>
{% endfor %}
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock %}