Spaces:
Paused
Paused
| 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...") | |