def activate(self): super().activate() args = self.app_session.args if args.verbosity in (LOG_VERBOSE, LOG_DEBUG) and args.progress != 'none': stream = new_encoded_stream(args, self.app_session.stderr) bar_style = args.progress == 'bar' if not stream.isatty(): bar_style = False if bar_style: self._progress = BarProgress(stream=stream) else: self._progress = DotProgress(stream=stream) self._attach_event_listeners()
def test_progress_dot(self): progress = DotProgress(stream=sys.stdout, draw_interval=0) progress.max_value = 100 progress.min_value = 0 progress.update() for dummy in range(100): progress.current_value += 1 progress.update()
class DownloadProgressPlugin(WpullPlugin): def __init__(self): super().__init__() self._progress = None def activate(self): super().activate() args = self.app_session.args if args.verbosity in (LOG_VERBOSE, LOG_DEBUG) and args.progress != 'none': stream = new_encoded_stream(args, self.app_session.stderr) bar_style = args.progress == 'bar' if not stream.isatty(): bar_style = False if bar_style: self._progress = BarProgress(stream=stream) else: self._progress = DotProgress(stream=stream) self._attach_event_listeners() def _attach_event_listeners(self): class ProgressHTTPClient( self.app_session.factory.class_map['HTTPClient']): def __init__(client_self, *args, **kwargs): super().__init__(*args, **kwargs) client_self.event_dispatcher.add_listener( client_self.ClientEvent.new_session, self._http_session_callback) self.app_session.factory.class_map['HTTPClient'] = ProgressHTTPClient class ProgressFTPClient(self.app_session.factory.class_map['FTPClient'] ): def __init__(client_self, *args, **kwargs): super().__init__(*args, **kwargs) client_self.event_dispatcher.add_listener( client_self.ClientEvent.new_session, self._ftp_session_callback) self.app_session.factory.class_map['FTPClient'] = ProgressFTPClient def _http_session_callback(self, http_session: HTTPSession): http_session.event_dispatcher.add_listener( HTTPSession.Event.begin_request, self._progress.update_from_begin_request) http_session.event_dispatcher.add_listener( HTTPSession.Event.begin_response, self._progress.update_from_begin_response) http_session.event_dispatcher.add_listener( HTTPSession.Event.end_response, self._progress.update_from_end_response) http_session.event_dispatcher.add_listener( HTTPSession.Event.response_data, self._progress.update_with_data) def _ftp_session_callback(self, ftp_session: FTPSession): ftp_session.event_dispatcher.add_listener( FTPSession.Event.begin_control, lambda request, connection_reused: self._progress.update_from_begin_request(request)) ftp_session.event_dispatcher.add_listener( FTPSession.Event.begin_transfer, self._progress.update_from_begin_response) ftp_session.event_dispatcher.add_listener( FTPSession.Event.end_transfer, self._progress.update_from_end_response) ftp_session.event_dispatcher.add_listener( FTPSession.Event.transfer_receive_data, self._progress.update_with_data)
class DownloadProgressPlugin(WpullPlugin): def __init__(self): super().__init__() self._progress = None def activate(self): super().activate() args = self.app_session.args if args.verbosity in (LOG_VERBOSE, LOG_DEBUG) and args.progress != 'none': stream = new_encoded_stream(args, self.app_session.stderr) bar_style = args.progress == 'bar' if not stream.isatty(): bar_style = False if bar_style: self._progress = BarProgress(stream=stream) else: self._progress = DotProgress(stream=stream) self._attach_event_listeners() def _attach_event_listeners(self): http_client = cast(HTTPClient, self.app_session.factory['HTTPClient']) http_client.event_dispatcher.add_listener( HTTPClient.ClientEvent.new_session, self._http_session_callback ) ftp_client = cast(FTPClient, self.app_session.factory['FTPClient']) ftp_client.event_dispatcher.add_listener( ftp_client.ClientEvent.new_session, self._ftp_session_callback ) def _http_session_callback(self, http_session: HTTPSession): http_session.event_dispatcher.add_listener( HTTPSession.Event.begin_request, self._progress.update_from_begin_request ) http_session.event_dispatcher.add_listener( HTTPSession.Event.begin_response, self._progress.update_from_begin_response ) http_session.event_dispatcher.add_listener( HTTPSession.Event.end_response, self._progress.update_from_end_response ) http_session.event_dispatcher.add_listener( HTTPSession.Event.response_data, self._progress.update_with_data ) def _ftp_session_callback(self, ftp_session: FTPSession): ftp_session.event_dispatcher.add_listener( FTPSession.Event.begin_control, lambda request, connection_reused: self._progress.update_from_begin_request(request)) ftp_session.event_dispatcher.add_listener( FTPSession.Event.begin_transfer, self._progress.update_from_begin_response) ftp_session.event_dispatcher.add_listener( FTPSession.Event.end_transfer, self._progress.update_from_end_response) ftp_session.event_dispatcher.add_listener( FTPSession.Event.transfer_receive_data, self._progress.update_with_data )