bilegentile's picture
Upload folder using huggingface_hub
c19ca42 verified
from __future__ import annotations
from typing import Literal, Type, Union, TYPE_CHECKING
from base_types import OutputId
if TYPE_CHECKING:
import navi
OutputKind = Literal["image", "large-image", "tagged", "generic"]
class BaseOutput:
def __init__(
self,
output_type: navi.ExpressionJson,
label: str,
kind: OutputKind = "generic",
has_handle: bool = True,
associated_type: Union[Type, None] = None,
):
self.output_type: navi.ExpressionJson = output_type
self.label: str = label
self.id: OutputId = OutputId(-1)
self.never_reason: str | None = None
self.kind: OutputKind = kind
self.has_handle: bool = has_handle
self.associated_type: Union[Type, None] = associated_type
# Optional documentation
self.description: str | None = None
def toDict(self):
return {
"id": self.id,
"type": self.output_type,
"label": self.label,
"neverReason": self.never_reason,
"kind": self.kind,
"hasHandle": self.has_handle,
"description": self.description,
}
def with_id(self, output_id: OutputId | int):
self.id = OutputId(output_id)
return self
def with_never_reason(self, reason: str):
self.never_reason = reason
return self
def with_docs(self, *description: str):
self.description = "\n\n".join(description)
return self
def __repr__(self):
return str(self.toDict())
def __iter__(self):
yield from self.toDict().items()
def get_broadcast_data(self, _value):
return None
def get_broadcast_type(self, _value) -> navi.ExpressionJson | None:
return None
def enforce(self, value: object) -> object:
assert value is not None
return value