From ff7c92547e535b80bcca4edfa60ffa8d49f3f5dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mose=20M=C3=BCller?= Date: Wed, 13 Dec 2023 10:59:34 +0100 Subject: [PATCH] updates Readme --- README.md | 137 +++++++++++++++++++++++++++---- docs/images/Slider_component.png | Bin 23175 -> 20277 bytes 2 files changed, 121 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index ad1b2a3..2aed7d6 100644 --- a/README.md +++ b/README.md @@ -42,8 +42,7 @@ - [Saving and restoring the service state for service persistence](#understanding-service-persistence) - [Automated task management with built-in start/stop controls and optional autostart](#understanding-tasks-in-pydase) - [Support for units](#understanding-units-in-pydase) - + ## Installation @@ -286,26 +285,132 @@ if __name__ == "__main__": #### `NumberSlider` -This component provides an interactive slider interface for adjusting numerical values on the frontend. It supports both floats and integers. The values adjusted on the frontend are synchronized with the backend in real-time, ensuring consistent data representation. +The `NumberSlider` component in the `pydase` package provides an interactive slider interface for adjusting numerical values on the frontend. It is designed to support both numbers and quantities and ensures that values adjusted on the frontend are synchronized with the backend. -The slider can be customized with initial values, minimum and maximum limits, and step sizes to fit various use cases. +To utilize the `NumberSlider`, users should implement a class that derives from `NumberSlider`. This class can then define the initial values, minimum and maximum limits, step sizes, and additional logic as needed. + +Here's an example of how to implement and use a custom slider: ```python import pydase -from pydase.components import NumberSlider +import pydase.components + + +class MySlider(pydase.components.NumberSlider): + def __init__( + self, + value: float = 0.0, + min_: float = 0.0, + max_: float = 100.0, + step_size: float = 1.0, + ) -> None: + super().__init__(value, min_, max_, step_size) + + @property + def min(self) -> float: + return self._min + + @min.setter + def min(self, value: float) -> None: + self._min = value + + @property + def max(self) -> float: + return self._max + + @max.setter + def max(self, value: float) -> None: + self._max = value + + @property + def step_size(self) -> float: + return self._step_size + + @step_size.setter + def step_size(self, value: float) -> None: + self._step_size = value + + @property + def value(self) -> float: + return self._value + + @value.setter + def value(self, value: float) -> None: + if value < self._min or value > self._max: + raise ValueError("Value is either below allowed min or above max value.") + self._value = value class MyService(pydase.DataService): - slider = NumberSlider(value=3.5, min=0, max=10, step_size=0.1, type="float") + def __init__(self) -> None: + super().__init__() + self.voltage = MySlider() if __name__ == "__main__": - service = MyService() - pydase.Server(service).run() + service_instance = MyService() + service_instance.voltage.value = 5 + print(service_instance.voltage.value) # Output: 5 + pydase.Server(service_instance).run() ``` +In this example, `MySlider` overrides the `min`, `max`, `step_size`, and `value` properties. Users can make any of these properties read-only by omitting the corresponding setter method. + ![Slider Component](docs/images/Slider_component.png) +- Accessing parent class resources in `NumberSlider` + + In scenarios where you need the slider component to interact with or access resources from its parent class, you can achieve this by passing a callback function to it. This method avoids directly passing the entire parent class instance (`self`) and offers a more encapsulated approach. The callback function can be designed to utilize specific attributes or methods of the parent class, allowing the slider to perform actions or retrieve data in response to slider events. + + Here's an illustrative example: + + ```python + from collections.abc import Callable + + import pydase + import pydase.components + + + class MySlider(pydase.components.NumberSlider): + def __init__( + self, + value: float, + on_change: Callable[[float], None], + ) -> None: + super().__init__(value=value) + self._on_change = on_change + + # ... other properties ... + + @property + def value(self) -> float: + return self._value + + @value.setter + def value(self, new_value: float) -> None: + if new_value < self._min or new_value > self._max: + raise ValueError("Value is either below allowed min or above max value.") + self._value = new_value + self._on_change(new_value) + + + class MyService(pydase.DataService): + def __init__(self) -> None: + self.voltage = MySlider( + 5, + on_change=self.handle_voltage_change, + ) + + def handle_voltage_change(self, new_voltage: float) -> None: + print(f"Voltage changed to: {new_voltage}") + # Additional logic here + + if __name__ == "__main__": + service_instance = MyService() + my_service.voltage.value = 7 # Output: "Voltage changed to: 7" + pydase.Server(service_instance).run() + ```` + #### `ColouredEnum` This component provides a way to visually represent different states or categories in a data service using colour-coded options. It behaves similarly to a standard `Enum`, but the values encode colours in a format understood by CSS. The colours can be defined using various methods like Hexadecimal, RGB, HSL, and more. @@ -542,34 +647,34 @@ You have two primary ways to adjust the log levels in `pydase`: 1. directly targeting `pydase` loggers You can set the log level for any `pydase` logger directly in your code. This method is useful for fine-tuning logging levels for specific modules within `pydase`. For instance, if you want to change the log level of the main `pydase` logger or target a submodule like `pydase.data_service`, you can do so as follows: - + ```python # import logging - + # Set the log level for the main pydase logger logging.getLogger("pydase").setLevel(logging.INFO) - + # Optionally, target a specific submodule logger # logging.getLogger("pydase.data_service").setLevel(logging.DEBUG) - + # Your logger for the current script logger = logging.getLogger(__name__) logger.info("My info message.") ``` - + This approach allows for specific control over different parts of the `pydase` library, depending on your logging needs. 2. using the `ENVIRONMENT` environment variable For a more global setting that affects the entire `pydase` library, you can utilize the `ENVIRONMENT` environment variable. Setting this variable to "production" will configure all `pydase` loggers to only log messages of level "INFO" and above, filtering out more verbose logging. This is particularly useful for production environments where excessive logging can be overwhelming or unnecessary. - + ```bash ENVIRONMENT="production" python -m ``` - + In the absence of this setting, the default behavior is to log everything of level "DEBUG" and above, suitable for development environments where more detailed logs are beneficial. - + **Note**: It is recommended to avoid calling the `pydase.utils.logging.setup_logging` function directly, as this may result in duplicated logging messages. ## Documentation diff --git a/docs/images/Slider_component.png b/docs/images/Slider_component.png index 38967f48cf14c33bfbaa91540a6dd1244257fc6b..4ca7ada9fc2a04e776133ff7e6f70620b747b7a9 100644 GIT binary patch literal 20277 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 A*Z=?k literal 23175 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