def block_until_processed(cookie_jar: CookieJar, cookie_paths: Sequence[str], expected_number_of_calls_to_mark_as_complete: int): """ Puts the given cookies into the cookie jar and wait until they have been completed/marked for reprocessing. :param cookie_jar: the cookie jar to put cookies to process into :param cookie_paths: the cookie paths to process :param expected_number_of_calls_to_mark_as_complete: the number of calls expected to the Cookie jar's `mark_as_complete` method """ if cookie_jar.queue_length() != 0: raise RuntimeError("Already cookies in the jar") mark_as_complete_semaphore = Semaphore(0) original_mark_as_complete = cookie_jar.mark_as_complete def mark_as_complete(path: str): mark_as_complete_semaphore.release() original_mark_as_complete(path) cookie_jar.mark_as_complete = MagicMock(side_effect=mark_as_complete) for cookie_path in cookie_paths: cookie_jar.mark_for_processing(cookie_path) calls_to_mark_as_complete = 0 while calls_to_mark_as_complete != expected_number_of_calls_to_mark_as_complete: mark_as_complete_semaphore.acquire() assert cookie_jar.mark_as_complete.call_count <= expected_number_of_calls_to_mark_as_complete calls_to_mark_as_complete += 1 assert calls_to_mark_as_complete == cookie_jar.mark_as_complete.call_count
def _connect_processor_manager_to_cookie_jar(processor_manager: ProcessorManager, cookie_jar: CookieJar): """ Connects the given processor manager to the given cookie jar. :param processor_manager: the processor manager :param cookie_jar: the cookie jar to connect to """ # Connect the data processor manager to the cookie jar def prompt_processor_manager_to_process_cookie_updates(): logging.debug("Prompting process manager to process updated cookies") processor_manager.process_any_cookies() cookie_jar.add_listener(prompt_processor_manager_to_process_cookie_updates)