Source code for upsies.uis.tui.jobwidgets.submit
import functools
from prompt_toolkit.filters import Condition
from prompt_toolkit.layout.containers import ConditionalContainer, HSplit
from .... import __project_name__, errors
from .. import widgets
from . import JobWidgetBase
[docs]
class SubmitJobWidget(JobWidgetBase):
is_interactive = False
[docs]
def setup(self):
# Extend some error messages with additional information specific to this UI,
# e.g. "use --option to fix this".
self.job.signal.register('error', self._handle_error)
# Indicate uploading acitivity.
self._activity_indicator = widgets.ActivityIndicator(
style='class:info',
format='{indicator} Uploading',
extend_width=False,
)
self._activity_indicator.disable()
self.job.signal.register('submitting', self._activity_indicator.enable)
self.job.signal.register('submitted', lambda _: self._activity_indicator.disable())
self.job.signal.register('finished', lambda _: self._activity_indicator.disable())
def _handle_error(self, error):
if isinstance(error, errors.AnnounceUrlNotSetError):
cmd = f'{__project_name__} set trackers.{error.tracker.name}.announce_url <URL>'
self.job.error(f'Set it with this command: {cmd}')
elif isinstance(error, errors.FoundDupeError):
self.job.error('You can override the dupe check with --ignore-dupes.')
@functools.cached_property
def runtime_widget(self):
return HSplit(
children=[
ConditionalContainer(
filter=Condition(lambda: self._activity_indicator.active),
content=self._activity_indicator,
),
],
)