Source code for upsies.uis.tui.jobwidgets.custom
import functools
from prompt_toolkit.filters import Condition
from prompt_toolkit.layout.containers import ConditionalContainer, HSplit
from .. import widgets
from . import JobWidgetBase
[docs]
class CustomJobWidget(JobWidgetBase):
[docs]
def setup(self):
self._activity_indicator = widgets.ActivityIndicator(
style='class:info',
extend_width=False,
)
# Deactivate activity indicator if we have output, which means the job is done.
self.job.signal.register('running', lambda _: self._activity_indicator.enable())
self.job.signal.register('prompt', lambda _: self._activity_indicator.disable())
self.job.signal.register('output', lambda _: self._activity_indicator.disable())
self.job.signal.register('finished', lambda _: self._activity_indicator.disable())
self.job.signal.register('indicate_activity', self._indicate_activity)
def _indicate_activity(self, indicate_activity, text):
if indicate_activity is not None:
self._activity_indicator.active = indicate_activity
if text is not None:
self._activity_indicator.format = f'{{indicator}} {text}'
self.invalidate()
@functools.cached_property
def runtime_widget(self):
return HSplit(
children=[
ConditionalContainer(
filter=Condition(lambda: self._activity_indicator.active),
content=self._activity_indicator,
),
],
)