import datetime import logging from time import sleep from helpers import now, User from helpers.models import UserSchema from helpers.mongo import mongo from helpers.ruz import ruz def fetch_schedule_for_user(user: User): today = now(user) next_day = today + datetime.timedelta(days=7) schedule = ruz.get_schedule(user, 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(UserSchema().load(user)) def delete_old(): mongo.lessons_collection.delete_many({"end": {"$lte": datetime.datetime.now() - datetime.timedelta(days=1)}}) def fetch(): while True: logging.info("fetch start") begin = datetime.datetime.now() process() end = datetime.datetime.now() logging.info('fetch finished') logging.info("time elapsed", (end - begin).total_seconds()) delete_old() sleep(60 * 5)