udemyBot / cli.py
imseldrith's picture
Upload folder using huggingface_hub (#1)
a004773 verified
raw
history blame
3.88 kB
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...")