From f49cdd87e48ff691d91456c6148e15536ea403ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mose=20M=C3=BCller?= Date: Tue, 28 May 2024 11:45:43 +0200 Subject: [PATCH] updates Readme --- README.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/README.md b/README.md index 7d86433..a60c20d 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ - [Controlling Property State Loading with `@load_state`](#controlling-property-state-loading-with-load_state) - [Understanding Tasks in pydase](#understanding-tasks-in-pydase) - [Understanding Units in pydase](#understanding-units-in-pydase) +- [Using `validate_set` to Validate Property Setters](#using-validate_set-to-validate-property-setters) - [Configuring pydase via Environment Variables](#configuring-pydase-via-environment-variables) - [Customizing the Web Interface](#customizing-the-web-interface) - [Enhancing the Web Interface Style with Custom CSS](#enhancing-the-web-interface-style-with-custom-css) @@ -52,6 +53,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) +- [Validating Property Setters](#using-validate_set-to-validate-property-setters) ## Installation @@ -800,6 +802,45 @@ if __name__ == "__main__": For more information about what you can do with the units, please consult the documentation of [`pint`](https://pint.readthedocs.io/en/stable/). +## Using `validate_set` to Validate Property Setters + +The `validate_set` decorator ensures that a property setter reads back the set value using the property getter and checks it against the desired value. +This decorator can be used to validate that a parameter has been correctly set on a device within a specified precision and timeout. + +The decorator takes two keyword arguments: `timeout` and `precision`. The `timeout` argument specifies the maximum time (in seconds) to wait for the value to be within the precision boundary. +If the value is not within the precision boundary after this time, an exception is raised. +The `precision` argument defines the acceptable deviation from the desired value. +If `precision` is `None`, the value must be exact. +For example, if `precision` is set to `1e-5`, the value read from the device must be within ±0.00001 of the desired value. + +Here’s how to use the `validate_set` decorator in a `DataService` class: + +```python +import pydase +from pydase.observer_pattern.observable.decorators import validate_set + + +class Service(pydase.DataService): + def __init__(self) -> None: + super().__init__() + self._device = RemoteDevice() # dummy class + + @property + def value(self) -> float: + # Implement how to get the value from the remove device... + return self._device.value + + @value.setter + @validate_set(timeout=1.0, precision=1e-5) + def value(self, value: float) -> None: + # Implement how to set the value from the remove device... + self._device.value = value + + +if __name__ == "__main__": + pydase.Server(Service()).run() +``` + ## Configuring pydase via Environment Variables Configuring `pydase` through environment variables enhances flexibility, security, and reusability. This approach allows for easy adaptation of services across different environments without code changes, promoting scalability and maintainability. With that, it simplifies deployment processes and facilitates centralized configuration management. Moreover, environment variables enable separation of configuration from code, aiding in secure and collaborative development.