modular-bot-framework-for-t.../modules/auto-schedule-pro/www/index.py

166 lines
10 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import datetime
import json
import os
current_time = datetime.datetime.now()
current_week = current_time.isocalendar()[1] % 2
current_day = current_time.weekday()
current_seconds = current_week*604800 + current_day*86400 + current_time.hour*3600 + current_time.minute*60 + current_time.second
reference_time = int(current_time.strftime("%s")) - current_seconds
# baking defined schedule
raw_schedule = json.loads( open("../schedule.json").read() )
schedule = {}
for day in range(len(raw_schedule)):
for i in raw_schedule[day]:
ts = day*86400 + int(i.split(":")[0])*3600 + int(i.split(":")[1])*60
new_item = dict(raw_schedule[day][i])
new_item["source"] = "schedule"
schedule[ts] = new_item
# baking additions (extra pairs)
raw_additions = json.loads( open("../additions.json").read() )
additions = {}
for day in range(len(raw_additions)):
for i in raw_additions[day]:
ts = day*86400 + int(i.split(":")[0])*3600 + int(i.split(":")[1])*60
new_item = dict(raw_additions[day][i])
new_item["source"] = "additions"
schedule[ts] = new_item
full_schedule = dict(list(schedule.items()) + list(additions.items()))
#print("test1")
#print(f"Full schedule #printout: {full_schedule}")
#print(f"Current delta_time: {current_seconds}")
p = None
next_pair_time = None
key_list = list(full_schedule.keys())
key_list.sort()
for i in key_list:
if i > current_seconds - 5400:
p = full_schedule[i]
next_pair_time = i
break
#print("test2")
if next_pair_time == None:
if len(full_schedule.keys()) > 0:
#print("test3.1")
#actual_pair_ts = reference_time + min(full_schedule.keys())
#dt_pair = datetime.datetime.fromtimestamp(actual_pair_ts)
#dt_pair_finish = datetime.datetime.fromtimestamp(actual_pair_ts + 5400)
p = full_schedule[min(full_schedule.keys())]
#print("test3.1.1")
#print("{} == 6 && {} == 1, {}".format(current_day, dt_pair.strftime('%u'), str( ((current_day + 2) == int(dt_pair.strftime("%u"))) or ((str(current_day) == "6") and (dt_pair.strftime("%u") == "1")) )))
'''
human_readable_date = ""
if ((current_day + 2) == int(dt_pair.strftime("%u"))) or ((str(current_day) == "6") and (dt_pair.strftime("%u") == "1")):
human_readable_date += "завтра "
elif current_week != int(dt_pair.strftime("%W")) % 2:
human_readable_date += "{} ".format(self.WEEKDAY_NAMES_ROD_WITH_NEXT[int(dt_pair.strftime("%u")) - 1])
elif current_day != (int(dt_pair.strftime("%u")) - 1):
human_readable_date += "{} ".format(self.WEEKDAY_NAMES_ROD_WITH_THIS[int(dt_pair.strftime("%u")) - 1])
else:
human_readable_date += "сьогодні "
#print("test3.1.2")
human_readable_date += "з "
#print("test3.1.3")
human_readable_date += dt_pair.strftime("%H:%M")
#print("test3.1.4")
human_readable_date += " до "
human_readable_date += dt_pair_finish.strftime("%H:%M")
'''
#self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link'])
#print("test3.1.5")
if 'container_id' in p:
try:
cont = json.decode(open(f"../containers/{p['container_id']}", 'r').read())
if (time.time() - cont['update_ts']) > 43200:
if ("QUERY_STRING" in os.environ) and ("force" in os.environ['QUERY_STRING'].lower()):
print(f"Location: {cont['link']}\n\n", end = '')
else:
import random
new_seed = os.environ['REMOTE_ADDR'] + datetime.datetime.now().replace(minute = 0, second = 0).strftime("%s")
random.seed(new_seed)
surprise_pool = ["Йой!", "От халепа!", "Ой лишенько!"]
print(f"Content-Type: text/html; charset=UTF-8\n\n<h2>{random.choice(surprise_pool)}</h2><br><p>Посилання на пару {p['name']}, яке зберігається у сховищі, було отримане більш ніж 12 годин тому (рівно {time.time() - cont['update_ts']} секунд тому), тому, скоріш за все, не є дійсним.</p><p>На жаль, нового посилання ще не надходило, тому Ви можете або чекати на нього і оновлювати цю сторінку (перенаправлення станеться, щойно з'явиться нове посилання), або перейти вручну за старим посиланням (не рекомендується):</p><a href=\"{cont['link']}\">{cont['link']}</a><br><p>PS: щоб обійти цю сторінку та завжди автоматично переходити за будь-яким наявним посиланням, можна додати у рядок URL в кінці напис: ?force</p>")
else:
print(f"Location: {cont['link']}\n\n", end = '')
except Exception as e:
import random
new_seed = os.environ['REMOTE_ADDR'] + datetime.datetime.now().replace(minute = 0, second = 0).strftime("%s")
random.seed(new_seed)
surprise_pool = ["Йой!", "От халепа!", "Ой лишенько!"]
print(f"Content-Type: text/html; charset=UTF-8\n\n<h2>{random.choice(surprise_pool)}</h2><br><p>Під час спроби отримання посилання на пару {p['name']} сталася непередбачена помилка. Ви можете оновлювати сторінку, поки проблема не зникне (перенаправлення відбудеться, щойно все запрацює), або пошукати посилання де-інде.</p><p>Вибачте за тимчасові незручності(</p>")
else:
print(f"Location: {p['link'].split()[0]}\n\n", end = '')
else:
#self.RESPONCE = "Пар немає взагалі. Ми вільні!"
pass
else:
#print("test3.2")
'''
actual_pair_ts = reference_time + next_pair_time
dt_pair = datetime.datetime.fromtimestamp(actual_pair_ts)
dt_pair_finish = datetime.datetime.fromtimestamp(actual_pair_ts + 5400)
human_readable_date = ""
if ((current_day + 2) == int(dt_pair.strftime("%u"))) or ((str(current_day) == "6") and (dt_pair.strftime("%u") == "1")):
human_readable_date += "завтра "
elif current_week != int(dt_pair.strftime("%W")) % 2:
human_readable_date += "{} ".format(self.WEEKDAY_NAMES_ROD_WITH_NEXT[int(dt_pair.strftime("%u")) - 1])
elif current_day != (int(dt_pair.strftime("%u")) - 1):
human_readable_date += "{} ".format(self.WEEKDAY_NAMES_ROD_WITH_THIS[int(dt_pair.strftime("%u")) - 1])
else:
human_readable_date += "сьогодні "
human_readable_date += "з "
human_readable_date += dt_pair.strftime("%H:%M")
human_readable_date += " до "
human_readable_date += dt_pair_finish.strftime("%H:%M")
'''
#self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link'])
if 'container_id' in p:
try:
cont = json.decode(open(f"../containers/{p['container_id']}", 'r').read())
if (time.time() - cont['update_ts']) > 43200:
if ("QUERY_STRING" in os.environ) and ("force" in os.environ['QUERY_STRING'].lower()):
print(f"Location: {cont['link']}\n\n", end = '')
else:
import random
new_seed = os.environ['REMOTE_ADDR'] + datetime.datetime.now().replace(minute = 0, second = 0).strftime("%s")
random.seed(new_seed)
surprise_pool = ["Йой!", "От халепа!", "Ой лишенько!"]
print(f"Content-Type: text/html; charset=UTF-8\n\n<h2>{random.choice(surprise_pool)}</h2><br><p>Посилання на пару {p['name']}, яке зберігається у сховищі, було отримане більш ніж 12 годин тому (рівно {time.time() - cont['update_ts']} секунд тому), тому, скоріш за все, не є дійсним.</p><p>На жаль, нового посилання ще не надходило, тому Ви можете або чекати на нього і оновлювати цю сторінку (перенаправлення станеться, щойно з'явиться нове посилання), або перейти вручну за старим посиланням (не рекомендується):</p><a href=\"{cont['link']}\">{cont['link']}</a><br><p>PS: щоб обійти цю сторінку та завжди автоматично переходити за будь-яким наявним посиланням, можна додати у рядок URL в кінці напис: ?force</p>")
else:
print(f"Location: {cont['link']}\n\n", end = '')
except Exception as e:
import random
new_seed = os.environ['REMOTE_ADDR'] + datetime.datetime.now().replace(minute = 0, second = 0).strftime("%s")
random.seed(new_seed)
surprise_pool = ["Йой!", "От халепа!", "Ой лишенько!"]
print(f"Content-Type: text/html; charset=UTF-8\n\n<h2>{random.choice(surprise_pool)}</h2><br><p>Під час спроби отримання посилання на пару {p['name']} сталася непередбачена помилка. Ви можете оновлювати сторінку, поки проблема не зникне (перенаправлення відбудеться, щойно все запрацює), або пошукати посилання де-інде.</p><p>Вибачте за тимчасові незручності(</p>")
else:
print(f"Location: {p['link'].split()[0]}\n\n", end = '')
#print(f"Location: {p['link'].split()[0]}\n\n")