import threading import time import traceback from tqdm import tqdm from base import VERSION, LoginException, Scraper, Udemy, scraper_dict from colors import bw, by, fb, fg, fr # DUCE-CLI def create_scraping_thread(site: str): code_name = scraper_dict[site] try: t = threading.Thread(target=getattr(scraper, code_name), daemon=True) t.start() while getattr(scraper, f"{code_name}_length") == 0: time.sleep(0.1) # Avoid busy waiting if getattr(scraper, f"{code_name}_length") == -1: raise Exception(f"Error in: {site}") progress_bar = tqdm( total=getattr(scraper, f"{code_name}_length"), desc=site, leave=False ) prev_progress = -1 while not getattr(scraper, f"{code_name}_done"): time.sleep(0.1) current_progress = getattr(scraper, f"{code_name}_progress") progress_bar.update(current_progress - prev_progress) prev_progress = current_progress progress_bar.update(getattr(scraper, f"{code_name}_length") - prev_progress) except Exception: error = getattr(scraper, f"{code_name}_error", traceback.format_exc()) print(error) print("\nError in: " + site + " " + str(VERSION)) ########################################## udemy = Udemy("cli") udemy.load_settings() login_title, main_title = udemy.check_for_update() if login_title.__contains__("Update"): print(by + fr + login_title) ############## MAIN ############# login_successful = False while not login_successful: try: if udemy.settings["use_browser_cookies"]: udemy.fetch_cookies() login_method = "Browser Cookies" elif udemy.settings["email"] and udemy.settings["password"]: email, password = udemy.settings["email"], udemy.settings["password"] login_method = "Saved Email and Password" else: email = input("Email: ") password = input("Password: ") login_method = "Email and Password" print(fb + f"Trying to login using {login_method}") if "Email" in login_method: udemy.manual_login(email, password) udemy.get_session_info() if "Email" in login_method: udemy.settings["email"], udemy.settings["password"] = email, password login_successful = True except LoginException as e: print(fr + str(e)) if "Browser" in login_method: print("Cant login using cookies") udemy.settings["use_browser_cookies"] = False elif "Email" in login_method: udemy.settings["email"], udemy.settings["password"] = "", "" udemy.save_settings() print(fg + f"Logged in as {udemy.display_name}") user_dumb = udemy.is_user_dumb() if user_dumb: print(bw + fr + "What do you even expect to happen!") exit() if not user_dumb: scraper = Scraper(udemy.sites) try: udemy.scraped_data = scraper.get_scraped_courses(create_scraping_thread) time.sleep(0.5) print("\n") udemy.start_enrolling() udemy.print( f"\nSuccessfully Enrolled: {udemy.successfully_enrolled_c}", color="green" ) udemy.print( f"Amount Saved: {round(udemy.amount_saved_c,2)} {udemy.currency.upper()}", color="light green", ) udemy.print(f"Already Enrolled: {udemy.already_enrolled_c}", color="blue") udemy.print(f"Excluded Courses: {udemy.excluded_c}", color="yellow") udemy.print(f"Expired Courses: {udemy.expired_c}", color="red") except: e = traceback.format_exc() print( ( "Error", e + f"\n\n{udemy.link}\n{udemy.title}" + f"|:|Unknown Error {VERSION}", ) ) input("Press Enter to exit...")