Exemplo n.º 1
0
def log_progress(sequence, every=None, size=None, name='Items'):
    from ipywidgets import IntProgress, HTML, VBox
    from IPython.display import display

    is_iterator = False
    if size is None:
        try:
            size = len(sequence)
        except TypeError:
            is_iterator = True
    if size is not None:
        if every is None:
            if size <= 200:
                every = 1
            else:
                every = int(size / 200)  # every 0.5%
    else:
        assert every is not None, 'sequence is iterator, set every'

    if is_iterator:
        progress = IntProgress(min=0, max=1, value=1)
        progress.bar_style = 'info'
    else:
        progress = IntProgress(min=0, max=size, value=0)
    label = HTML()
    box = VBox(children=[label, progress])
    display(box)

    index = 0
    try:
        for index, record in enumerate(sequence, 1):
            if index == 1 or index % every == 0:
                if is_iterator:
                    label.value = '{name}: {index} / ?'.format(name=name,
                                                               index=index)
                else:
                    progress.value = index
                    label.value = u'{name}: {index} / {size}'.format(
                        name=name, index=index, size=size)
            yield record
    except:
        progress.bar_style = 'danger'
        raise
    else:
        progress.bar_style = 'success'
        progress.value = index
        label.value = "{name}: {index}".format(name=name,
                                               index=str(index or '?'))
Exemplo n.º 2
0
    def create(self):
        """
        Create the log viewer.
        """
        from ipywidgets import HTML, HBox, VBox
        html = HTML()

        html.value = """<div style="max-height: 400px; overflow-y: auto; width: 100%";>"""

        buttons = []
        for type in self.log_levels:
            buttons.append(
                HTML(
                    self.toggle_button_line.format(type_lower=type.lower(),
                                                   type_upper=type.upper())))

        buttons_view = HBox(buttons)
        buttons_view.margin = "10px 0px"

        html.value += """<table style="word-break: break-all; margin: 10px;">"""

        for line in self.log_content.split("\n"):
            found = False
            for type in self.log_levels:
                type_upper = type.upper()
                type_lower = type.lower()
                color = self.log_color_codes[type_upper]
                if line.startswith(
                        "[{type_upper}]".format(type_upper=type_upper)):
                    html.value += self.log_line.format(content=line,
                                                       type_lower=type_lower,
                                                       color=color)
                    found = True
                    break

            if not found:
                html.value += self.log_line.format(
                    content=line,
                    type_lower="default",
                    color=self.log_color_codes["DEFAULT"])

        html.value += "</table></div>"
        html.width = "100%"
        html.margin = "5px"

        result_vbox = VBox((buttons_view, html))

        return result_vbox