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()
Exemple #2
0
    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()
    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()
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
        )