diff --git a/build/lib/thsf/__init__.py b/build/lib/thsf/__init__.py deleted file mode 100644 index c94fa12..0000000 --- a/build/lib/thsf/__init__.py +++ /dev/null @@ -1,188 +0,0 @@ -import re -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 -from thsf.navbar import Navbar - - -# ------------------------------------------------------------------------------ -# -- 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() - navbar = Navbar(config=app.local_config["navbar"]) -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')) - -def get_slots(): - return backend.get(endpoint=f"events/{app.local_config['pretalx']['event']}/schedules/{app.local_config['pretalx']['schedule']}").json() - -# ------------------------------------------------------------------------------ -# -- Custom filters -# ------------------------------------------------------------------------------ -@app.template_filter('date2dmyhm') -def date2dmyhm(date): - splitted_date = date.split("-") - splitted_time = splitted_date[2].split("T")[1].split(":") - year, month, day = (splitted_date[0], - splitted_date[1], - splitted_date[2].split("T")[0]) - hour, minutes = (splitted_time[0], splitted_time[1].split("+")[0]) - return f"{day}/{month} {hour}:{minutes}" - -@app.template_filter('date2dayclass') -def date2dayclass(date): - classes = {"26/05": "bg1", - "27/05": "bg2", - "28/05": "bg3",} - splitted_date = date.split("-") - month, day = (splitted_date[1], - splitted_date[2].split("T")[0]) - return classes[f"{day}/{month}"] - -@app.template_filter('toicon') -def date2dmyhm(slot_type): - slot_types = {"Projection": "fa-solid fa-film", - "Presentation Courte": "fa-solid fa-person-chalkboard", - "DJ Set": "fa-solid fa-guitar", - "Concert": "fa-solid fa-guitar", - "Présentation": "fa-solid fa-person-chalkboard", - "Table Ronde": "fa-solid fa-users-line", - "Atelier": "fa-solid fa-screwdriver-wrench", - "Exposition": "fa-solid fa-palette"} - return slot_types[slot_type] - -# ------------------------------------------------------------------------------ -# -- 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", - navbar=navbar.get_from_page(page="/")) - -@app.route('/planning', methods=['GET']) -def planning(): - slots = get_slots() - return render_template("planning.html", - slots=sorted(slots["slots"], - key=lambda slot: slot["slot"]["start"]), - navbar=navbar.get_from_page(page="/planning")) - -@app.route('/place', methods=['GET']) -def place(): - return render_template("index.html", - navbar=navbar.get_from_page(page="/place")) - -@app.route('/food', methods=['GET']) -def food(): - return render_template("index.html", - navbar=navbar.get_from_page(page="/food")) - -@app.route('/goodies', methods=['GET']) -def goodies(): - return render_template("goodies.html", - navbar=navbar.get_from_page(page="/goodies")) - -@app.route('/concerts', methods=['GET']) -def concerts(): - slots = get_slots() - return render_template("planning.html", - slots=sorted(slots["slots"], - key=lambda slot: slot["slot"]["start"]), - navbar=navbar.get_from_page(page="/concerts"), - filter=["concerts", "dj set"]) - -@app.route('/workshops', methods=['GET']) -def workshops(): - slots = get_slots() - return render_template("planning.html", - slots=sorted(slots["slots"], - key=lambda slot: slot["slot"]["start"]), - navbar=navbar.get_from_page(page="/workshops"), - filter=["workshop"]) - -@app.route('/screenings', methods=['GET']) -def screenings(): - slots = get_slots() - return render_template("planning.html", - slots=sorted(slots["slots"], - key=lambda slot: slot["slot"]["start"]), - navbar=navbar.get_from_page(page="/screenings"), - filter=["screening"]) - -@app.route('/discussions', methods=['GET']) -def discussions(): - slots = get_slots() - return render_template("planning.html", - slots=sorted(slots["slots"], - key=lambda slot: slot["slot"]["start"]), - navbar=navbar.get_from_page(page="/discussions"), - filter=["panel discussion"]) - -@app.route('/exhibitions', methods=['GET']) -def exhibitions(): - slots = get_slots() - return render_template("planning.html", - slots=sorted(slots["slots"], - key=lambda slot: slot["slot"]["start"]), - navbar=navbar.get_from_page(page="/exhibitions"), - filter=["exhibition"]) - -@app.route('/talks', methods=['GET']) -def talks(): - slots = get_slots() - return render_template("planning.html", - slots=sorted(slots["slots"], - key=lambda slot: slot["slot"]["start"]), - navbar=navbar.get_from_page(page="/talks"), - filter=["talk", "light talk"]) - - -# ------------------------------------------------------------------------------ -# -- 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 deleted file mode 100644 index 1eb615d..0000000 --- a/build/lib/thsf/backend/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -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/navbar/__init__.py b/build/lib/thsf/navbar/__init__.py deleted file mode 100644 index 605c6ee..0000000 --- a/build/lib/thsf/navbar/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -class Navbar: - def __init__(self, config): - self.config = config - - def get_from_page(self, page): - return [item for item in self.config["items"] if item["url"] != page] diff --git a/build/lib/thsf/schedule/__init__.py b/build/lib/thsf/schedule/__init__.py deleted file mode 100644 index adba87e..0000000 --- a/build/lib/thsf/schedule/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -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 deleted file mode 100644 index 00daac7..0000000 --- a/build/lib/thsf/static/css/planning.css +++ /dev/null @@ -1,197 +0,0 @@ -#schedule { - display: flex; - flex-direction: column; - justify-content: start; - align-items: flex-start; - align-content: flex-start; - margin-bottom: 5em; -} - -.slot { - display: flex; - flex: 1; - justify-content: center; - text-align: center; - flex-direction: row; - margin: 0.3em; - font-size: 2em; - width: 22em; -} - -.slot_info, -.slot_info_buttons { - display: flex; - flex-direction: row; - align-content: flex-start; -} - -.metadata, .data { - display: flex; - flex-direction: column; - justify-content: start; - align-content: flex-start; - padding: 0.5em; - border-style: solid; -} - -.metadata { - width: 7.333em; - border-radius: 10px 0 0 10px; - color: var(--main-color); - font-family: pfdintextcompprothin; - border-width: 1px 0 0px 1px; - text-align: left; -} - -.data { - width: 14.666em; - background-color: var(--main-color); - color: var(--alt-main-color); - border-color: var(--main-color); - border-width: 1px 1px 1px 0; - font-family: pfdintextcompprothin; - text-align: left; -} - -.metadata > .slot_info_buttons > .button, -.metadata > .slot_info_buttons > .slot_info > .button { - font-size: 1em; - margin-right: 0.3em; -} - -.title { - font-family: pfdintextcompprothin; - font-weight: bold; - margin-bottom: 0.5em; -} - -.speakers { - font-family: pfdintextcompprothin; - font-weight: bold; - margin-bottom: 0.2em; -} - -.speaker { - position: relative; - display: inline-block; -} - -.speaker .details { - visibility: hidden; - background-color: var(--main-color); - color: var(--alt-main-color); - text-align: left; - padding: 1em; - border-radius: 6px; - position: absolute; - z-index: 1; - bottom: 0; - left: 0; - opacity: 0; - transition: opacity 1s; - transform: translateY(102%); - overflow-y: auto; - border-style: solid; - border-color: var(--alt-main-color); - border-width: 1px; -} - -.speaker .details::after { - content: ""; - position: relative; - margin-left: -5px; - border-width: 5px; -} - -.speaker:hover .details { - visibility: visible; - opacity: 1; - font-size: 0.7em; - padding: 0.2em; -} - -.speaker > .details > img, -.abstract > img { - max-width: 200px; - max-height: 200px; - float: left; - margin: 0 0.5em 0.5em 0; -} - -.speaker > .details > p { - text-align: justify; - font-size: 0.5em; -} - -.slot_info { - position: relative; - display: inline-block; -} - -.slot_info .details { - visibility: hidden; - background-color: var(--main-color); - color: var(--alt-main-color); - text-align: left; - padding: 1em; - border-radius: 6px; - position: absolute; - z-index: 1; - bottom: 0; - left: 0; - opacity: 0; - transition: opacity 1s; - transform: translateX(-2em) translateY(102%); - width: 30em; - overflow-y: auto; - border-style: solid; - border-color: var(--alt-main-color); - border-width: 1px; -} - -.slot_info .details > .description { - margin-top: 1em; -} - -.slot_info .details::after { - content: ""; - position: relative; - margin-left: -5px; - border-width: 5px; -} - -.slot_info:hover .details { - visibility: visible; - opacity: 1; - font-size: 0.7em; - padding: 0.2em; -} - -.slot_info > .details > img, -.abstract > img { - max-width: 200px; - max-height: 200px; - float: left; - margin: 0 0.5em 0.5em 0; -} - -.slot_info > .details > p { - text-align: justify; - font-size: 0.5em; -} - -.abstract > p { - text-align: justify; - font-size: 1em; -} - -.data > .details { - font-family: pfdintextcompprothin; - font-weight: bold; - margin-bottom: 0.2em; - font-size: 0.8em; -} - -.data > .resources > .resource > a { - color: var(--main-bg-color); -} diff --git a/build/lib/thsf/static/css/style.css b/build/lib/thsf/static/css/style.css deleted file mode 100644 index 33d0a6f..0000000 --- a/build/lib/thsf/static/css/style.css +++ /dev/null @@ -1,183 +0,0 @@ -@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; - --alt-bg-color: #E59730; - --alt2-bg-color: #9EBF43; - --alt3-bg-color: #3096E5; - --main-color: #ffffff; - --alt-main-color: #1A000D; -} - -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -body { - background-color: var(--main-bg-color); - font-family: pfdintextcomppromedium; - text-align: center; -} - -.white { - color: var(--main-color); -} - -.black { - color: var(--alt-main-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; -} - -.bg1 { - background-color: var(--alt-bg-color); - border-color: var(--alt-bg-color); -} - -.bg2 { - background-color: var(--alt2-bg-color); - border-color: var(--alt2-bg-color); -} - -.bg3 { - background-color: var(--alt3-bg-color); - border-color: var(--alt3-bg-color); -} - -a { - font-family: pfdintextcomppromedium; - font-weight: 250; - color: var(--alt-main-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: center; - align-content: center; - margin-bottom: 5em; -} - -#center_wrapper, #header_wrapper { - display: flex; - flex-direction: column; - justify-content: center; - 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; -} - -#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: 0.5em; -} - -.important { - font-family: pfdintextcomppromedium; -} - -.left { - float: left; - margin-right: 0.5em; -} - -.right { - float: right; - margin-left: 0.5em; -} - -.logo_partner { - max-width: 250px; - max-height: 250px; - margin: 1em; -} diff --git a/build/lib/thsf/static/css/tooltip.css b/build/lib/thsf/static/css/tooltip.css deleted file mode 100644 index 642d62f..0000000 --- a/build/lib/thsf/static/css/tooltip.css +++ /dev/null @@ -1,57 +0,0 @@ -.tooltip, -.slot_tooltip { - position: relative; - display: inline-block; -} - -.tooltip .tooltiptext { - visibility: hidden; - background-color: var(--main-color); - color: var(--alt-main-color); - text-align: center; - border-radius: 6px; - padding: 5px 0; - position: absolute; - z-index: 1; - bottom: 0; - left: 0; - opacity: 0; - transform: translateX(-25%) translateY(-2em); - transition: opacity 1s; -} - -.slot_tooltip .slot_tooltiptext { - visibility: hidden; - background-color: var(--main-color); - color: var(--alt-main-color); - text-align: center; - border-radius: 6px; - padding: 5px 0; - position: absolute; - z-index: 1; - bottom: 0; - left: 0; - opacity: 0; - transform: translateX(2em); - transition: opacity 1s; -} - -.tooltip .tooltiptext::after, -.slot_tooltip .slot_tooltiptext::after { - content: ""; - position: absolute; - top: 100%; - left: 50%; - margin-left: -5px; - border-width: 5px; -} - -.tooltip:hover .tooltiptext, -.slot_tooltip:hover .slot_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 deleted file mode 100644 index 1a83209..0000000 Binary files a/build/lib/thsf/static/fonts/PFDinTextCompPro-Medium.ttf and /dev/null differ diff --git a/build/lib/thsf/static/fonts/PFDinTextCompPro-Thin.ttf b/build/lib/thsf/static/fonts/PFDinTextCompPro-Thin.ttf deleted file mode 100644 index 23cc0a0..0000000 Binary files a/build/lib/thsf/static/fonts/PFDinTextCompPro-Thin.ttf and /dev/null differ diff --git a/build/lib/thsf/static/fonts/Uni Sans Bold.otf b/build/lib/thsf/static/fonts/Uni Sans Bold.otf deleted file mode 100644 index d56a006..0000000 Binary files a/build/lib/thsf/static/fonts/Uni Sans Bold.otf and /dev/null differ diff --git a/build/lib/thsf/static/fonts/Uni Sans Book.otf b/build/lib/thsf/static/fonts/Uni Sans Book.otf deleted file mode 100644 index e210e8c..0000000 Binary files a/build/lib/thsf/static/fonts/Uni Sans Book.otf and /dev/null differ diff --git a/build/lib/thsf/static/images/affiche_v1.png b/build/lib/thsf/static/images/affiche_v1.png deleted file mode 100644 index bba9baf..0000000 Binary files a/build/lib/thsf/static/images/affiche_v1.png and /dev/null differ diff --git a/build/lib/thsf/static/images/antistatik.png b/build/lib/thsf/static/images/antistatik.png deleted file mode 100644 index 0f160be..0000000 Binary files a/build/lib/thsf/static/images/antistatik.png and /dev/null differ diff --git a/build/lib/thsf/static/images/bg.png b/build/lib/thsf/static/images/bg.png deleted file mode 100644 index c6734cb..0000000 Binary files a/build/lib/thsf/static/images/bg.png and /dev/null differ diff --git a/build/lib/thsf/static/images/clutch.png b/build/lib/thsf/static/images/clutch.png deleted file mode 100644 index 4802096..0000000 Binary files a/build/lib/thsf/static/images/clutch.png and /dev/null differ diff --git a/build/lib/thsf/static/images/favicon.png b/build/lib/thsf/static/images/favicon.png deleted file mode 100755 index 15df07e..0000000 Binary files a/build/lib/thsf/static/images/favicon.png and /dev/null differ diff --git a/build/lib/thsf/static/images/logo.svg b/build/lib/thsf/static/images/logo.svg deleted file mode 100644 index c2b921e..0000000 --- a/build/lib/thsf/static/images/logo.svg +++ /dev/null @@ -1,301 +0,0 @@ - - - - diff --git a/build/lib/thsf/static/images/pretalx-header.png b/build/lib/thsf/static/images/pretalx-header.png deleted file mode 100644 index c8e3346..0000000 Binary files a/build/lib/thsf/static/images/pretalx-header.png and /dev/null differ diff --git a/build/lib/thsf/static/images/stickers.webp b/build/lib/thsf/static/images/stickers.webp deleted file mode 100644 index 2fee5df..0000000 Binary files a/build/lib/thsf/static/images/stickers.webp and /dev/null differ diff --git a/build/lib/thsf/static/images/sweatshirt.webp b/build/lib/thsf/static/images/sweatshirt.webp deleted file mode 100644 index 999a666..0000000 Binary files a/build/lib/thsf/static/images/sweatshirt.webp and /dev/null differ diff --git a/build/lib/thsf/static/images/tetalab.png b/build/lib/thsf/static/images/tetalab.png deleted file mode 100644 index 16cf624..0000000 Binary files a/build/lib/thsf/static/images/tetalab.png and /dev/null differ diff --git a/build/lib/thsf/static/images/tetaneutral.png b/build/lib/thsf/static/images/tetaneutral.png deleted file mode 100644 index 09b297d..0000000 Binary files a/build/lib/thsf/static/images/tetaneutral.png and /dev/null differ diff --git a/build/lib/thsf/static/images/totebag.webp b/build/lib/thsf/static/images/totebag.webp deleted file mode 100644 index ae5d9a8..0000000 Binary files a/build/lib/thsf/static/images/totebag.webp and /dev/null differ diff --git a/build/lib/thsf/static/images/tshirt.webp b/build/lib/thsf/static/images/tshirt.webp deleted file mode 100644 index 1b723ea..0000000 Binary files a/build/lib/thsf/static/images/tshirt.webp and /dev/null differ diff --git a/build/lib/thsf/templates/base.html b/build/lib/thsf/templates/base.html deleted file mode 100644 index 0d099bf..0000000 --- a/build/lib/thsf/templates/base.html +++ /dev/null @@ -1,73 +0,0 @@ - - -
-- Nous avons besoin de votre soutien financier pour faire du Toulouse Hacker Space Factory un événement toujours différent des autres festivals. Ainsi, comme chaque année, nous faisons venir des artistes, des associations, des conférenciers, mais cela nécessite des frais importants pour leur transport et leur hébergement. C'est pourquoi nous sollicitons votre aide pour couvrir ces coûts et garantir le succès du THSF. -
-- En contribuant financièrement au Toulouse Hacker Space Factory, vous soutenez non seulement notre événement, mais également cette communauté de passionnés qui conserve un regard différent sur la technologie. Chaque don compte, c'est pourquoi nous avons créé des lots de goodies en guise de remerciement pour votre contribution. -
-- Pour faciliter la collecte des dons et vous remercier de votre participation, nous avons mis en place une cagnote Leetchi qui nous permettra de recenser les dons et vous permettra de suivre l'évolution du financement de notre festival. -
-- - À partir de 10€, vous recevrez un lot de 4 stickers au logo de l'édition 2023 du THSF. -
-- - Pour un don de 20€ ou plus, vous recevrez un lot de 4 stickers et un T-Shirt au logo de l'édition 2023 du THSF. -
-- - À partir de 30€, vous recevrez un lot de 4 stickers, un T-Shirt et un Tote bag au logo de l'édition 2023 du THSF. -
-- - Et pour plus de 40€, vous recevrez un lot de 4 stickers, un T-Shirt, un Tote bag et un sweat-shirt estampillés du logo de l'édition 2023 du THSF. -
-- Nous sommes également conscients que la situation actuelle est particulièrement difficile. C'est pourquoi nous nous engageons à ce que toutes les sommes qui dépasseront notre objectif de financement de 2 000 € seront reversées aux caisses des grévistes de la réforme des retraites. Ainsi, votre contribution permettra également de soutenir une cause importante et de faire une différence dans la vie de ceux qui se battent pour nos droits. -
-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 !
-