diff --git a/build/lib/thsf/__init__.py b/build/lib/thsf/__init__.py
new file mode 100644
index 0000000..ca9eed4
--- /dev/null
+++ b/build/lib/thsf/__init__.py
@@ -0,0 +1,126 @@
+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.schedule import Schedule
+
+
+# ------------------------------------------------------------------------------
+# -- Configuration
+# ------------------------------------------------------------------------------
+class AppConfig:
+ """ Flask application config """
+ CONFIG_FILENAME = "config.yml"
+
+
+# ------------------------------------------------------------------------------
+# -- Application
+# ------------------------------------------------------------------------------
+logger = logging.getLogger('wsgi')
+app = Flask(__name__)
+
+
+# ------------------------------------------------------------------------------
+# -- Local configuration
+# ------------------------------------------------------------------------------
+app.config.from_object(__name__ + '.AppConfig')
+try:
+ 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"])
+ schedule = Schedule()
+except Exception as err:
+ logger.critical("[{}] {}".format(err.__class__, str(err)))
+ sys.exit(1)
+
+
+# ------------------------------------------------------------------------------
+# -- Tools
+# ------------------------------------------------------------------------------
+@app.errorhandler(404)
+def page_not_found(err):
+ return redirect(url_for('index'))
+
+
+# ------------------------------------------------------------------------------
+# -- Routes
+# ------------------------------------------------------------------------------
+@app.route('/favicon.ico', methods=['GET'])
+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():
+ 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"
+
+
+# ------------------------------------------------------------------------------
+# -- Main
+# ------------------------------------------------------------------------------
+if __name__ == '__main__':
+ app.run(host='127.0.0.1', port=5000, debug=True)
diff --git a/build/lib/thsf/backend/__init__.py b/build/lib/thsf/backend/__init__.py
new file mode 100644
index 0000000..1eb615d
--- /dev/null
+++ b/build/lib/thsf/backend/__init__.py
@@ -0,0 +1,15 @@
+import requests
+import logging
+
+class Backend:
+ def __init__(self, url, apiprefix, apikey):
+ self.url = url
+ self.apiprefix = apiprefix
+ self.apikey = apikey
+ self.session = requests.Session()
+
+ def get(self, endpoint, params=None):
+ url = f"{self.url}/{self.apiprefix}/{endpoint}"
+ headers = {"Authorization": f"Token {self.apikey}",
+ "Accept": "application/json"}
+ return self.session.get(url, params=params, headers=headers)
diff --git a/build/lib/thsf/schedule/__init__.py b/build/lib/thsf/schedule/__init__.py
new file mode 100644
index 0000000..adba87e
--- /dev/null
+++ b/build/lib/thsf/schedule/__init__.py
@@ -0,0 +1,6 @@
+class Schedule:
+ def __init__(self):
+ self.slots = list()
+
+ def set_slots(self, slots):
+ self.slots = slots
diff --git a/build/lib/thsf/static/css/planning.css b/build/lib/thsf/static/css/planning.css
new file mode 100644
index 0000000..26338bc
--- /dev/null
+++ b/build/lib/thsf/static/css/planning.css
@@ -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;
+}
diff --git a/build/lib/thsf/static/css/style.css b/build/lib/thsf/static/css/style.css
new file mode 100644
index 0000000..bfbcdb6
--- /dev/null
+++ b/build/lib/thsf/static/css/style.css
@@ -0,0 +1,156 @@
+@font-face {
+ font-family: pfdintextcomppromedium;
+ src: url(../fonts/PFDinTextCompPro-Medium.ttf);
+}
+
+@font-face {
+ font-family: pfdintextcompprothin;
+ src: url(../fonts/PFDinTextCompPro-Thin.ttf);
+}
+
+:root {
+ --main-bg-color: #e6007e;
+ --main-color: #ffffff;
+ --alt-color: #1A000D;
+}
+
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+body {
+ background-color: var(--main-bg-color);
+ font-family: pfdintextcomppromedium;
+}
+
+.white {
+ color: var(--main-color);
+}
+
+.black {
+ color: var(--alt-color);
+}
+
+.thin {
+ font-family: pfdintextcompprothin;
+}
+
+.bold {
+ font-family: pfdintextcomppromedium;
+}
+
+.button {
+ font-size: 2.5em;
+ transition-property: color;
+ transition-duration: 1s;
+}
+
+.button:hover {
+ color: var(--main-color);
+ cursor: pointer;
+}
+
+.logo {
+ width: inherit;
+}
+
+.cursor {
+ width: 0;
+ height: 0;
+ border-left: 0.75em solid transparent;
+ border-right: 0.75em solid transparent;
+ border-bottom: 0.75em solid var(--alt-color);
+}
+
+a {
+ font-family: pfdintextcomppromedium;
+ font-weight: 250;
+ color: var(--alt-color);
+ transition-property: color;
+ transition-duration: 1s;
+ text-decoration: wavy;
+}
+
+a:hover {
+ color: var(--main-color);
+ cursor: pointer;
+}
+
+#main_wrapper {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: flex-start;
+ align-content: flex-start;
+ margin-bottom: 5em;
+}
+
+#center_wrapper, #header_wrapper {
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: center;
+}
+
+#header {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ gap: 0;
+ text-align: center;
+ font-size: 9.75em;
+ font-weight: bold;
+ padding: 0;
+}
+
+#header > span {
+ margin: 0;
+}
+
+#subheader {
+ margin: -1em 0 0 0;
+ font-size: 3.47em;
+}
+
+#place {
+ margin: 0;
+ font-size: 2.145em;
+}
+
+#logo_wrapper {
+ margin-top: 1em;
+ width: 40em;
+}
+
+#navbar_wrapper {
+ position: fixed;
+ bottom: 0;
+ padding: 1em 0;
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+ gap: 2em;
+ background-color: var(--main-bg-color);
+ width: 100vw;
+}
+
+#cursorbar {
+ margin-top: 1em;
+}
+
+#blah {
+ margin: 2em 0 2em;
+ font-size: 2em;
+ font-family: pfdintextcompprothin;
+ color: var(--main-color);
+ width: 20em;
+ text-align:justify;
+ text-justify:inter-word;
+}
+
+#blah > p, blah.h2 {
+ margin-top: 1em;
+}
diff --git a/build/lib/thsf/static/css/tooltip.css b/build/lib/thsf/static/css/tooltip.css
new file mode 100644
index 0000000..c1204fc
--- /dev/null
+++ b/build/lib/thsf/static/css/tooltip.css
@@ -0,0 +1,36 @@
+.tooltip {
+ position: relative;
+ display: inline-block;
+}
+
+.tooltip .tooltiptext {
+ visibility: hidden;
+ background-color: var(--main-color);
+ color: var(--alt-color);
+ text-align: center;
+ border-radius: 6px;
+ padding: 5px 0;
+ position: absolute;
+ z-index: 1;
+ bottom: 125%;
+ left: 50%;
+ margin-left: -60px;
+ opacity: 0;
+ transition: opacity 1s;
+}
+
+.tooltip .tooltiptext::after {
+ content: "";
+ position: absolute;
+ top: 100%;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 5px;
+}
+
+.tooltip:hover .tooltiptext {
+ visibility: visible;
+ opacity: 1;
+ font-size: 0.7em;
+ padding: 0.2em;
+}
diff --git a/build/lib/thsf/static/fonts/PFDinTextCompPro-Medium.ttf b/build/lib/thsf/static/fonts/PFDinTextCompPro-Medium.ttf
new file mode 100644
index 0000000..1a83209
Binary files /dev/null and b/build/lib/thsf/static/fonts/PFDinTextCompPro-Medium.ttf differ
diff --git a/build/lib/thsf/static/fonts/PFDinTextCompPro-Thin.ttf b/build/lib/thsf/static/fonts/PFDinTextCompPro-Thin.ttf
new file mode 100644
index 0000000..23cc0a0
Binary files /dev/null and b/build/lib/thsf/static/fonts/PFDinTextCompPro-Thin.ttf differ
diff --git a/build/lib/thsf/static/fonts/Uni Sans Bold.otf b/build/lib/thsf/static/fonts/Uni Sans Bold.otf
new file mode 100644
index 0000000..d56a006
Binary files /dev/null and b/build/lib/thsf/static/fonts/Uni Sans Bold.otf differ
diff --git a/build/lib/thsf/static/fonts/Uni Sans Book.otf b/build/lib/thsf/static/fonts/Uni Sans Book.otf
new file mode 100644
index 0000000..e210e8c
Binary files /dev/null and b/build/lib/thsf/static/fonts/Uni Sans Book.otf differ
diff --git a/build/lib/thsf/static/images/affiche_v1.png b/build/lib/thsf/static/images/affiche_v1.png
new file mode 100644
index 0000000..bba9baf
Binary files /dev/null and b/build/lib/thsf/static/images/affiche_v1.png differ
diff --git a/build/lib/thsf/static/images/bg.png b/build/lib/thsf/static/images/bg.png
new file mode 100644
index 0000000..c6734cb
Binary files /dev/null and b/build/lib/thsf/static/images/bg.png differ
diff --git a/build/lib/thsf/static/images/favicon.png b/build/lib/thsf/static/images/favicon.png
new file mode 100755
index 0000000..15df07e
Binary files /dev/null and b/build/lib/thsf/static/images/favicon.png differ
diff --git a/build/lib/thsf/static/images/logo.svg b/build/lib/thsf/static/images/logo.svg
new file mode 100644
index 0000000..c2b921e
--- /dev/null
+++ b/build/lib/thsf/static/images/logo.svg
@@ -0,0 +1,301 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/lib/thsf/static/images/pretalx-header.png b/build/lib/thsf/static/images/pretalx-header.png
new file mode 100644
index 0000000..c8e3346
Binary files /dev/null and b/build/lib/thsf/static/images/pretalx-header.png differ
diff --git a/build/lib/thsf/templates/base.html b/build/lib/thsf/templates/base.html
new file mode 100644
index 0000000..4898cfd
--- /dev/null
+++ b/build/lib/thsf/templates/base.html
@@ -0,0 +1,77 @@
+
+
+
+ THSF 2023: S/Extraire
+
+
+
+
+
+
+ {% block headers %}
+ {% endblock %}
+
+
+
+{% block content %}
+{% endblock %}
+
+
+ Programme
+
+
+ Le lieu
+
+
+ Restauration
+
+
+ Goodies
+
+
+ Concerts et DJ sets
+
+
+ Ateliers
+
+
+ Projections
+
+
+ Tables rondes
+
+
+ Expositions
+
+
+ Conférences
+
+
+
+
diff --git a/build/lib/thsf/templates/index.html b/build/lib/thsf/templates/index.html
new file mode 100644
index 0000000..76ff3c3
--- /dev/null
+++ b/build/lib/thsf/templates/index.html
@@ -0,0 +1,36 @@
+{% extends "base.html" %}
+{% block content %}
+
+
+
+
+
+
+
+
Le T.H.S.F est enfin de retour !
+
Nous vous invitons à passer un week-end de 3 jours à Utopia Borderouge Toulouse pour partager avec vous nos projets, nos réflexions, nos performances, nos poésies et nos doutes sur la technologie.
+
+
Après avoir été soutenu et accueilli pendant 10 ans par Mix'Art Myrys , le Toulouse HackerSpace Factory (T.H.S.F) se tient désormais dans un autre lieu où l'utopie nécessaire est inscrite programme.
+
+
Cette année nous mettrons en avant des réflexions sur l'extractivisme des ressources planétaires, des données, de la valeur travail.
+
+
Comme toujours, notre objectif est de créer un festival qui poétise les bifurcations de nos idées communes et qui réinvente le sens de certains schémas imposés par notre époque. Rejoignez-nous pour une expérience enrichissante et pleine de surprises !
+
+
+
+{% endblock %}
diff --git a/build/lib/thsf/templates/planning.html b/build/lib/thsf/templates/planning.html
new file mode 100644
index 0000000..a4199f8
--- /dev/null
+++ b/build/lib/thsf/templates/planning.html
@@ -0,0 +1,44 @@
+{% extends "base.html" %}
+{% block headers %}
+
+{% endblock %}
+{% block content %}
+
+
+ {% for slot in slots %}
+
+
+
+
{{slot["abstract"]}}
+
{{slot["description"]}}
+
+
+ {% for resource in slot["resources"] %}
+
+ {% endfor %}
+
+
+
+ {% endfor %}
+
+
+{% endblock %}
diff --git a/setup.cfg b/setup.cfg
index da00782..0f2491c 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -23,6 +23,7 @@ install_requires =
gunicorn
pyYAML
requests
+ pandas
[options.packages.find]
where = src
diff --git a/src/thsf.egg-info/PKG-INFO b/src/thsf.egg-info/PKG-INFO
new file mode 100644
index 0000000..0bc80e6
--- /dev/null
+++ b/src/thsf.egg-info/PKG-INFO
@@ -0,0 +1,54 @@
+Metadata-Version: 2.1
+Name: thsf
+Version: 0.0.1
+Summary: "THSF website"
+Home-page: https://git.tetalab.org/tetalab/thsf.net
+Author: Doug Le Tough
+Author-email: doug@redatomik.org
+License: UNKNOWN
+Platform: UNKNOWN
+Classifier: Programming Language :: Python :: 3
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Operating System :: OS Independent
+Requires-Python: >=3.7
+Description-Content-Type: text/markdown
+Provides-Extra: dev
+
+# THSF.NET
+
+Le site du THSF
+
+## Modifier le site
+
+Il n'est **pas possible** de pousser directement des modifications sur la branche `master`.
+
+Pour modifier le site, il est nécessaire de créer une branche spécifique et d'y pousser vos modifications.
+
+## Publication du site
+
+Lorsque vous êtes satisfaits de vos modifications, vous pouvez créer [une demande d'ajout](https://git.tetalab.org/tetalab/thsf.net/pulls) de votre branche sur la branche `master`.
+
+Lorsque la demande de fusion sera acceptée (vous pouvez auto-accepter vos demandes de fusion), vos modifications seront automatiquement publiées sur [le site du THSF](https://www.thsf.net).
+
+### Personnalisation de la publication
+
+Afin de rendre le processus plus souple, il est possible de personnaliser la livraison en plaçant **à la racine du dépôt** un fichier `Makefile` contenant une cible `all` qui sera systématiquement exécutée.
+
+C'est dans cette cible `all` que vous pourrez mettre toutes vos commandes personnalisées, typiquement l'installation de modules `python`, etc.
+
+Le processus de publication est le suivant:
+
+1. Le site actuellement en production est **supprimé**
+
+2. La branche `master` du présent dépôt est cloné sur le serveur hébergeant le site du **THSF**
+
+3. Si un fichier `Makefile` se trouve **à la racine du dépôt**, la cible `all` (i.e: `make all`) est automatiquement exécutée.
+
+
+## Contrôle de qualité et tests
+
+Aucun contrôle de qualité ou de tests n'est mis en place. Vous êtes seuls sur le coup.
+
+Soyez responsable et **testez vos modifications sur votre machine locale avant de fusionner votre branche** sur la branche `master`.
+
+
diff --git a/src/thsf.egg-info/SOURCES.txt b/src/thsf.egg-info/SOURCES.txt
new file mode 100644
index 0000000..3d066dd
--- /dev/null
+++ b/src/thsf.egg-info/SOURCES.txt
@@ -0,0 +1,28 @@
+MANIFEST.in
+README.md
+pyproject.toml
+setup.cfg
+setup.py
+src/thsf/__init__.py
+src/thsf.egg-info/PKG-INFO
+src/thsf.egg-info/SOURCES.txt
+src/thsf.egg-info/dependency_links.txt
+src/thsf.egg-info/requires.txt
+src/thsf.egg-info/top_level.txt
+src/thsf/backend/__init__.py
+src/thsf/schedule/__init__.py
+src/thsf/static/css/planning.css
+src/thsf/static/css/style.css
+src/thsf/static/css/tooltip.css
+src/thsf/static/fonts/PFDinTextCompPro-Medium.ttf
+src/thsf/static/fonts/PFDinTextCompPro-Thin.ttf
+src/thsf/static/fonts/Uni Sans Bold.otf
+src/thsf/static/fonts/Uni Sans Book.otf
+src/thsf/static/images/affiche_v1.png
+src/thsf/static/images/bg.png
+src/thsf/static/images/favicon.png
+src/thsf/static/images/logo.svg
+src/thsf/static/images/pretalx-header.png
+src/thsf/templates/base.html
+src/thsf/templates/index.html
+src/thsf/templates/planning.html
\ No newline at end of file
diff --git a/src/thsf.egg-info/dependency_links.txt b/src/thsf.egg-info/dependency_links.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/src/thsf.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/src/thsf.egg-info/requires.txt b/src/thsf.egg-info/requires.txt
new file mode 100644
index 0000000..2ca4830
--- /dev/null
+++ b/src/thsf.egg-info/requires.txt
@@ -0,0 +1,18 @@
+flask
+gunicorn
+pyYAML
+requests
+pandas
+
+[dev]
+twine
+build
+wheel>=0.37.0
+flake8>=4.0.1
+flake8-breakpoint>=1.1.0
+flake8-builtins>=1.5.3
+flake8-print>=4.0.0
+flake8-return>=1.1.3
+pep8-naming>=0.8.2
+setuptools>=60.9.2
+pylint>=2.12.2
diff --git a/src/thsf.egg-info/top_level.txt b/src/thsf.egg-info/top_level.txt
new file mode 100644
index 0000000..95f0ebd
--- /dev/null
+++ b/src/thsf.egg-info/top_level.txt
@@ -0,0 +1 @@
+thsf
diff --git a/src/thsf/__init__.py b/src/thsf/__init__.py
index e77af2c..ca9eed4 100644
--- a/src/thsf/__init__.py
+++ b/src/thsf/__init__.py
@@ -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"
diff --git a/src/thsf/backend/__init__.py b/src/thsf/backend/__init__.py
index 86a51c9..1eb615d 100644
--- a/src/thsf/backend/__init__.py
+++ b/src/thsf/backend/__init__.py
@@ -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)
diff --git a/src/thsf/schedule/__init__.py b/src/thsf/schedule/__init__.py
new file mode 100644
index 0000000..adba87e
--- /dev/null
+++ b/src/thsf/schedule/__init__.py
@@ -0,0 +1,6 @@
+class Schedule:
+ def __init__(self):
+ self.slots = list()
+
+ def set_slots(self, slots):
+ self.slots = slots
diff --git a/src/thsf/static/css/planning.css b/src/thsf/static/css/planning.css
new file mode 100644
index 0000000..26338bc
--- /dev/null
+++ b/src/thsf/static/css/planning.css
@@ -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;
+}
diff --git a/src/thsf/templates/planning.html b/src/thsf/templates/planning.html
index 0630c4f..a4199f8 100644
--- a/src/thsf/templates/planning.html
+++ b/src/thsf/templates/planning.html
@@ -1,18 +1,44 @@
{% extends "base.html" %}
{% block headers %}
-
+
{% endblock %}
-
{% block content %}
-