import datetime from time import sleep from helpers import now from helpers.mongo import mongo from helpers.ruz import ruz from settings import MOSCOW_TIMEZONE def fetch_schedule_for_user(user_hse_id: int): today = now() 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({"hse_id": {"$ne": None}}): fetch_schedule_for_user(user['hse_id']) def delete_old(): mongo.lessons_collection.delete_many({"end": {"$lte": now() - 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)