mirror of
https://github.com/tiqi-group/pydase.git
synced 2025-04-20 00:10:03 +02:00
moves "Understanding Units" to docs
This commit is contained in:
parent
b0c3c4cad9
commit
50f3686c12
67
README.md
67
README.md
@ -179,71 +179,6 @@ For more information, see [here][RESTful API].
|
|||||||
|
|
||||||
<!--getting-started-end-->
|
<!--getting-started-end-->
|
||||||
|
|
||||||
## Understanding Units in pydase
|
|
||||||
|
|
||||||
`pydase` integrates with the [`pint`](https://pint.readthedocs.io/en/stable/) package to allow you to work with physical quantities within your service. This enables you to define attributes with units, making your service more expressive and ensuring consistency in the handling of physical quantities.
|
|
||||||
|
|
||||||
You can define quantities in your `DataService` subclass using `pydase`'s `units` functionality.
|
|
||||||
|
|
||||||
Here's an example:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
import pydase.units as u
|
|
||||||
from pydase import DataService, Server
|
|
||||||
|
|
||||||
|
|
||||||
class ServiceClass(DataService):
|
|
||||||
voltage = 1.0 * u.units.V
|
|
||||||
_current: u.Quantity = 1.0 * u.units.mA
|
|
||||||
|
|
||||||
@property
|
|
||||||
def current(self) -> u.Quantity:
|
|
||||||
return self._current
|
|
||||||
|
|
||||||
@current.setter
|
|
||||||
def current(self, value: u.Quantity) -> None:
|
|
||||||
self._current = value
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
service = ServiceClass()
|
|
||||||
|
|
||||||
service.voltage = 10.0 * u.units.V
|
|
||||||
service.current = 1.5 * u.units.mA
|
|
||||||
|
|
||||||
Server(service).run()
|
|
||||||
```
|
|
||||||
|
|
||||||
In the frontend, quantities are rendered as floats, with the unit displayed as additional text. This allows you to maintain a clear and consistent representation of physical quantities across both the backend and frontend of your service.
|
|
||||||

|
|
||||||
|
|
||||||
Should you need to access the magnitude or the unit of a quantity, you can use the `.m` attribute or the `.u` attribute of the variable, respectively. For example, this could be necessary to set the periodicity of a task:
|
|
||||||
|
|
||||||
```python
|
|
||||||
import asyncio
|
|
||||||
from pydase import DataService, Server
|
|
||||||
import pydase.units as u
|
|
||||||
|
|
||||||
|
|
||||||
class ServiceClass(DataService):
|
|
||||||
readout_wait_time = 1.0 * u.units.ms
|
|
||||||
|
|
||||||
async def read_sensor_data(self):
|
|
||||||
while True:
|
|
||||||
print("Reading out sensor ...")
|
|
||||||
await asyncio.sleep(self.readout_wait_time.to("s").m)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
service = ServiceClass()
|
|
||||||
|
|
||||||
Server(service).run()
|
|
||||||
```
|
|
||||||
|
|
||||||
For more information about what you can do with the units, please consult the documentation of [`pint`](https://pint.readthedocs.io/en/stable/).
|
|
||||||
|
|
||||||
## Configuring pydase via Environment Variables
|
## 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.
|
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.
|
||||||
@ -349,7 +284,7 @@ We welcome contributions! Please see [contributing.md](https://pydase.readthedoc
|
|||||||
[Short RPC Client]: #connecting-to-the-service-via-python-rpc-client
|
[Short RPC Client]: #connecting-to-the-service-via-python-rpc-client
|
||||||
[Customizing Web Interface]: #customizing-the-web-interface
|
[Customizing Web Interface]: #customizing-the-web-interface
|
||||||
[Task Management]: https://pydase.readthedocs.io/en/stable/user-guide/Tasks/
|
[Task Management]: https://pydase.readthedocs.io/en/stable/user-guide/Tasks/
|
||||||
[Units]: #understanding-units-in-pydase
|
[Units]: https://pydase.readthedocs.io/en/stable/user-guide/Understanding-Units/
|
||||||
[Property Validation]: https://pydase.readthedocs.io/en/stable/user-guide/Validating-Property-Setters/
|
[Property Validation]: https://pydase.readthedocs.io/en/stable/user-guide/Validating-Property-Setters/
|
||||||
[Custom Components]: https://pydase.readthedocs.io/en/stable/user-guide/Components/#custom-components-pydasecomponents
|
[Custom Components]: https://pydase.readthedocs.io/en/stable/user-guide/Components/#custom-components-pydasecomponents
|
||||||
[Components]: https://pydase.readthedocs.io/en/stable/user-guide/Components/
|
[Components]: https://pydase.readthedocs.io/en/stable/user-guide/Components/
|
||||||
|
@ -11,5 +11,5 @@
|
|||||||
[Short RPC Client]: ./getting-started.md#connecting-to-the-service-via-python-rpc-client
|
[Short RPC Client]: ./getting-started.md#connecting-to-the-service-via-python-rpc-client
|
||||||
[Customizing Web Interface]: ./user-guide/interaction/main.md#customization-options
|
[Customizing Web Interface]: ./user-guide/interaction/main.md#customization-options
|
||||||
[Task Management]: ./user-guide/Tasks.md
|
[Task Management]: ./user-guide/Tasks.md
|
||||||
[Units]: ./getting-started.md#understanding-units-in-pydase
|
[Units]: ./user-guide/Understanding-Units.md
|
||||||
[Property Validation]: ./user-guide/Validating-Property-Setters.md
|
[Property Validation]: ./user-guide/Validating-Property-Setters.md
|
||||||
|
64
docs/user-guide/Understanding-Units.md
Normal file
64
docs/user-guide/Understanding-Units.md
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
# Understanding Units
|
||||||
|
|
||||||
|
`pydase` integrates with the [`pint`](https://pint.readthedocs.io/en/stable/) package to allow you to work with physical quantities within your service. This enables you to define attributes with units, making your service more expressive and ensuring consistency in the handling of physical quantities.
|
||||||
|
|
||||||
|
You can define quantities in your `pydase.DataService` subclass using the `pydase.units` module.
|
||||||
|
Here's an example:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
import pydase
|
||||||
|
import pydase.units as u
|
||||||
|
|
||||||
|
|
||||||
|
class ServiceClass(pydase.DataService):
|
||||||
|
voltage = 1.0 * u.units.V
|
||||||
|
_current: u.Quantity = 1.0 * u.units.mA
|
||||||
|
|
||||||
|
@property
|
||||||
|
def current(self) -> u.Quantity:
|
||||||
|
return self._current
|
||||||
|
|
||||||
|
@current.setter
|
||||||
|
def current(self, value: u.Quantity) -> None:
|
||||||
|
self._current = value
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
service = ServiceClass()
|
||||||
|
|
||||||
|
service.voltage = 10.0 * u.units.V
|
||||||
|
service.current = 1.5 * u.units.mA
|
||||||
|
|
||||||
|
pydase.Server(service=service).run()
|
||||||
|
```
|
||||||
|
|
||||||
|
In the frontend, quantities are rendered as floats, with the unit displayed as additional text. This allows you to maintain a clear and consistent representation of physical quantities across both the backend and frontend of your service.
|
||||||
|

|
||||||
|
|
||||||
|
Should you need to access the magnitude or the unit of a quantity, you can use the `.m` attribute or the `.u` attribute of the variable, respectively. For example, this could be necessary to set the periodicity of a task:
|
||||||
|
|
||||||
|
```python
|
||||||
|
import asyncio
|
||||||
|
import pydase
|
||||||
|
import pydase.units as u
|
||||||
|
|
||||||
|
|
||||||
|
class ServiceClass(pydase.DataService):
|
||||||
|
readout_wait_time = 1.0 * u.units.ms
|
||||||
|
|
||||||
|
async def read_sensor_data(self):
|
||||||
|
while True:
|
||||||
|
print("Reading out sensor ...")
|
||||||
|
await asyncio.sleep(self.readout_wait_time.to("s").m)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
service = ServiceClass()
|
||||||
|
|
||||||
|
pydase.Server(service=service).run()
|
||||||
|
```
|
||||||
|
|
||||||
|
For more information about what you can do with the units, please consult the documentation of [`pint`](https://pint.readthedocs.io/en/stable/).
|
||||||
|
|
@ -9,6 +9,7 @@ nav:
|
|||||||
- Interacting with pydase Services: user-guide/interaction/main.md
|
- Interacting with pydase Services: user-guide/interaction/main.md
|
||||||
- Achieving Service Persistence: user-guide/Service_Persistence.md
|
- Achieving Service Persistence: user-guide/Service_Persistence.md
|
||||||
- Understanding Tasks: user-guide/Tasks.md
|
- Understanding Tasks: user-guide/Tasks.md
|
||||||
|
- Understanding Units: user-guide/Understanding-Units.md
|
||||||
- Validating Property Setters: user-guide/Validating-Property-Setters.md
|
- Validating Property Setters: user-guide/Validating-Property-Setters.md
|
||||||
- Developer Guide:
|
- Developer Guide:
|
||||||
- Developer Guide: dev-guide/README.md
|
- Developer Guide: dev-guide/README.md
|
||||||
|
Loading…
x
Reference in New Issue
Block a user