84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
import datetime
|
|
import zoneinfo
|
|
from time import sleep
|
|
|
|
from helpers.mongo import mongo
|
|
from helpers.ruz import ruz
|
|
|
|
|
|
def fetch_schedule_for_user(user_hse_id: int):
|
|
zone = zoneinfo.ZoneInfo("Europe/Moscow")
|
|
today = datetime.datetime.now(zone)
|
|
next_day = today + datetime.timedelta(days=7)
|
|
schedule = ruz.get_schedule(user_hse_id, today, next_day)
|
|
if schedule is None:
|
|
return False
|
|
saved_ids = []
|
|
for element in schedule:
|
|
year, month, day = element['date'].split('.')
|
|
begin_hour, begin_minute = element['beginLesson'].split(':')
|
|
end_hour, end_minute = element['endLesson'].split(':')
|
|
lesson = mongo.lessons_collection.find_one({
|
|
"discipline": element['discipline'],
|
|
"auditorium": element['auditorium'],
|
|
"hse_user_id": user_hse_id,
|
|
"begin": datetime.datetime(
|
|
year=int(year),
|
|
month=int(month),
|
|
day=int(day),
|
|
hour=int(begin_hour),
|
|
minute=int(begin_minute)
|
|
)
|
|
})
|
|
if lesson is None:
|
|
result = mongo.lessons_collection.insert_one({
|
|
"discipline": element['discipline'],
|
|
"auditorium": element['auditorium'],
|
|
"hse_user_id": user_hse_id,
|
|
"begin": datetime.datetime(
|
|
year=int(year),
|
|
month=int(month),
|
|
day=int(day),
|
|
hour=int(begin_hour),
|
|
minute=int(begin_minute)
|
|
),
|
|
"end": datetime.datetime(
|
|
year=int(year),
|
|
month=int(month),
|
|
day=int(day),
|
|
hour=int(end_hour),
|
|
minute=int(end_minute)
|
|
),
|
|
"building": element['building'],
|
|
"lecturer": element['lecturer'],
|
|
"notified": False
|
|
})
|
|
saved_ids.append(result.inserted_id)
|
|
else:
|
|
saved_ids.append(lesson['_id'])
|
|
mongo.lessons_collection.delete_many({"hse_user_id": user_hse_id, "_id": {"$nin": saved_ids}})
|
|
return True
|
|
|
|
|
|
def process():
|
|
for user in mongo.users_collection.find({}):
|
|
fetch_schedule_for_user(user['hse_id'])
|
|
|
|
|
|
def delete_old():
|
|
zone = zoneinfo.ZoneInfo("Europe/Moscow")
|
|
today = datetime.datetime.now(zone)
|
|
mongo.lessons_collection.delete_many({"end": {"$lte": today - datetime.timedelta(days=1)}})
|
|
|
|
|
|
def fetch():
|
|
while True:
|
|
print("fetch start")
|
|
begin = datetime.datetime.now()
|
|
process()
|
|
end = datetime.datetime.now()
|
|
print('fetch finished')
|
|
print("time elapsed", (end - begin).total_seconds())
|
|
delete_old()
|
|
sleep(60 * 60)
|