Source code for pydoover.ui.parameter
import warnings
from .declarative import normalize_ui_value
from .interaction import Interaction
from .misc import NotSet
def _warn_legacy_ui_alias(old_name: str, new_name: str) -> None:
warnings.warn(
f"{old_name} is deprecated and will be removed in a future release. "
f"Use {new_name} instead.",
DeprecationWarning,
stacklevel=3,
)
[docs]
class Parameter(Interaction):
"""Base class for UI parameters. All parameters should inherit from this class."""
type = NotImplemented
[docs]
class FloatInput(Parameter):
"""A numeric input that can be used to represent both integer and float values.
Attributes
----------
name: str
The name of the parameter.
display_name: str
The display name of the parameter.
min: Union[int, float], optional
The minimum value for the parameter. Defaults to None.
max: Union[int, float], optional
The maximum value for the parameter. Defaults to None.
"""
type = "uiFloatInput"
def __init__(
self,
display_name,
min_val: int | float = NotSet,
max_val: int | float = NotSet,
**kwargs,
):
super().__init__(display_name, **kwargs)
self.min = min_val
self.max = max_val
[docs]
def to_dict(self):
result = super().to_dict()
if self.min is not NotSet:
result["min"] = self.min
if self.max is not NotSet:
result["max"] = self.max
return normalize_ui_value(result)
[docs]
class TextInput(Parameter):
"""A text input that can be used to represent string values for a user to modify.
This can either be inline or a large form text area, depending on the `is_text_area` parameter.
Attributes
----------
display_name: str
The display name of the parameter.
is_text_area: bool
Whether the text parameter should be displayed as a text area. Defaults to False.
"""
type = "uiTextInput"
def __init__(self, display_name, is_text_area: bool = False, **kwargs):
super().__init__(display_name, **kwargs)
self.is_text_area = is_text_area
[docs]
def to_dict(self):
result = super().to_dict()
result["isTextArea"] = self.is_text_area
return normalize_ui_value(result)
[docs]
class BooleanParameter(Parameter):
"""
A boolean parameter that can be used to represent true/false values.
Warnings
--------
This is not implemented in the doover site yet, and will raise a NotImplementedError if used!
Attributes
----------
name: str
The name of the parameter.
display_name: str
The display name of the parameter.
"""
type = "uiBoolParam"
def __init__(self, name, display_name, **kwargs):
super().__init__(name, display_name, **kwargs)
raise NotImplementedError("boolean parameter not implemented in doover site.")
[docs]
class DatetimeInput(Parameter):
"""A datetime input that can be used to request date and time values from a user.
Internally, all datetime values are stored as epoch seconds in UTC
Attributes
----------
name: str
The name of the parameter.
display_name: str
The display name of the parameter.
include_time: bool
Whether to include time in the datetime picker. Defaults to False.
"""
type = "uiDatetimeInput"
def __init__(self, display_name: str, include_time: bool = False, **kwargs):
super().__init__(display_name, **kwargs)
self.include_time = include_time
# @property
# def current_value(self) -> datetime | None:
# """datetime, optional: Returns the current value of the parameter as a datetime object, or `None` if it isn't set."""
# if self._current_value is NotSet or self._current_value is None:
# return None
# if is_tag_reference(self._current_value):
# return self._current_value
# if isinstance(self._current_value, datetime):
# return self._current_value
# elif isinstance(self._current_value, (int, float)):
# return datetime.utcfromtimestamp(self._current_value)
# return None
[docs]
def to_dict(self):
result = super().to_dict()
result["includeTime"] = self.include_time
return normalize_ui_value(result)
[docs]
class TimeInput(DatetimeInput):
"""A time-only input."""
type = "uiTimeInput"
def __init__(self, display_name: str, **kwargs):
super().__init__(display_name, include_time=True, **kwargs)