238 lines
6.8 KiB
Python
238 lines
6.8 KiB
Python
from flask import Flask
|
|
from flask import render_template, send_file, request, redirect, url_for
|
|
import typst
|
|
import json
|
|
from io import BytesIO
|
|
import random
|
|
|
|
from pprint import pprint
|
|
|
|
app = Flask(__name__)
|
|
|
|
compiler = typst.Compiler(font_paths=["fonts/"])
|
|
|
|
@app.route("/")
|
|
def index():
|
|
cours_base = [
|
|
# ALGEBRE
|
|
{
|
|
"ue": "algebre",
|
|
"name": "Algèbre",
|
|
"color": "#ff80b3",
|
|
"cm": [
|
|
{
|
|
"prof": "Jean-Benoît Bost",
|
|
"day": 0, "start": "08:15", "end": "10:15", "room": "Amphi Yoccoz",
|
|
},
|
|
{
|
|
"prof": "Jean-Benoît Bost",
|
|
"day": 3, "start": "14:00", "end": "16:00", "room": "Amphi Yoccoz",
|
|
},
|
|
],
|
|
"td": [
|
|
{
|
|
"group": 1,
|
|
"prof": "Kévin Destagnol",
|
|
"slots": [
|
|
{"day": 0, "start": "10:30", "end": "13:00", "room": "0A2"},
|
|
{"day": 3, "start": "16:15", "end": "18:45", "room": "0A2"},
|
|
],
|
|
},
|
|
{
|
|
"group": 2,
|
|
"prof": "Pierre Lorenzon",
|
|
"slots": [
|
|
{"day": 0, "start": "10:30", "end": "13:00", "room": "0A7"},
|
|
{"day": 3, "start": "16:15", "end": "18:45", "room": "0E1"},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
# ANALYSE
|
|
{
|
|
"ue": "analyse",
|
|
"name": "Analyse",
|
|
"color": "#80ffcc",
|
|
"cm": [
|
|
{
|
|
"prof": "Blanche Buet",
|
|
"day": 0, "start": "14:00", "end": "16:00", "room": "OA2",
|
|
},
|
|
{
|
|
"prof": "Blanche Buet",
|
|
"day": 2, "start": "08:15", "end": "10:15", "room": "OA1",
|
|
},
|
|
],
|
|
"td": [
|
|
{
|
|
"group": 1,
|
|
"prof": "Frédéric Valet",
|
|
"slots": [
|
|
{"day": 0, "start": "16:15", "end": "18:45", "room": "0A2"},
|
|
{"day": 2, "start": "10:30", "end": "13:00", "room": "0A1"},
|
|
],
|
|
},
|
|
{
|
|
"group": 2,
|
|
"prof": "Sebastian Bechtel",
|
|
"slots": [
|
|
{"day": 0, "start": "16:15", "end": "18:45", "room": "0A7"},
|
|
{"day": 2, "start": "10:30", "end": "13:00", "room": "0D1"},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
# PROBAS
|
|
{
|
|
"ue": "probas",
|
|
"name": "Probabilités",
|
|
"color": "#ffcc99",
|
|
"cm": [
|
|
{
|
|
"prof": "Pierre-Loïc Méliot",
|
|
"day": 1, "start": "08:15", "end": "10:15", "room": "Amphi Yoccoz",
|
|
},
|
|
{
|
|
"prof": "Pierre-Loïc Méliot",
|
|
"day": 3, "start": "08:15", "end": "10:15", "room": "Amphi Yoccoz",
|
|
},
|
|
],
|
|
"td": [
|
|
{
|
|
"group": 1,
|
|
"prof": "Sophie Lemaire",
|
|
"slots": [
|
|
{"day": 1, "start": "10:30", "end": "13:00", "room": "0D1"},
|
|
{"day": 3, "start": "10:30", "end": "13:00", "room": "0E1"},
|
|
],
|
|
},
|
|
{
|
|
"group": 2,
|
|
"prof": "A. Legrand",
|
|
"slots": [
|
|
{"day": 1, "start": "10:30", "end": "13:00", "room": "Amphi Yoccoz"},
|
|
{"day": 3, "start": "10:30", "end": "13:00", "room": "0A2"},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
]
|
|
|
|
|
|
cours_autres = [
|
|
{
|
|
"ue": "crypto",
|
|
"name": "Cryptographie",
|
|
"color": "#e6b3ff",
|
|
"atoms": [
|
|
{
|
|
"label": "CM",
|
|
"prof": "Stéphane Fischler",
|
|
"day": 1,
|
|
"start": "14:00",
|
|
"end": "16:00",
|
|
"room": "0A2",
|
|
},
|
|
{
|
|
"label": "TP",
|
|
"prof": "Chimène Fischler",
|
|
"day": 4,
|
|
"start": "10:30",
|
|
"end": "12:30",
|
|
"room": "0E10",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"ue": "geo_alea",
|
|
"name": "Géométrie aléatoire",
|
|
"color": "#ccb3ff",
|
|
"atoms": [
|
|
{
|
|
"label": "CM",
|
|
"prof": "N. Curien",
|
|
"day": 1,
|
|
"start": "16:15",
|
|
"end": "18:15",
|
|
"room": "1A7",
|
|
},
|
|
{
|
|
"label": "TP",
|
|
"prof": "A. Legrand",
|
|
"day": 4,
|
|
"start": "08:15",
|
|
"end": "10:15",
|
|
"room": "0D10",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"ue": "edp_num",
|
|
"name": "EDP numériques",
|
|
"color": "#ccebff",
|
|
"atoms": [
|
|
{
|
|
"label": "CM",
|
|
"prof": "B. Maury",
|
|
"day": 1,
|
|
"start": "16:15",
|
|
"end": "18:15",
|
|
"room": "0A5",
|
|
},
|
|
{
|
|
"label": "TP",
|
|
"prof": "B. Graille",
|
|
"day": 4,
|
|
"start": "08:15",
|
|
"end": "10:15",
|
|
"room": "0E10",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"ue": "topalg",
|
|
"name": "Topologie algébrisée",
|
|
"color": "#a366ff",
|
|
"atoms": [
|
|
{
|
|
"label": "CI",
|
|
"prof": "Patrick Massot",
|
|
"day": 2,
|
|
"start": "14:00",
|
|
"end": "18:15",
|
|
"room": "0A1",
|
|
},
|
|
],
|
|
},
|
|
]
|
|
|
|
return render_template('index.html', cours_base=cours_base, cours_autres=cours_autres)
|
|
|
|
|
|
@app.route("/favicon.ico")
|
|
def favicon():
|
|
return send_file("favicon.ico")
|
|
|
|
@app.route('/edt.pdf', methods=["POST"])
|
|
def generate_pdf():
|
|
data = json.loads(request.data)
|
|
pprint(data)
|
|
|
|
sys_inputs = {"data": json.dumps(data)}
|
|
|
|
pdf_file = BytesIO(compiler.compile(input="templates/edt.typ", sys_inputs=sys_inputs))
|
|
|
|
return send_file(pdf_file, download_name="edt.pdf")
|
|
|
|
@app.route('/edt.svg', methods=["POST"])
|
|
def generate_svg():
|
|
data = json.loads(request.data)
|
|
pprint(data)
|
|
|
|
sys_inputs = {"data": json.dumps(data)}
|
|
|
|
pdf_file = BytesIO(compiler.compile(input="templates/edt.typ", sys_inputs=sys_inputs, format="svg"))
|
|
|
|
return send_file(pdf_file, download_name="edt.svg")
|
|
|