Source code for upsies.uis.tui.jobwidgets

"""
TUI representation of :class:`jobs <upsies.jobs.base.JobBase>`
"""

from ....utils import subclasses, submodules
from .base import JobWidgetBase


[docs] def JobWidget(job, app): """ Factory that returns JobWidgetBase instances based on job type The widget class name is created by adding "Widget" to `job`'s class name. The widget class is imported from :mod:`.jobwidgets`. :param job: Job instance :type job: :class:`~.jobs.base.JobBase` :param app: Application instance :type job: :class:`~.prompt_toolkit.application.Application` :raise RuntimeError: if `job`'s type is not supported """ widget_cls_name = type(job).__name__ + 'Widget' widget_clses = subclasses(JobWidgetBase, submodules(__package__)) for widget_cls in widget_clses: if widget_cls.__name__ == widget_cls_name: return widget_cls(job, app) raise RuntimeError(f'No widget class found for job: {job!r}')