def test_settings(email, password, zip_code, languages, categories, save, file_name): with mock.patch("builtins.input", side_effect=[email, zip_code, languages, categories, save]): with mock.patch("getpass.getpass", return_value=password): settings_path = f"test_tmp/{file_name}" settings = Settings(settings_path) assert settings.email == email assert settings.password == password assert settings.zip_code == zip_code assert settings.languages == [] if languages is None else languages assert settings.categories == [] if categories is None else categories if save.upper() == "Y": yaml = YAML() with open(settings_path) as f: settings = yaml.load(f) assert settings["udemy"]["email"] == email assert settings["udemy"]["password"] == password assert settings["udemy"]["zipcode"] == zip_code assert (settings["udemy"]["languages"] == [] if languages is None else ",".join(languages)) assert (settings["udemy"]["categories"] == [] if categories is None else categories) # Load settings just created Settings(settings_path) else: assert os.path.isdir(settings_path) is False
def __init__(self): """ Initialize """ super(QtCore.QObject, self).__init__() self.central_state_monitor = CentralStateMonitor() # News self.news = News() # settings self.central_settings = Settings() self.signals = Signals() # path to modules directory self.path_modules = os.path.normpath( os.path.join(os.path.dirname(os.path.realpath(__file__)), "../../", "modules")) # dictionary to keep track of the instantiated modules self._instantiated_modules = {} # create window, show it self.window = HQWindow(self) self.window.show() # connect signals: signal_stop_all_modules, which can be called from the modules to stop all other modules self.signal_stop_all_modules.connect(self.stop_modules) self.signals.write_signal("stop_all_modules", self.signal_stop_all_modules)
def test_load_existing_settings(email, password, zip_code, languages, categories, save, file_name): with mock.patch("builtins.input", side_effect=[email, zip_code, languages, categories, save]): with mock.patch("getpass.getpass", return_value=password): settings_path = f"test_tmp/{file_name}" Settings(settings_path) # Load existing settings settings = Settings(settings_path) assert settings.email == email assert settings.password == password assert settings.zip_code == zip_code assert settings.languages == [] if languages is None else languages assert settings.categories == [] if categories is None else categories
def test_load_ci_settings(_, monkeypatch, is_ci_run, email, password): monkeypatch.setenv("CI_TEST", str(is_ci_run)) monkeypatch.setenv("UDEMY_EMAIL", email) monkeypatch.setenv("UDEMY_PASSWORD", password) settings = Settings("") if is_ci_run: assert settings.email == email assert settings.password == password
def run( browser: str, max_pages: Union[int, None], cache_hit_limit: int, driver: WebDriver = None, ): """ Run the udemy enroller script :param str browser: Name of the browser we want to create a driver for :param int or None max_pages: Max number of pages to scrape from tutorialbar.com :param int cache_hit_limit: If we hit the cache this many times in a row we exit the script :param WebDriver driver: :return: """ settings = Settings() if driver is None: dm = DriverManager(browser=browser, is_ci_build=settings.is_ci_build) driver = dm.driver redeem_courses(driver, settings, max_pages, cache_hit_limit)
# Install all the requirements by running requirements.py in IDLE or follow the alternate instructions at # https://github.com/aapatre/Automatic-Udemy-Course-Enroller-GET-PAID-UDEMY-COURSES-for-FREE/ Make sure you have # cleared all saved payment details on your Udemy account & the browser! For firefox you need to manually install the # driver on Arch Linux (sudo pacman -S geckodriver). Untested on other platforms. from selenium import webdriver from core import Settings from core.utils import redeem_courses settings = Settings() driver = webdriver.Firefox() # Maximizes the browser window since Udemy has a responsive design and the code only works driver.maximize_window() # in the maximized layout try: redeem_courses(driver, settings) except KeyboardInterrupt: print("Exiting the script") except Exception as e: print("Error: {}".format(e)) finally: print("Closing browser") driver.quit()