feat(python): Update return type for 'get_resource' function (#2695)
* Update return type for 'get_resource' function Modified the 'get_resource' function in 'wmill/client.py' to additionally return a 'dict', providing support for dictionaries in addition to strings and None. This change caters towards use-cases where getting a dictionary resource is needed, enhancing flexibility of resource handling in Windmill client operations. Code updated in two locations for consistency. * Update README.md for python-client Expanded and updated the 'README.md' to include detailed explanations about the basic and advanced usage of the 'wmill' package. The previous version wasn't as comprehensive and lacked examples. Now it includes thorough usage guidance, additional explanations, and code examples. Change improves usability for new developers approaching the project.
This commit is contained in:
committed by
GitHub
parent
a69eefc62e
commit
aeb8ee4d7b
@@ -1,28 +1,83 @@
|
||||
# wmill
|
||||
|
||||
The client for the [Windmill](https://windmill.dev) platform
|
||||
The core client for the [Windmill](https://windmill.dev) platform.
|
||||
|
||||
## Quickstart
|
||||
|
||||
## Usage
|
||||
|
||||
### Basic Usage
|
||||
|
||||
The `wmill` package has several methods at the top-level for the most frequent operations you will need.
|
||||
|
||||
The following are some common examples:
|
||||
|
||||
```python
|
||||
import time
|
||||
|
||||
import wmill
|
||||
|
||||
# with a WM_TOKEN env variable
|
||||
client = wmill.Client()
|
||||
|
||||
# without a WM_TOKEN env variable
|
||||
client = wmill.Client(token="<mytoken>")
|
||||
|
||||
def main():
|
||||
|
||||
version = client.get_version()
|
||||
resource = client.get_resource("u/user/resource_path")
|
||||
|
||||
# run synchronously, will return the result
|
||||
res = client.run_script_sync(hash="000000000000002a", args={})
|
||||
print(res)
|
||||
|
||||
for _ in range(3):
|
||||
# run asynchrnously, will return immediately. Can be scheduled
|
||||
client.run_script_async(hash="000000000000002a", args={}, scheduled_in_secs=10)
|
||||
# Get the value of a variable
|
||||
wmill.get_variable("u/user/variable_path")
|
||||
|
||||
# Run a script synchronously and get the result
|
||||
wmill.run_script("f/pathto/script", args={"arg1": "value1"})
|
||||
|
||||
# Get the value of a resource
|
||||
wmill.get_resource("u/user/resource_path")
|
||||
|
||||
# Set the script's state
|
||||
wmill.set_state({"ts": time.time()})
|
||||
|
||||
# Get the script's state
|
||||
wmill.get_state()
|
||||
```
|
||||
|
||||
### Advanced Usage
|
||||
|
||||
The `wmill` package also exposes the `Windmill` class, which is the core client for the Windmill platform.
|
||||
|
||||
```python
|
||||
import time
|
||||
|
||||
from wmill import Windmill
|
||||
|
||||
def main():
|
||||
client = Windmill(
|
||||
# token=... <- this is optional. otherwise the client will look for the WM_TOKEN env var
|
||||
)
|
||||
|
||||
# Get the current version of the client
|
||||
client.version
|
||||
|
||||
# Get the current user
|
||||
client.user
|
||||
|
||||
# Convenience get and post methods exist for https://app.windmill.dev/openapi.html#/
|
||||
# these are thin wrappers around the httpx library's get and post methods
|
||||
# list worker groups
|
||||
client.get("/configs/list_worker_groups")
|
||||
# create a group
|
||||
client.post(
|
||||
f"/w/{client.workspace}/groups/create",
|
||||
json={
|
||||
"name": "my-group",
|
||||
"summary": "my group summary",
|
||||
}
|
||||
)
|
||||
|
||||
# Get and set the state of the script
|
||||
now = time.time()
|
||||
client.state = {"ts": now}
|
||||
assert client.state == {"ts": now}
|
||||
|
||||
# Run a job asynchronously
|
||||
job_id = client.run_script_async(path="path/to/script")
|
||||
# Get its status
|
||||
client.get_job_status(job_id)
|
||||
# Get its result
|
||||
client.get_result(job_id)
|
||||
|
||||
|
||||
```
|
||||
|
||||
@@ -253,7 +253,7 @@ class Windmill:
|
||||
self,
|
||||
path: str,
|
||||
none_if_undefined: bool = False,
|
||||
) -> str | None:
|
||||
) -> str | dict | None:
|
||||
"""Get resource from Windmill"""
|
||||
try:
|
||||
return self.get(
|
||||
@@ -567,7 +567,7 @@ def get_state() -> Any:
|
||||
def get_resource(
|
||||
path: str,
|
||||
none_if_undefined: bool = False,
|
||||
) -> str | None:
|
||||
) -> str | dict | None:
|
||||
"""Get resource from Windmill"""
|
||||
return _client.get_resource(path, none_if_undefined)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user