A barebones python tool to fix the inconvenient and incorrect iCal format of the UQ timetable while still allowing subscription and auto-updating of events
https://topost.net/calfix
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.8 KiB
71 lines
1.8 KiB
from flask import Flask, flash, request, redirect, make_response |
|
|
|
from config import Config |
|
|
|
from flask_wtf import FlaskForm |
|
from wtforms import StringField, PasswordField, BooleanField, SubmitField |
|
from wtforms.validators import DataRequired |
|
|
|
app = Flask(__name__) |
|
app.config.from_object(Config) |
|
|
|
from flask_wtf import FlaskForm |
|
from wtforms import StringField, PasswordField, BooleanField, SubmitField |
|
from wtforms.validators import DataRequired |
|
|
|
class URLForm(FlaskForm): |
|
urlfield = StringField('urlfield', validators=[DataRequired()]) |
|
submit = SubmitField('Go') |
|
|
|
from flask import render_template |
|
|
|
import requests |
|
import re |
|
|
|
from reform import reformat_cal |
|
|
|
TIMETABLEURL = "https://timetable.my.uq.edu.au:443/even/rest/calendar/ical/" |
|
|
|
@app.route('/update', methods=['GET']) |
|
def get_cal(): |
|
cd = request.args.get('code') |
|
|
|
if (cd != None): |
|
print(cd) |
|
url = TIMETABLEURL + cd |
|
try: |
|
cal = reformat_cal(url) |
|
except: |
|
return redirect("/?error=fail") |
|
|
|
resp = make_response(cal) |
|
resp.headers["Content-Type"] = "text/calendar; charset=utf-8" |
|
return resp |
|
else: |
|
return redirect("/?error=fail") |
|
|
|
@app.route('/', methods=['GET', 'POST']) |
|
def hello(): |
|
form = URLForm() |
|
if form.validate_on_submit(): |
|
url = form.urlfield.data |
|
code = url.split("/")[-1] |
|
rdr = f"/calfix/update?code={code}" |
|
try: |
|
cal = reformat_cal(TIMETABLEURL + code) |
|
print(cal) |
|
flash("Download/Subscribe link") |
|
flash(rdr) |
|
except: |
|
flash("Invalid calendar link") |
|
flash("/") |
|
|
|
# return redirect(rdr) |
|
|
|
# print('url', url) |
|
# newcal = reformat_cal(url) |
|
|
|
return render_template('index.html', title='cal rewrite', form=form) |
|
|
|
if __name__ == '__main__': |
|
app.run(port=25565)
|
|
|