diff --git a/Dockerfile b/Dockerfile index 4f3bb4f7d6..b3f18b4e17 100644 --- a/Dockerfile +++ b/Dockerfile @@ -48,6 +48,7 @@ COPY /backend/windmill-api/build_openapi.sh /backend/windmill-api/build_openapi. RUN cd /backend/windmill-api && . ./build_openapi.sh COPY /backend/parsers/windmill-parser-wasm/pkg/ /backend/parsers/windmill-parser-wasm/pkg/ COPY /typescript-client/docs/ /frontend/static/tsdocs/ +COPY /python-client/docs/ /frontend/static/pydocs/ RUN npm run generate-backend-client ENV NODE_OPTIONS "--max-old-space-size=8192" diff --git a/python-client/.gitignore b/python-client/.gitignore index 0a6e1f82df..3b7cf22936 100644 --- a/python-client/.gitignore +++ b/python-client/.gitignore @@ -1 +1,2 @@ windmill-api/ +.venv/ diff --git a/python-client/DOCS.md b/python-client/DOCS.md new file mode 100644 index 0000000000..58a0a2c6ab --- /dev/null +++ b/python-client/DOCS.md @@ -0,0 +1,128 @@ +# Python Client Documentation + +This document describes how the Python client documentation is generated and deployed, similar to the TypeScript client. + +## Overview + +The Python client uses **pdoc** to automatically generate API documentation from docstrings in the code, similar to how the TypeScript client uses TypeDoc. + +## Architecture + +Following the same pattern as the TypeScript client: + +1. **Documentation Generator**: pdoc (Python) vs TypeDoc (TypeScript) +2. **Build Script**: `build_pdoc.sh` (similar to `build_typedoc.sh` for TS) +3. **Output Directory**: `docs/` containing static HTML +4. **Deployment**: Copied to `/frontend/static/pydocs/` during Docker build +5. **URL**: Accessible at `https://app.windmill.dev/pydocs/wmill.html` + +## Building Documentation + +### How It Works + +The Python client documentation follows the same pattern as the TypeScript client: + +1. **Docs are checked into git** - The `docs/` directory is committed to the repository +2. **Built during releases** - When `./build.sh` runs (on releases or manually), it calls `./build_pdoc.sh` +3. **Copied during Docker build** - The Dockerfile copies pre-built docs to the frontend + +### Locally + +To build/update the documentation: + +```bash +cd /path/to/windmill/python-client +./build_pdoc.sh +``` + +This will: +1. Create a virtual environment if needed (`.venv/` - gitignored) +2. Install pdoc and dependencies +3. Generate HTML documentation in `./docs/` +4. Documentation will be available at `file://$(pwd)/docs/wmill.html` + +After building, you should commit the updated docs: +```bash +git add docs/ +git commit -m "Update Python client documentation" +``` + +### In CI/CD + +The documentation is built automatically during the release process: + +1. **On release** (`pypi_on_release.yml` workflow triggers on version tags) +2. Runs `./publish.sh` → calls `./build.sh` → calls `./build_pdoc.sh` +3. Docs are generated and should be committed separately or before the release + +### In Docker Build + +The documentation is copied during Docker build (see `Dockerfile` line 51): + +```dockerfile +COPY /python-client/docs/ /frontend/static/pydocs/ +``` + +This makes the docs available at `https://app.windmill.dev/pydocs/` in production. + +## Documentation Structure + +The generated documentation includes: + +- **Main Module** (`wmill.html`): Overview and module-level functions +- **Client Class** (`wmill/client.html`): Full Windmill class API reference +- **S3 Types** (`wmill/s3_types.html`): S3 integration types and helpers +- **S3 Reader** (`wmill/s3_reader.html`): S3 file reading utilities + +All documentation is automatically generated from: +- Function/class docstrings +- Type hints +- Parameter descriptions +- Return type annotations + +## Writing Good Documentation + +To maintain quality documentation: + +1. **Use clear docstrings** following Google or NumPy style: + ```python + def my_function(param1: str, param2: int = 0) -> dict: + """Short description of function. + + Longer description with more details about what the function does + and any important notes. + + Args: + param1: Description of param1 + param2: Description of param2 (default: 0) + + Returns: + Description of return value + + Example: + >>> result = my_function("test", 5) + >>> print(result) + {'status': 'ok'} + """ + ``` + +2. **Add type hints** - pdoc uses them to generate better documentation +3. **Include examples** in docstrings where helpful +4. **Keep descriptions concise** but complete + +## Comparison with TypeScript Client + +| Aspect | TypeScript | Python | +|--------|-----------|--------| +| Generator | TypeDoc | pdoc | +| Build Script | `build_typedoc.sh` | `build_pdoc.sh` | +| Output Dir | `docs/` | `docs/` | +| Hosted At | `/tsdocs/` | `/pydocs/` | +| Entry Point | `modules.html` | `wmill.html` | + +## References + +- Windmill Docs: https://windmilldocs/docs/advanced/2_clients/python_client.md +- TypeScript Client Docs: https://app.windmill.dev/tsdocs/modules.html +- Python Client Docs: https://app.windmill.dev/pydocs/wmill.html +- pdoc Documentation: https://pdoc.dev/ diff --git a/python-client/build.sh b/python-client/build.sh index 780806388e..4224f77bad 100755 --- a/python-client/build.sh +++ b/python-client/build.sh @@ -74,4 +74,7 @@ mv windmill-api/README.md.tmp windmill-api/README.md cd windmill-api && poetry build cd ../wmill && poetry build cd ../wmill_pg && poetry build -cd .. && echo "windmill-api/" >> .gitignore +cd .. && echo "windmill-api/" >> .gitignore + +# Build documentation (similar to typescript-client/build_typedoc.sh) +./build_pdoc.sh diff --git a/python-client/build_pdoc.sh b/python-client/build_pdoc.sh new file mode 100755 index 0000000000..53df696331 --- /dev/null +++ b/python-client/build_pdoc.sh @@ -0,0 +1,19 @@ +#!/bin/bash +# Build Python documentation with pdoc +# Similar to typescript-client/build_typedoc.sh + +set -e + +# Create/activate virtual environment if needed +if [ ! -d ".venv" ]; then + python3 -m venv .venv + .venv/bin/pip install -q pdoc httpx +fi + +# Install the package +.venv/bin/pip install -q ./wmill + +# Generate documentation +.venv/bin/pdoc wmill -o docs + +echo "Python documentation built successfully in ./docs/" diff --git a/python-client/docs/index.html b/python-client/docs/index.html new file mode 100644 index 0000000000..6cb034b833 --- /dev/null +++ b/python-client/docs/index.html @@ -0,0 +1,7 @@ + + +
+ + + + diff --git a/python-client/docs/search.js b/python-client/docs/search.js new file mode 100644 index 0000000000..960f5fe457 --- /dev/null +++ b/python-client/docs/search.js @@ -0,0 +1,46 @@ +window.pdocSearch = (function(){ +/** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;uCreate a script job and return its job id.
\n\nDeprecated since version Use run_script_by_path_async or run_script_by_hash_async instead..
\n", "signature": "(\tself,\tpath: str = None,\thash_: str = None,\targs: dict = None,\tscheduled_in_secs: int = None) -> str:", "funcdef": "def"}, "wmill.client.Windmill.run_script_by_path_async": {"fullname": "wmill.client.Windmill.run_script_by_path_async", "modulename": "wmill.client", "qualname": "Windmill.run_script_by_path_async", "kind": "function", "doc": "Create a script job by path and return its job id.
\n", "signature": "(self, path: str, args: dict = None, scheduled_in_secs: int = None) -> str:", "funcdef": "def"}, "wmill.client.Windmill.run_script_by_hash_async": {"fullname": "wmill.client.Windmill.run_script_by_hash_async", "modulename": "wmill.client", "qualname": "Windmill.run_script_by_hash_async", "kind": "function", "doc": "Create a script job by hash and return its job id.
\n", "signature": "(\tself,\thash_: str,\targs: dict = None,\tscheduled_in_secs: int = None) -> str:", "funcdef": "def"}, "wmill.client.Windmill.run_flow_async": {"fullname": "wmill.client.Windmill.run_flow_async", "modulename": "wmill.client", "qualname": "Windmill.run_flow_async", "kind": "function", "doc": "Create a flow job and return its job id.
\n", "signature": "(\tself,\tpath: str,\targs: dict = None,\tscheduled_in_secs: int = None,\tdo_not_track_in_parent: bool = True) -> str:", "funcdef": "def"}, "wmill.client.Windmill.run_script": {"fullname": "wmill.client.Windmill.run_script", "modulename": "wmill.client", "qualname": "Windmill.run_script", "kind": "function", "doc": "Run script synchronously and return its result.
\n\nDeprecated since version Use run_script_by_path or run_script_by_hash instead..
\n", "signature": "(\tself,\tpath: str = None,\thash_: str = None,\targs: dict = None,\ttimeout: datetime.timedelta | int | float | None = None,\tverbose: bool = False,\tcleanup: bool = True,\tassert_result_is_not_none: bool = False) -> Any:", "funcdef": "def"}, "wmill.client.Windmill.run_script_by_path": {"fullname": "wmill.client.Windmill.run_script_by_path", "modulename": "wmill.client", "qualname": "Windmill.run_script_by_path", "kind": "function", "doc": "Run script by path synchronously and return its result.
\n", "signature": "(\tself,\tpath: str,\targs: dict = None,\ttimeout: datetime.timedelta | int | float | None = None,\tverbose: bool = False,\tcleanup: bool = True,\tassert_result_is_not_none: bool = False) -> Any:", "funcdef": "def"}, "wmill.client.Windmill.run_script_by_hash": {"fullname": "wmill.client.Windmill.run_script_by_hash", "modulename": "wmill.client", "qualname": "Windmill.run_script_by_hash", "kind": "function", "doc": "Run script by hash synchronously and return its result.
\n", "signature": "(\tself,\thash_: str,\targs: dict = None,\ttimeout: datetime.timedelta | int | float | None = None,\tverbose: bool = False,\tcleanup: bool = True,\tassert_result_is_not_none: bool = False) -> Any:", "funcdef": "def"}, "wmill.client.Windmill.wait_job": {"fullname": "wmill.client.Windmill.wait_job", "modulename": "wmill.client", "qualname": "Windmill.wait_job", "kind": "function", "doc": "\n", "signature": "(\tself,\tjob_id,\ttimeout: datetime.timedelta | int | float | None = None,\tverbose: bool = False,\tcleanup: bool = True,\tassert_result_is_not_none: bool = False):", "funcdef": "def"}, "wmill.client.Windmill.cancel_running": {"fullname": "wmill.client.Windmill.cancel_running", "modulename": "wmill.client", "qualname": "Windmill.cancel_running", "kind": "function", "doc": "Cancel currently running executions of the same script.
\n", "signature": "(self) -> dict:", "funcdef": "def"}, "wmill.client.Windmill.get_job": {"fullname": "wmill.client.Windmill.get_job", "modulename": "wmill.client", "qualname": "Windmill.get_job", "kind": "function", "doc": "\n", "signature": "(self, job_id: str) -> dict:", "funcdef": "def"}, "wmill.client.Windmill.get_root_job_id": {"fullname": "wmill.client.Windmill.get_root_job_id", "modulename": "wmill.client", "qualname": "Windmill.get_root_job_id", "kind": "function", "doc": "\n", "signature": "(self, job_id: str | None = None) -> dict:", "funcdef": "def"}, "wmill.client.Windmill.get_id_token": {"fullname": "wmill.client.Windmill.get_id_token", "modulename": "wmill.client", "qualname": "Windmill.get_id_token", "kind": "function", "doc": "\n", "signature": "(self, audience: str) -> str:", "funcdef": "def"}, "wmill.client.Windmill.get_job_status": {"fullname": "wmill.client.Windmill.get_job_status", "modulename": "wmill.client", "qualname": "Windmill.get_job_status", "kind": "function", "doc": "\n", "signature": "(self, job_id: str) -> Literal['RUNNING', 'WAITING', 'COMPLETED']:", "funcdef": "def"}, "wmill.client.Windmill.get_result": {"fullname": "wmill.client.Windmill.get_result", "modulename": "wmill.client", "qualname": "Windmill.get_result", "kind": "function", "doc": "\n", "signature": "(self, job_id: str, assert_result_is_not_none: bool = True) -> Any:", "funcdef": "def"}, "wmill.client.Windmill.get_variable": {"fullname": "wmill.client.Windmill.get_variable", "modulename": "wmill.client", "qualname": "Windmill.get_variable", "kind": "function", "doc": "\n", "signature": "(self, path: str) -> str:", "funcdef": "def"}, "wmill.client.Windmill.set_variable": {"fullname": "wmill.client.Windmill.set_variable", "modulename": "wmill.client", "qualname": "Windmill.set_variable", "kind": "function", "doc": "\n", "signature": "(self, path: str, value: str, is_secret: bool = False) -> None:", "funcdef": "def"}, "wmill.client.Windmill.get_resource": {"fullname": "wmill.client.Windmill.get_resource", "modulename": "wmill.client", "qualname": "Windmill.get_resource", "kind": "function", "doc": "\n", "signature": "(self, path: str, none_if_undefined: bool = False) -> dict | None:", "funcdef": "def"}, "wmill.client.Windmill.set_resource": {"fullname": "wmill.client.Windmill.set_resource", "modulename": "wmill.client", "qualname": "Windmill.set_resource", "kind": "function", "doc": "\n", "signature": "(self, value: Any, path: str, resource_type: str):", "funcdef": "def"}, "wmill.client.Windmill.set_state": {"fullname": "wmill.client.Windmill.set_state", "modulename": "wmill.client", "qualname": "Windmill.set_state", "kind": "function", "doc": "\n", "signature": "(self, value: Any):", "funcdef": "def"}, "wmill.client.Windmill.set_progress": {"fullname": "wmill.client.Windmill.set_progress", "modulename": "wmill.client", "qualname": "Windmill.set_progress", "kind": "function", "doc": "\n", "signature": "(self, value: int, job_id: Optional[str] = None):", "funcdef": "def"}, "wmill.client.Windmill.get_progress": {"fullname": "wmill.client.Windmill.get_progress", "modulename": "wmill.client", "qualname": "Windmill.get_progress", "kind": "function", "doc": "\n", "signature": "(self, job_id: Optional[str] = None) -> Any:", "funcdef": "def"}, "wmill.client.Windmill.set_flow_user_state": {"fullname": "wmill.client.Windmill.set_flow_user_state", "modulename": "wmill.client", "qualname": "Windmill.set_flow_user_state", "kind": "function", "doc": "Set the user state of a flow at a given key
\n", "signature": "(self, key: str, value: Any) -> None:", "funcdef": "def"}, "wmill.client.Windmill.get_flow_user_state": {"fullname": "wmill.client.Windmill.get_flow_user_state", "modulename": "wmill.client", "qualname": "Windmill.get_flow_user_state", "kind": "function", "doc": "Get the user state of a flow at a given key
\n", "signature": "(self, key: str) -> Any:", "funcdef": "def"}, "wmill.client.Windmill.version": {"fullname": "wmill.client.Windmill.version", "modulename": "wmill.client", "qualname": "Windmill.version", "kind": "variable", "doc": "\n"}, "wmill.client.Windmill.get_duckdb_connection_settings": {"fullname": "wmill.client.Windmill.get_duckdb_connection_settings", "modulename": "wmill.client", "qualname": "Windmill.get_duckdb_connection_settings", "kind": "function", "doc": "Convenient helpers that takes an S3 resource as input and returns the settings necessary to\ninitiate an S3 connection from DuckDB
\n", "signature": "(\tself,\ts3_resource_path: str = '') -> wmill.s3_types.DuckDbConnectionSettings | None:", "funcdef": "def"}, "wmill.client.Windmill.get_polars_connection_settings": {"fullname": "wmill.client.Windmill.get_polars_connection_settings", "modulename": "wmill.client", "qualname": "Windmill.get_polars_connection_settings", "kind": "function", "doc": "Convenient helpers that takes an S3 resource as input and returns the settings necessary to\ninitiate an S3 connection from Polars
\n", "signature": "(\tself,\ts3_resource_path: str = '') -> wmill.s3_types.PolarsConnectionSettings:", "funcdef": "def"}, "wmill.client.Windmill.get_boto3_connection_settings": {"fullname": "wmill.client.Windmill.get_boto3_connection_settings", "modulename": "wmill.client", "qualname": "Windmill.get_boto3_connection_settings", "kind": "function", "doc": "Convenient helpers that takes an S3 resource as input and returns the settings necessary to\ninitiate an S3 connection using boto3
\n", "signature": "(\tself,\ts3_resource_path: str = '') -> wmill.s3_types.Boto3ConnectionSettings:", "funcdef": "def"}, "wmill.client.Windmill.load_s3_file": {"fullname": "wmill.client.Windmill.load_s3_file", "modulename": "wmill.client", "qualname": "Windmill.load_s3_file", "kind": "function", "doc": "Load a file from the workspace s3 bucket and returns its content as bytes.
\n\n'''python\nfrom wmill import S3Object
\n\ns3_obj = S3Object(s3=\"/path/to/my_file.txt\")\nmy_obj_content = client.load_s3_file(s3_obj)\nfile_content = my_obj_content.decode(\"utf-8\")\n'''
\n", "signature": "(\tself,\ts3object: wmill.s3_types.S3Object | str,\ts3_resource_path: str | None) -> bytes:", "funcdef": "def"}, "wmill.client.Windmill.load_s3_file_reader": {"fullname": "wmill.client.Windmill.load_s3_file_reader", "modulename": "wmill.client", "qualname": "Windmill.load_s3_file_reader", "kind": "function", "doc": "Load a file from the workspace s3 bucket and returns the bytes stream.
\n\n'''python\nfrom wmill import S3Object
\n\ns3_obj = S3Object(s3=\"/path/to/my_file.txt\")\nwith wmill.load_s3_file_reader(s3object, s3_resource_path) as file_reader:\n print(file_reader.read())\n'''
\n", "signature": "(\tself,\ts3object: wmill.s3_types.S3Object | str,\ts3_resource_path: str | None) -> _io.BufferedReader:", "funcdef": "def"}, "wmill.client.Windmill.write_s3_file": {"fullname": "wmill.client.Windmill.write_s3_file", "modulename": "wmill.client", "qualname": "Windmill.write_s3_file", "kind": "function", "doc": "Write a file to the workspace S3 bucket
\n\n'''python\nfrom wmill import S3Object
\n\ns3_obj = S3Object(s3=\"/path/to/my_file.txt\")
\n\nfile_content = b'Hello Windmill!'\nclient.write_s3_file(s3_obj, file_content)
\n\nwith open(\"my_file.txt\", \"rb\") as my_file:\n client.write_s3_file(s3_obj, my_file)\n'''
\n", "signature": "(\tself,\ts3object: wmill.s3_types.S3Object | str | None,\tfile_content: _io.BufferedReader | bytes,\ts3_resource_path: str | None,\tcontent_type: str | None = None,\tcontent_disposition: str | None = None) -> wmill.s3_types.S3Object:", "funcdef": "def"}, "wmill.client.Windmill.sign_s3_objects": {"fullname": "wmill.client.Windmill.sign_s3_objects", "modulename": "wmill.client", "qualname": "Windmill.sign_s3_objects", "kind": "function", "doc": "\n", "signature": "(\tself,\ts3_objects: list[wmill.s3_types.S3Object | str]) -> list[wmill.s3_types.S3Object]:", "funcdef": "def"}, "wmill.client.Windmill.sign_s3_object": {"fullname": "wmill.client.Windmill.sign_s3_object", "modulename": "wmill.client", "qualname": "Windmill.sign_s3_object", "kind": "function", "doc": "\n", "signature": "(\tself,\ts3_object: wmill.s3_types.S3Object | str) -> wmill.s3_types.S3Object:", "funcdef": "def"}, "wmill.client.Windmill.whoami": {"fullname": "wmill.client.Windmill.whoami", "modulename": "wmill.client", "qualname": "Windmill.whoami", "kind": "function", "doc": "\n", "signature": "(self) -> dict:", "funcdef": "def"}, "wmill.client.Windmill.user": {"fullname": "wmill.client.Windmill.user", "modulename": "wmill.client", "qualname": "Windmill.user", "kind": "variable", "doc": "\n", "annotation": ": dict"}, "wmill.client.Windmill.state_path": {"fullname": "wmill.client.Windmill.state_path", "modulename": "wmill.client", "qualname": "Windmill.state_path", "kind": "variable", "doc": "\n", "annotation": ": str"}, "wmill.client.Windmill.state": {"fullname": "wmill.client.Windmill.state", "modulename": "wmill.client", "qualname": "Windmill.state", "kind": "variable", "doc": "\n", "annotation": ": Any"}, "wmill.client.Windmill.set_shared_state_pickle": {"fullname": "wmill.client.Windmill.set_shared_state_pickle", "modulename": "wmill.client", "qualname": "Windmill.set_shared_state_pickle", "kind": "function", "doc": "Set the state in the shared folder using pickle
\n", "signature": "(value: Any, path: str = 'state.pickle') -> None:", "funcdef": "def"}, "wmill.client.Windmill.get_shared_state_pickle": {"fullname": "wmill.client.Windmill.get_shared_state_pickle", "modulename": "wmill.client", "qualname": "Windmill.get_shared_state_pickle", "kind": "function", "doc": "Get the state in the shared folder using pickle
\n", "signature": "(path: str = 'state.pickle') -> Any:", "funcdef": "def"}, "wmill.client.Windmill.set_shared_state": {"fullname": "wmill.client.Windmill.set_shared_state", "modulename": "wmill.client", "qualname": "Windmill.set_shared_state", "kind": "function", "doc": "Set the state in the shared folder using pickle
\n", "signature": "(value: Any, path: str = 'state.json') -> None:", "funcdef": "def"}, "wmill.client.Windmill.get_shared_state": {"fullname": "wmill.client.Windmill.get_shared_state", "modulename": "wmill.client", "qualname": "Windmill.get_shared_state", "kind": "function", "doc": "Get the state in the shared folder using pickle
\n", "signature": "(path: str = 'state.json') -> None:", "funcdef": "def"}, "wmill.client.Windmill.get_resume_urls": {"fullname": "wmill.client.Windmill.get_resume_urls", "modulename": "wmill.client", "qualname": "Windmill.get_resume_urls", "kind": "function", "doc": "\n", "signature": "(self, approver: str = None) -> dict:", "funcdef": "def"}, "wmill.client.Windmill.request_interactive_slack_approval": {"fullname": "wmill.client.Windmill.request_interactive_slack_approval", "modulename": "wmill.client", "qualname": "Windmill.request_interactive_slack_approval", "kind": "function", "doc": "Sends an interactive approval request via Slack, allowing optional customization of the message, approver, and form fields.
\n\n[Enterprise Edition Only] To include form fields in the Slack approval request, use the \"Advanced -> Suspend -> Form\" functionality.\nLearn more at: https://www.windmill.dev/docs/flows/flow_approval#form
\n\n\n\n\nNone
\n
Usage Example:
\n\n\n\n\n\n\n\n\nclient.request_interactive_slack_approval(\n ... slack_resource_path=\"/u/alex/my_slack_resource\",\n ... channel_id=\"admins-slack-channel\",\n ... message=\"Please approve this request\",\n ... approver=\"approver123\",\n ... default_args_json={\"key1\": \"value1\", \"key2\": 42},\n ... dynamic_enums_json={\"foo\": [\"choice1\", \"choice2\"], \"bar\": [\"optionA\", \"optionB\"]},\n ... )
\n
Notes:
\n\nWM_FLOW_JOB_ID, WM_FLOW_STEP_ID) to ensure it is run in the appropriate context.Get email from workspace username\nThis method is particularly useful for apps that require the email address of the viewer.\nIndeed, in the viewer context WM_USERNAME is set to the username of the viewer but WM_EMAIL is set to the email of the creator of the app.
\n", "signature": "(self, username: str) -> str:", "funcdef": "def"}, "wmill.client.Windmill.send_teams_message": {"fullname": "wmill.client.Windmill.send_teams_message", "modulename": "wmill.client", "qualname": "Windmill.send_teams_message", "kind": "function", "doc": "Send a message to a Microsoft Teams conversation with conversation_id, where success is used to style the message
\n", "signature": "(\tself,\tconversation_id: str,\ttext: str,\tsuccess: bool = True,\tcard_block: dict = None):", "funcdef": "def"}, "wmill.client.init_global_client": {"fullname": "wmill.client.init_global_client", "modulename": "wmill.client", "qualname": "init_global_client", "kind": "function", "doc": "\n", "signature": "(f):", "funcdef": "def"}, "wmill.client.deprecate": {"fullname": "wmill.client.deprecate", "modulename": "wmill.client", "qualname": "deprecate", "kind": "function", "doc": "\n", "signature": "(in_favor_of: str):", "funcdef": "def"}, "wmill.client.get_workspace": {"fullname": "wmill.client.get_workspace", "modulename": "wmill.client", "qualname": "get_workspace", "kind": "function", "doc": "\n", "signature": "() -> str:", "funcdef": "def"}, "wmill.client.get_root_job_id": {"fullname": "wmill.client.get_root_job_id", "modulename": "wmill.client", "qualname": "get_root_job_id", "kind": "function", "doc": "\n", "signature": "(job_id: str | None = None) -> str:", "funcdef": "def"}, "wmill.client.get_version": {"fullname": "wmill.client.get_version", "modulename": "wmill.client", "qualname": "get_version", "kind": "function", "doc": "\n", "signature": "() -> str:", "funcdef": "def"}, "wmill.client.run_script_async": {"fullname": "wmill.client.run_script_async", "modulename": "wmill.client", "qualname": "run_script_async", "kind": "function", "doc": "\n", "signature": "(\thash_or_path: str,\targs: Dict[str, Any] = None,\tscheduled_in_secs: int = None) -> str:", "funcdef": "def"}, "wmill.client.run_flow_async": {"fullname": "wmill.client.run_flow_async", "modulename": "wmill.client", "qualname": "run_flow_async", "kind": "function", "doc": "\n", "signature": "(\tpath: str,\targs: Dict[str, Any] = None,\tscheduled_in_secs: int = None,\tdo_not_track_in_parent: bool = True) -> str:", "funcdef": "def"}, "wmill.client.run_script_sync": {"fullname": "wmill.client.run_script_sync", "modulename": "wmill.client", "qualname": "run_script_sync", "kind": "function", "doc": "\n", "signature": "(\thash: str,\targs: Dict[str, Any] = None,\tverbose: bool = False,\tassert_result_is_not_none: bool = True,\tcleanup: bool = True,\ttimeout: datetime.timedelta = None) -> Any:", "funcdef": "def"}, "wmill.client.run_script_by_path_async": {"fullname": "wmill.client.run_script_by_path_async", "modulename": "wmill.client", "qualname": "run_script_by_path_async", "kind": "function", "doc": "\n", "signature": "(\tpath: str,\targs: Dict[str, Any] = None,\tscheduled_in_secs: Optional[int] = None) -> str:", "funcdef": "def"}, "wmill.client.run_script_by_hash_async": {"fullname": "wmill.client.run_script_by_hash_async", "modulename": "wmill.client", "qualname": "run_script_by_hash_async", "kind": "function", "doc": "\n", "signature": "(\thash_: str,\targs: Dict[str, Any] = None,\tscheduled_in_secs: Optional[int] = None) -> str:", "funcdef": "def"}, "wmill.client.run_script_by_path_sync": {"fullname": "wmill.client.run_script_by_path_sync", "modulename": "wmill.client", "qualname": "run_script_by_path_sync", "kind": "function", "doc": "\n", "signature": "(\tpath: str,\targs: Dict[str, Any] = None,\tverbose: bool = False,\tassert_result_is_not_none: bool = True,\tcleanup: bool = True,\ttimeout: datetime.timedelta = None) -> Any:", "funcdef": "def"}, "wmill.client.get_id_token": {"fullname": "wmill.client.get_id_token", "modulename": "wmill.client", "qualname": "get_id_token", "kind": "function", "doc": "Get a JWT token for the given audience for OIDC purposes to login into third parties like AWS, Vault, GCP, etc.
\n", "signature": "(audience: str) -> str:", "funcdef": "def"}, "wmill.client.get_job_status": {"fullname": "wmill.client.get_job_status", "modulename": "wmill.client", "qualname": "get_job_status", "kind": "function", "doc": "\n", "signature": "(job_id: str) -> Literal['RUNNING', 'WAITING', 'COMPLETED']:", "funcdef": "def"}, "wmill.client.get_result": {"fullname": "wmill.client.get_result", "modulename": "wmill.client", "qualname": "get_result", "kind": "function", "doc": "\n", "signature": "(job_id: str, assert_result_is_not_none=True) -> Dict[str, Any]:", "funcdef": "def"}, "wmill.client.duckdb_connection_settings": {"fullname": "wmill.client.duckdb_connection_settings", "modulename": "wmill.client", "qualname": "duckdb_connection_settings", "kind": "function", "doc": "Convenient helpers that takes an S3 resource as input and returns the settings necessary to\ninitiate an S3 connection from DuckDB
\n", "signature": "(s3_resource_path: str = '') -> wmill.s3_types.DuckDbConnectionSettings:", "funcdef": "def"}, "wmill.client.polars_connection_settings": {"fullname": "wmill.client.polars_connection_settings", "modulename": "wmill.client", "qualname": "polars_connection_settings", "kind": "function", "doc": "Convenient helpers that takes an S3 resource as input and returns the settings necessary to\ninitiate an S3 connection from Polars
\n", "signature": "(s3_resource_path: str = '') -> wmill.s3_types.PolarsConnectionSettings:", "funcdef": "def"}, "wmill.client.boto3_connection_settings": {"fullname": "wmill.client.boto3_connection_settings", "modulename": "wmill.client", "qualname": "boto3_connection_settings", "kind": "function", "doc": "Convenient helpers that takes an S3 resource as input and returns the settings necessary to\ninitiate an S3 connection using boto3
\n", "signature": "(s3_resource_path: str = '') -> wmill.s3_types.Boto3ConnectionSettings:", "funcdef": "def"}, "wmill.client.load_s3_file": {"fullname": "wmill.client.load_s3_file", "modulename": "wmill.client", "qualname": "load_s3_file", "kind": "function", "doc": "Load the entire content of a file stored in S3 as bytes
\n", "signature": "(\ts3object: wmill.s3_types.S3Object | str,\ts3_resource_path: str | None = None) -> bytes:", "funcdef": "def"}, "wmill.client.load_s3_file_reader": {"fullname": "wmill.client.load_s3_file_reader", "modulename": "wmill.client", "qualname": "load_s3_file_reader", "kind": "function", "doc": "Load the content of a file stored in S3
\n", "signature": "(\ts3object: wmill.s3_types.S3Object | str,\ts3_resource_path: str | None = None) -> _io.BufferedReader:", "funcdef": "def"}, "wmill.client.write_s3_file": {"fullname": "wmill.client.write_s3_file", "modulename": "wmill.client", "qualname": "write_s3_file", "kind": "function", "doc": "Upload a file to S3
\n\nContent type will be automatically guessed from path extension if left empty
\n\nSee MDN for content_disposition: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition\nand content_type: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type
\n", "signature": "(\ts3object: wmill.s3_types.S3Object | str | None,\tfile_content: _io.BufferedReader | bytes,\ts3_resource_path: str | None = None,\tcontent_type: str | None = None,\tcontent_disposition: str | None = None) -> wmill.s3_types.S3Object:", "funcdef": "def"}, "wmill.client.sign_s3_objects": {"fullname": "wmill.client.sign_s3_objects", "modulename": "wmill.client", "qualname": "sign_s3_objects", "kind": "function", "doc": "Sign S3 objects to be used by anonymous users in public apps\nReturns a list of signed s3 tokens
\n", "signature": "(\ts3_objects: list[wmill.s3_types.S3Object | str]) -> list[wmill.s3_types.S3Object]:", "funcdef": "def"}, "wmill.client.sign_s3_object": {"fullname": "wmill.client.sign_s3_object", "modulename": "wmill.client", "qualname": "sign_s3_object", "kind": "function", "doc": "Sign S3 object to be used by anonymous users in public apps\nReturns a signed s3 object
\n", "signature": "(s3_object: wmill.s3_types.S3Object | str) -> wmill.s3_types.S3Object:", "funcdef": "def"}, "wmill.client.whoami": {"fullname": "wmill.client.whoami", "modulename": "wmill.client", "qualname": "whoami", "kind": "function", "doc": "Returns the current user
\n", "signature": "() -> dict:", "funcdef": "def"}, "wmill.client.get_state": {"fullname": "wmill.client.get_state", "modulename": "wmill.client", "qualname": "get_state", "kind": "function", "doc": "Get the state
\n", "signature": "() -> Any:", "funcdef": "def"}, "wmill.client.get_resource": {"fullname": "wmill.client.get_resource", "modulename": "wmill.client", "qualname": "get_resource", "kind": "function", "doc": "Get resource from Windmill
\n", "signature": "(path: str, none_if_undefined: bool = False) -> dict | None:", "funcdef": "def"}, "wmill.client.set_resource": {"fullname": "wmill.client.set_resource", "modulename": "wmill.client", "qualname": "set_resource", "kind": "function", "doc": "Set the resource at a given path as a string, creating it if it does not exist
\n", "signature": "(path: str, value: Any, resource_type: str = 'any') -> None:", "funcdef": "def"}, "wmill.client.set_state": {"fullname": "wmill.client.set_state", "modulename": "wmill.client", "qualname": "set_state", "kind": "function", "doc": "Set the state
\n", "signature": "(value: Any) -> None:", "funcdef": "def"}, "wmill.client.set_progress": {"fullname": "wmill.client.set_progress", "modulename": "wmill.client", "qualname": "set_progress", "kind": "function", "doc": "Set the progress
\n", "signature": "(value: int, job_id: Optional[str] = None) -> None:", "funcdef": "def"}, "wmill.client.get_progress": {"fullname": "wmill.client.get_progress", "modulename": "wmill.client", "qualname": "get_progress", "kind": "function", "doc": "Get the progress
\n", "signature": "(job_id: Optional[str] = None) -> Any:", "funcdef": "def"}, "wmill.client.set_shared_state_pickle": {"fullname": "wmill.client.set_shared_state_pickle", "modulename": "wmill.client", "qualname": "set_shared_state_pickle", "kind": "function", "doc": "Set the state in the shared folder using pickle
\n", "signature": "(value: Any, path='state.pickle') -> None:", "funcdef": "def"}, "wmill.client.get_shared_state_pickle": {"fullname": "wmill.client.get_shared_state_pickle", "modulename": "wmill.client", "qualname": "get_shared_state_pickle", "kind": "function", "doc": "Get the state in the shared folder using pickle
\n", "signature": "(path='state.pickle') -> Any:", "funcdef": "def"}, "wmill.client.set_shared_state": {"fullname": "wmill.client.set_shared_state", "modulename": "wmill.client", "qualname": "set_shared_state", "kind": "function", "doc": "Set the state in the shared folder using pickle
\n", "signature": "(value: Any, path='state.json') -> None:", "funcdef": "def"}, "wmill.client.get_shared_state": {"fullname": "wmill.client.get_shared_state", "modulename": "wmill.client", "qualname": "get_shared_state", "kind": "function", "doc": "Get the state in the shared folder using pickle
\n", "signature": "(path='state.json') -> None:", "funcdef": "def"}, "wmill.client.get_variable": {"fullname": "wmill.client.get_variable", "modulename": "wmill.client", "qualname": "get_variable", "kind": "function", "doc": "Returns the variable at a given path as a string
\n", "signature": "(path: str) -> str:", "funcdef": "def"}, "wmill.client.set_variable": {"fullname": "wmill.client.set_variable", "modulename": "wmill.client", "qualname": "set_variable", "kind": "function", "doc": "Set the variable at a given path as a string, creating it if it does not exist
\n", "signature": "(path: str, value: str, is_secret: bool = False) -> None:", "funcdef": "def"}, "wmill.client.get_flow_user_state": {"fullname": "wmill.client.get_flow_user_state", "modulename": "wmill.client", "qualname": "get_flow_user_state", "kind": "function", "doc": "Get the user state of a flow at a given key
\n", "signature": "(key: str) -> Any:", "funcdef": "def"}, "wmill.client.set_flow_user_state": {"fullname": "wmill.client.set_flow_user_state", "modulename": "wmill.client", "qualname": "set_flow_user_state", "kind": "function", "doc": "Set the user state of a flow at a given key
\n", "signature": "(key: str, value: Any) -> None:", "funcdef": "def"}, "wmill.client.get_state_path": {"fullname": "wmill.client.get_state_path", "modulename": "wmill.client", "qualname": "get_state_path", "kind": "function", "doc": "\n", "signature": "() -> str:", "funcdef": "def"}, "wmill.client.get_resume_urls": {"fullname": "wmill.client.get_resume_urls", "modulename": "wmill.client", "qualname": "get_resume_urls", "kind": "function", "doc": "\n", "signature": "(approver: str = None) -> dict:", "funcdef": "def"}, "wmill.client.request_interactive_slack_approval": {"fullname": "wmill.client.request_interactive_slack_approval", "modulename": "wmill.client", "qualname": "request_interactive_slack_approval", "kind": "function", "doc": "\n", "signature": "(\tslack_resource_path: str,\tchannel_id: str,\tmessage: str = None,\tapprover: str = None,\tdefault_args_json: dict = None,\tdynamic_enums_json: dict = None) -> None:", "funcdef": "def"}, "wmill.client.send_teams_message": {"fullname": "wmill.client.send_teams_message", "modulename": "wmill.client", "qualname": "send_teams_message", "kind": "function", "doc": "\n", "signature": "(\tconversation_id: str,\ttext: str,\tsuccess: bool,\tcard_block: dict = None):", "funcdef": "def"}, "wmill.client.cancel_running": {"fullname": "wmill.client.cancel_running", "modulename": "wmill.client", "qualname": "cancel_running", "kind": "function", "doc": "Cancel currently running executions of the same script.
\n", "signature": "() -> dict:", "funcdef": "def"}, "wmill.client.run_script": {"fullname": "wmill.client.run_script", "modulename": "wmill.client", "qualname": "run_script", "kind": "function", "doc": "Run script synchronously and return its result.
\n\nDeprecated since version Use run_script_by_path or run_script_by_hash instead..
\n", "signature": "(\tpath: str = None,\thash_: str = None,\targs: dict = None,\ttimeout: datetime.timedelta | int | float = None,\tverbose: bool = False,\tcleanup: bool = True,\tassert_result_is_not_none: bool = True) -> Any:", "funcdef": "def"}, "wmill.client.run_script_by_path": {"fullname": "wmill.client.run_script_by_path", "modulename": "wmill.client", "qualname": "run_script_by_path", "kind": "function", "doc": "Run script by path synchronously and return its result.
\n", "signature": "(\tpath: str,\targs: dict = None,\ttimeout: datetime.timedelta | int | float = None,\tverbose: bool = False,\tcleanup: bool = True,\tassert_result_is_not_none: bool = True) -> Any:", "funcdef": "def"}, "wmill.client.run_script_by_hash": {"fullname": "wmill.client.run_script_by_hash", "modulename": "wmill.client", "qualname": "run_script_by_hash", "kind": "function", "doc": "Run script by hash synchronously and return its result.
\n", "signature": "(\thash_: str,\targs: dict = None,\ttimeout: datetime.timedelta | int | float = None,\tverbose: bool = False,\tcleanup: bool = True,\tassert_result_is_not_none: bool = True) -> Any:", "funcdef": "def"}, "wmill.client.username_to_email": {"fullname": "wmill.client.username_to_email", "modulename": "wmill.client", "qualname": "username_to_email", "kind": "function", "doc": "Get email from workspace username\nThis method is particularly useful for apps that require the email address of the viewer.\nIndeed, in the viewer context WM_USERNAME is set to the username of the viewer but WM_EMAIL is set to the email of the creator of the app.
\n", "signature": "(username: str) -> str:", "funcdef": "def"}, "wmill.client.task": {"fullname": "wmill.client.task", "modulename": "wmill.client", "qualname": "task", "kind": "function", "doc": "\n", "signature": "(*args, **kwargs):", "funcdef": "def"}, "wmill.client.parse_resource_syntax": {"fullname": "wmill.client.parse_resource_syntax", "modulename": "wmill.client", "qualname": "parse_resource_syntax", "kind": "function", "doc": "Parse resource syntax from string.
\n", "signature": "(s: str) -> Optional[str]:", "funcdef": "def"}, "wmill.client.parse_s3_object": {"fullname": "wmill.client.parse_s3_object", "modulename": "wmill.client", "qualname": "parse_s3_object", "kind": "function", "doc": "Parse S3 object from string or S3Object format.
\n", "signature": "(s3_object: wmill.s3_types.S3Object | str) -> wmill.s3_types.S3Object:", "funcdef": "def"}, "wmill.client.parse_variable_syntax": {"fullname": "wmill.client.parse_variable_syntax", "modulename": "wmill.client", "qualname": "parse_variable_syntax", "kind": "function", "doc": "Parse variable syntax from string.
\n", "signature": "(s: str) -> Optional[str]:", "funcdef": "def"}, "wmill.client.append_to_result_stream": {"fullname": "wmill.client.append_to_result_stream", "modulename": "wmill.client", "qualname": "append_to_result_stream", "kind": "function", "doc": "Append a text to the result stream.
\n\nArgs:\n text: text to append to the result stream
\n", "signature": "(text: str) -> None:", "funcdef": "def"}, "wmill.client.stream_result": {"fullname": "wmill.client.stream_result", "modulename": "wmill.client", "qualname": "stream_result", "kind": "function", "doc": "Stream to the result stream.
\n\nArgs:\n stream: stream to stream to the result stream
\n", "signature": "(stream) -> None:", "funcdef": "def"}, "wmill.s3_reader": {"fullname": "wmill.s3_reader", "modulename": "wmill.s3_reader", "kind": "module", "doc": "\n"}, "wmill.s3_reader.S3BufferedReader": {"fullname": "wmill.s3_reader.S3BufferedReader", "modulename": "wmill.s3_reader", "qualname": "S3BufferedReader", "kind": "class", "doc": "Create a new buffered reader using the given readable raw IO object.
\n", "bases": "_io.BufferedReader"}, "wmill.s3_reader.S3BufferedReader.__init__": {"fullname": "wmill.s3_reader.S3BufferedReader.__init__", "modulename": "wmill.s3_reader", "qualname": "S3BufferedReader.__init__", "kind": "function", "doc": "\n", "signature": "(\tworkspace: str,\twindmill_client: httpx.Client,\tfile_key: str,\ts3_resource_path: Optional[str],\tstorage: Optional[str])"}, "wmill.s3_reader.S3BufferedReader.peek": {"fullname": "wmill.s3_reader.S3BufferedReader.peek", "modulename": "wmill.s3_reader", "qualname": "S3BufferedReader.peek", "kind": "function", "doc": "\n", "signature": "(self, size=0):", "funcdef": "def"}, "wmill.s3_reader.S3BufferedReader.read": {"fullname": "wmill.s3_reader.S3BufferedReader.read", "modulename": "wmill.s3_reader", "qualname": "S3BufferedReader.read", "kind": "function", "doc": "Read and return up to n bytes.
\n\nIf the argument is omitted, None, or negative, reads and\nreturns all data until EOF.
\n\nIf the argument is positive, and the underlying raw stream is\nnot 'interactive', multiple raw reads may be issued to satisfy\nthe byte count (unless EOF is reached first). But for\ninteractive raw streams (as well as sockets and pipes), at most\none raw read will be issued, and a short result does not imply\nthat EOF is imminent.
\n\nReturns an empty bytes object on EOF.
\n\nReturns None if the underlying raw stream was open in non-blocking\nmode and no data is available at the moment.
\n", "signature": "(self, size=-1):", "funcdef": "def"}, "wmill.s3_reader.S3BufferedReader.read1": {"fullname": "wmill.s3_reader.S3BufferedReader.read1", "modulename": "wmill.s3_reader", "qualname": "S3BufferedReader.read1", "kind": "function", "doc": "Read and return up to n bytes, with at most one read() call\nto the underlying raw stream. A short result does not imply\nthat EOF is imminent.
\n\nReturns an empty bytes object on EOF.
\n", "signature": "(self, size=-1):", "funcdef": "def"}, "wmill.s3_reader.bytes_generator": {"fullname": "wmill.s3_reader.bytes_generator", "modulename": "wmill.s3_reader", "qualname": "bytes_generator", "kind": "function", "doc": "\n", "signature": "(buffered_reader: Union[_io.BufferedReader, _io.BytesIO]):", "funcdef": "def"}, "wmill.s3_types": {"fullname": "wmill.s3_types", "modulename": "wmill.s3_types", "kind": "module", "doc": "\n"}, "wmill.s3_types.S3Object": {"fullname": "wmill.s3_types.S3Object", "modulename": "wmill.s3_types", "qualname": "S3Object", "kind": "class", "doc": "\n", "bases": "builtins.dict"}, "wmill.s3_types.S3Object.s3": {"fullname": "wmill.s3_types.S3Object.s3", "modulename": "wmill.s3_types", "qualname": "S3Object.s3", "kind": "variable", "doc": "\n", "annotation": ": str"}, "wmill.s3_types.S3Object.storage": {"fullname": "wmill.s3_types.S3Object.storage", "modulename": "wmill.s3_types", "qualname": "S3Object.storage", "kind": "variable", "doc": "\n", "annotation": ": Optional[str]"}, "wmill.s3_types.S3Object.presigned": {"fullname": "wmill.s3_types.S3Object.presigned", "modulename": "wmill.s3_types", "qualname": "S3Object.presigned", "kind": "variable", "doc": "\n", "annotation": ": Optional[str]"}, "wmill.s3_types.S3FsClientKwargs": {"fullname": "wmill.s3_types.S3FsClientKwargs", "modulename": "wmill.s3_types", "qualname": "S3FsClientKwargs", "kind": "class", "doc": "\n", "bases": "builtins.dict"}, "wmill.s3_types.S3FsClientKwargs.region_name": {"fullname": "wmill.s3_types.S3FsClientKwargs.region_name", "modulename": "wmill.s3_types", "qualname": "S3FsClientKwargs.region_name", "kind": "variable", "doc": "\n", "annotation": ": str"}, "wmill.s3_types.S3FsArgs": {"fullname": "wmill.s3_types.S3FsArgs", "modulename": "wmill.s3_types", "qualname": "S3FsArgs", "kind": "class", "doc": "\n", "bases": "builtins.dict"}, "wmill.s3_types.S3FsArgs.endpoint_url": {"fullname": "wmill.s3_types.S3FsArgs.endpoint_url", "modulename": "wmill.s3_types", "qualname": "S3FsArgs.endpoint_url", "kind": "variable", "doc": "\n", "annotation": ": str"}, "wmill.s3_types.S3FsArgs.key": {"fullname": "wmill.s3_types.S3FsArgs.key", "modulename": "wmill.s3_types", "qualname": "S3FsArgs.key", "kind": "variable", "doc": "\n", "annotation": ": str"}, "wmill.s3_types.S3FsArgs.secret": {"fullname": "wmill.s3_types.S3FsArgs.secret", "modulename": "wmill.s3_types", "qualname": "S3FsArgs.secret", "kind": "variable", "doc": "\n", "annotation": ": str"}, "wmill.s3_types.S3FsArgs.use_ssl": {"fullname": "wmill.s3_types.S3FsArgs.use_ssl", "modulename": "wmill.s3_types", "qualname": "S3FsArgs.use_ssl", "kind": "variable", "doc": "\n", "annotation": ": bool"}, "wmill.s3_types.S3FsArgs.cache_regions": {"fullname": "wmill.s3_types.S3FsArgs.cache_regions", "modulename": "wmill.s3_types", "qualname": "S3FsArgs.cache_regions", "kind": "variable", "doc": "\n", "annotation": ": bool"}, "wmill.s3_types.S3FsArgs.client_kwargs": {"fullname": "wmill.s3_types.S3FsArgs.client_kwargs", "modulename": "wmill.s3_types", "qualname": "S3FsArgs.client_kwargs", "kind": "variable", "doc": "\n", "annotation": ": wmill.s3_types.S3FsClientKwargs"}, "wmill.s3_types.StorageOptions": {"fullname": "wmill.s3_types.StorageOptions", "modulename": "wmill.s3_types", "qualname": "StorageOptions", "kind": "class", "doc": "\n", "bases": "builtins.dict"}, "wmill.s3_types.StorageOptions.aws_endpoint_url": {"fullname": "wmill.s3_types.StorageOptions.aws_endpoint_url", "modulename": "wmill.s3_types", "qualname": "StorageOptions.aws_endpoint_url", "kind": "variable", "doc": "\n", "annotation": ": str"}, "wmill.s3_types.StorageOptions.aws_access_key_id": {"fullname": "wmill.s3_types.StorageOptions.aws_access_key_id", "modulename": "wmill.s3_types", "qualname": "StorageOptions.aws_access_key_id", "kind": "variable", "doc": "\n", "annotation": ": str"}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"fullname": "wmill.s3_types.StorageOptions.aws_secret_access_key", "modulename": "wmill.s3_types", "qualname": "StorageOptions.aws_secret_access_key", "kind": "variable", "doc": "\n", "annotation": ": str"}, "wmill.s3_types.StorageOptions.aws_region": {"fullname": "wmill.s3_types.StorageOptions.aws_region", "modulename": "wmill.s3_types", "qualname": "StorageOptions.aws_region", "kind": "variable", "doc": "\n", "annotation": ": str"}, "wmill.s3_types.StorageOptions.aws_allow_http": {"fullname": "wmill.s3_types.StorageOptions.aws_allow_http", "modulename": "wmill.s3_types", "qualname": "StorageOptions.aws_allow_http", "kind": "variable", "doc": "\n", "annotation": ": str"}, "wmill.s3_types.PolarsConnectionSettings": {"fullname": "wmill.s3_types.PolarsConnectionSettings", "modulename": "wmill.s3_types", "qualname": "PolarsConnectionSettings", "kind": "class", "doc": "\n", "bases": "builtins.dict"}, "wmill.s3_types.PolarsConnectionSettings.s3fs_args": {"fullname": "wmill.s3_types.PolarsConnectionSettings.s3fs_args", "modulename": "wmill.s3_types", "qualname": "PolarsConnectionSettings.s3fs_args", "kind": "variable", "doc": "\n", "annotation": ": wmill.s3_types.S3FsArgs"}, "wmill.s3_types.PolarsConnectionSettings.storage_options": {"fullname": "wmill.s3_types.PolarsConnectionSettings.storage_options", "modulename": "wmill.s3_types", "qualname": "PolarsConnectionSettings.storage_options", "kind": "variable", "doc": "\n", "annotation": ": wmill.s3_types.StorageOptions"}, "wmill.s3_types.Boto3ConnectionSettings": {"fullname": "wmill.s3_types.Boto3ConnectionSettings", "modulename": "wmill.s3_types", "qualname": "Boto3ConnectionSettings", "kind": "class", "doc": "\n", "bases": "builtins.dict"}, "wmill.s3_types.Boto3ConnectionSettings.endpoint_url": {"fullname": "wmill.s3_types.Boto3ConnectionSettings.endpoint_url", "modulename": "wmill.s3_types", "qualname": "Boto3ConnectionSettings.endpoint_url", "kind": "variable", "doc": "\n", "annotation": ": str"}, "wmill.s3_types.Boto3ConnectionSettings.region_name": {"fullname": "wmill.s3_types.Boto3ConnectionSettings.region_name", "modulename": "wmill.s3_types", "qualname": "Boto3ConnectionSettings.region_name", "kind": "variable", "doc": "\n", "annotation": ": str"}, "wmill.s3_types.Boto3ConnectionSettings.use_ssl": {"fullname": "wmill.s3_types.Boto3ConnectionSettings.use_ssl", "modulename": "wmill.s3_types", "qualname": "Boto3ConnectionSettings.use_ssl", "kind": "variable", "doc": "\n", "annotation": ": bool"}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"fullname": "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id", "modulename": "wmill.s3_types", "qualname": "Boto3ConnectionSettings.aws_access_key_id", "kind": "variable", "doc": "\n", "annotation": ": str"}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"fullname": "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key", "modulename": "wmill.s3_types", "qualname": "Boto3ConnectionSettings.aws_secret_access_key", "kind": "variable", "doc": "\n", "annotation": ": str"}, "wmill.s3_types.DuckDbConnectionSettings": {"fullname": "wmill.s3_types.DuckDbConnectionSettings", "modulename": "wmill.s3_types", "qualname": "DuckDbConnectionSettings", "kind": "class", "doc": "\n", "bases": "builtins.dict"}, "wmill.s3_types.DuckDbConnectionSettings.connection_settings_str": {"fullname": "wmill.s3_types.DuckDbConnectionSettings.connection_settings_str", "modulename": "wmill.s3_types", "qualname": "DuckDbConnectionSettings.connection_settings_str", "kind": "variable", "doc": "\n", "annotation": ": str"}}, "docInfo": {"wmill": {"qualname": 0, "fullname": 1, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.client": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.client.logger": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 8, "signature": 0, "bases": 0, "doc": 3}, "wmill.client.JobStatus": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 12, "signature": 0, "bases": 0, "doc": 3}, "wmill.client.Windmill": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.client.Windmill.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 45, "bases": 0, "doc": 3}, "wmill.client.Windmill.base_url": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.client.Windmill.token": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.client.Windmill.headers": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.client.Windmill.verify": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.client.Windmill.client": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.client.Windmill.workspace": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.client.Windmill.path": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.client.Windmill.mocked_api": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.client.Windmill.get_mocked_api": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 20, "bases": 0, "doc": 3}, "wmill.client.Windmill.get_client": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 3}, "wmill.client.Windmill.get": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 43, "bases": 0, "doc": 3}, "wmill.client.Windmill.post": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 43, "bases": 0, "doc": 3}, "wmill.client.Windmill.create_token": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 42, "bases": 0, "doc": 3}, "wmill.client.Windmill.run_script_async": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 90, "bases": 0, "doc": 33}, "wmill.client.Windmill.run_script_by_path_async": {"qualname": 6, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 60, "bases": 0, "doc": 14}, "wmill.client.Windmill.run_script_by_hash_async": {"qualname": 6, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 65, "bases": 0, "doc": 14}, "wmill.client.Windmill.run_flow_async": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 86, "bases": 0, "doc": 12}, "wmill.client.Windmill.run_script": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 169, "bases": 0, "doc": 29}, "wmill.client.Windmill.run_script_by_path": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 143, "bases": 0, "doc": 12}, "wmill.client.Windmill.run_script_by_hash": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 144, "bases": 0, "doc": 12}, "wmill.client.Windmill.wait_job": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 118, "bases": 0, "doc": 3}, "wmill.client.Windmill.cancel_running": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 11}, "wmill.client.Windmill.get_job": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 3}, "wmill.client.Windmill.get_root_job_id": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 38, "bases": 0, "doc": 3}, "wmill.client.Windmill.get_id_token": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 3}, "wmill.client.Windmill.get_job_status": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 55, "bases": 0, "doc": 3}, "wmill.client.Windmill.get_result": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 46, "bases": 0, "doc": 3}, "wmill.client.Windmill.get_variable": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 3}, "wmill.client.Windmill.set_variable": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 52, "bases": 0, "doc": 3}, "wmill.client.Windmill.get_resource": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 49, "bases": 0, "doc": 3}, "wmill.client.Windmill.set_resource": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 42, "bases": 0, "doc": 3}, "wmill.client.Windmill.set_state": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 3}, "wmill.client.Windmill.set_progress": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 45, "bases": 0, "doc": 3}, "wmill.client.Windmill.get_progress": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 38, "bases": 0, "doc": 3}, "wmill.client.Windmill.set_flow_user_state": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 34, "bases": 0, "doc": 13}, "wmill.client.Windmill.get_flow_user_state": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 13}, "wmill.client.Windmill.version": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.client.Windmill.get_duckdb_connection_settings": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 55, "bases": 0, "doc": 23}, "wmill.client.Windmill.get_polars_connection_settings": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 49, "bases": 0, "doc": 23}, "wmill.client.Windmill.get_boto3_connection_settings": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 49, "bases": 0, "doc": 23}, "wmill.client.Windmill.load_s3_file": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 62, "bases": 0, "doc": 52}, "wmill.client.Windmill.load_s3_file_reader": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 68, "bases": 0, "doc": 51}, "wmill.client.Windmill.write_s3_file": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 153, "bases": 0, "doc": 77}, "wmill.client.Windmill.sign_s3_objects": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 67, "bases": 0, "doc": 3}, "wmill.client.Windmill.sign_s3_object": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 55, "bases": 0, "doc": 3}, "wmill.client.Windmill.whoami": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 3}, "wmill.client.Windmill.user": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.client.Windmill.state_path": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.client.Windmill.state": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.client.Windmill.set_shared_state_pickle": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 41, "bases": 0, "doc": 11}, "wmill.client.Windmill.get_shared_state_pickle": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 31, "bases": 0, "doc": 11}, "wmill.client.Windmill.set_shared_state": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 41, "bases": 0, "doc": 11}, "wmill.client.Windmill.get_shared_state": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 31, "bases": 0, "doc": 11}, "wmill.client.Windmill.get_resume_urls": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 31, "bases": 0, "doc": 3}, "wmill.client.Windmill.request_interactive_slack_approval": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 116, "bases": 0, "doc": 344}, "wmill.client.Windmill.username_to_email": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 52}, "wmill.client.Windmill.send_teams_message": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 72, "bases": 0, "doc": 21}, "wmill.client.init_global_client": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 3}, "wmill.client.deprecate": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 18, "bases": 0, "doc": 3}, "wmill.client.get_workspace": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 10, "bases": 0, "doc": 3}, "wmill.client.get_root_job_id": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 33, "bases": 0, "doc": 3}, "wmill.client.get_version": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 10, "bases": 0, "doc": 3}, "wmill.client.run_script_async": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 72, "bases": 0, "doc": 3}, "wmill.client.run_flow_async": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 92, "bases": 0, "doc": 3}, "wmill.client.run_script_sync": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 131, "bases": 0, "doc": 3}, "wmill.client.run_script_by_path_async": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 76, "bases": 0, "doc": 3}, "wmill.client.run_script_by_hash_async": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 77, "bases": 0, "doc": 3}, "wmill.client.run_script_by_path_sync": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 131, "bases": 0, "doc": 3}, "wmill.client.get_id_token": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 24}, "wmill.client.get_job_status": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 50, "bases": 0, "doc": 3}, "wmill.client.get_result": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 46, "bases": 0, "doc": 3}, "wmill.client.duckdb_connection_settings": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 42, "bases": 0, "doc": 23}, "wmill.client.polars_connection_settings": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 42, "bases": 0, "doc": 23}, "wmill.client.boto3_connection_settings": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 42, "bases": 0, "doc": 23}, "wmill.client.load_s3_file": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 63, "bases": 0, "doc": 14}, "wmill.client.load_s3_file_reader": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 69, "bases": 0, "doc": 11}, "wmill.client.write_s3_file": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 154, "bases": 0, "doc": 45}, "wmill.client.sign_s3_objects": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 61, "bases": 0, "doc": 21}, "wmill.client.sign_s3_object": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 48, "bases": 0, "doc": 19}, "wmill.client.whoami": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 10, "bases": 0, "doc": 6}, "wmill.client.get_state": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 10, "bases": 0, "doc": 5}, "wmill.client.get_resource": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 44, "bases": 0, "doc": 6}, "wmill.client.set_resource": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 51, "bases": 0, "doc": 19}, "wmill.client.set_state": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 5}, "wmill.client.set_progress": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 43, "bases": 0, "doc": 5}, "wmill.client.get_progress": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 33, "bases": 0, "doc": 5}, "wmill.client.set_shared_state_pickle": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 34, "bases": 0, "doc": 11}, "wmill.client.get_shared_state_pickle": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 11}, "wmill.client.set_shared_state": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 34, "bases": 0, "doc": 11}, "wmill.client.get_shared_state": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 11}, "wmill.client.get_variable": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 12}, "wmill.client.set_variable": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 47, "bases": 0, "doc": 19}, "wmill.client.get_flow_user_state": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 13}, "wmill.client.set_flow_user_state": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 29, "bases": 0, "doc": 13}, "wmill.client.get_state_path": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 10, "bases": 0, "doc": 3}, "wmill.client.get_resume_urls": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 26, "bases": 0, "doc": 3}, "wmill.client.request_interactive_slack_approval": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 110, "bases": 0, "doc": 3}, "wmill.client.send_teams_message": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 59, "bases": 0, "doc": 3}, "wmill.client.cancel_running": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 10, "bases": 0, "doc": 11}, "wmill.client.run_script": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 157, "bases": 0, "doc": 29}, "wmill.client.run_script_by_path": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 131, "bases": 0, "doc": 12}, "wmill.client.run_script_by_hash": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 132, "bases": 0, "doc": 12}, "wmill.client.username_to_email": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 52}, "wmill.client.task": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 20, "bases": 0, "doc": 3}, "wmill.client.parse_resource_syntax": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 8}, "wmill.client.parse_s3_object": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 48, "bases": 0, "doc": 11}, "wmill.client.parse_variable_syntax": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 8}, "wmill.client.append_to_result_stream": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 21}, "wmill.client.stream_result": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 19}, "wmill.s3_reader": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_reader.S3BufferedReader": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 3, "doc": 15}, "wmill.s3_reader.S3BufferedReader.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 80, "bases": 0, "doc": 3}, "wmill.s3_reader.S3BufferedReader.peek": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 3}, "wmill.s3_reader.S3BufferedReader.read": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 124}, "wmill.s3_reader.S3BufferedReader.read1": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 41}, "wmill.s3_reader.bytes_generator": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 41, "bases": 0, "doc": 3}, "wmill.s3_types": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.S3Object": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 3}, "wmill.s3_types.S3Object.s3": {"qualname": 2, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.S3Object.storage": {"qualname": 2, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.S3Object.presigned": {"qualname": 2, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.S3FsClientKwargs": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 3}, "wmill.s3_types.S3FsClientKwargs.region_name": {"qualname": 3, "fullname": 6, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.S3FsArgs": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 3}, "wmill.s3_types.S3FsArgs.endpoint_url": {"qualname": 3, "fullname": 6, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.S3FsArgs.key": {"qualname": 2, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.S3FsArgs.secret": {"qualname": 2, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.S3FsArgs.use_ssl": {"qualname": 3, "fullname": 6, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.S3FsArgs.cache_regions": {"qualname": 3, "fullname": 6, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.S3FsArgs.client_kwargs": {"qualname": 3, "fullname": 6, "annotation": 5, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.StorageOptions": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 3}, "wmill.s3_types.StorageOptions.aws_endpoint_url": {"qualname": 4, "fullname": 7, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.StorageOptions.aws_access_key_id": {"qualname": 5, "fullname": 8, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"qualname": 5, "fullname": 8, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.StorageOptions.aws_region": {"qualname": 3, "fullname": 6, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.StorageOptions.aws_allow_http": {"qualname": 4, "fullname": 7, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.PolarsConnectionSettings": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 3}, "wmill.s3_types.PolarsConnectionSettings.s3fs_args": {"qualname": 3, "fullname": 6, "annotation": 5, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.PolarsConnectionSettings.storage_options": {"qualname": 3, "fullname": 6, "annotation": 5, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.Boto3ConnectionSettings": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 3}, "wmill.s3_types.Boto3ConnectionSettings.endpoint_url": {"qualname": 3, "fullname": 6, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.Boto3ConnectionSettings.region_name": {"qualname": 3, "fullname": 6, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.Boto3ConnectionSettings.use_ssl": {"qualname": 3, "fullname": 6, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"qualname": 5, "fullname": 8, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"qualname": 5, "fullname": 8, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "wmill.s3_types.DuckDbConnectionSettings": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 3}, "wmill.s3_types.DuckDbConnectionSettings.connection_settings_str": {"qualname": 4, "fullname": 7, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}}, "length": 153, "save": true}, "index": {"qualname": {"root": {"docs": {"wmill.client.Windmill.__init__": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}}, "df": 2, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.logger": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}}, "df": 4}}}}, "j": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {"wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.Windmill.get_job": {"tf": 1}, "wmill.client.Windmill.get_root_job_id": {"tf": 1}, "wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.get_root_job_id": {"tf": 1}, "wmill.client.get_job_status": {"tf": 1}}, "df": 6, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.JobStatus": {"tf": 1}}, "df": 1}}}}}}}}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill": {"tf": 1}, "wmill.client.Windmill.__init__": {"tf": 1}, "wmill.client.Windmill.base_url": {"tf": 1}, "wmill.client.Windmill.token": {"tf": 1}, "wmill.client.Windmill.headers": {"tf": 1}, "wmill.client.Windmill.verify": {"tf": 1}, "wmill.client.Windmill.client": {"tf": 1}, "wmill.client.Windmill.workspace": {"tf": 1}, "wmill.client.Windmill.path": {"tf": 1}, "wmill.client.Windmill.mocked_api": {"tf": 1}, "wmill.client.Windmill.get_mocked_api": {"tf": 1}, "wmill.client.Windmill.get_client": {"tf": 1}, "wmill.client.Windmill.get": {"tf": 1}, "wmill.client.Windmill.post": {"tf": 1}, "wmill.client.Windmill.create_token": {"tf": 1}, "wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.Windmill.get_job": {"tf": 1}, "wmill.client.Windmill.get_root_job_id": {"tf": 1}, "wmill.client.Windmill.get_id_token": {"tf": 1}, "wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.Windmill.get_variable": {"tf": 1}, "wmill.client.Windmill.set_variable": {"tf": 1}, "wmill.client.Windmill.get_resource": {"tf": 1}, "wmill.client.Windmill.set_resource": {"tf": 1}, "wmill.client.Windmill.set_state": {"tf": 1}, "wmill.client.Windmill.set_progress": {"tf": 1}, "wmill.client.Windmill.get_progress": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.version": {"tf": 1}, "wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.Windmill.sign_s3_objects": {"tf": 1}, "wmill.client.Windmill.sign_s3_object": {"tf": 1}, "wmill.client.Windmill.whoami": {"tf": 1}, "wmill.client.Windmill.user": {"tf": 1}, "wmill.client.Windmill.state_path": {"tf": 1}, "wmill.client.Windmill.state": {"tf": 1}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.Windmill.get_resume_urls": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.Windmill.send_teams_message": {"tf": 1}}, "df": 59}}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.workspace": {"tf": 1}, "wmill.client.get_workspace": {"tf": 1}}, "df": 2}}}}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.wait_job": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}}, "df": 2}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {"wmill.client.Windmill.whoami": {"tf": 1}, "wmill.client.whoami": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.__init__": {"tf": 1}, "wmill.client.init_global_client": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}}, "df": 3}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}}, "df": 2}}}}}}}}}}, "d": {"docs": {"wmill.client.Windmill.get_root_job_id": {"tf": 1}, "wmill.client.Windmill.get_id_token": {"tf": 1}, "wmill.client.get_root_job_id": {"tf": 1}, "wmill.client.get_id_token": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_access_key_id": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"tf": 1}}, "df": 6}}, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.base_url": {"tf": 1}}, "df": 1}}}, "y": {"docs": {"wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 9, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_reader.bytes_generator": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"3": {"docs": {"wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}}, "df": 2, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.Boto3ConnectionSettings": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.endpoint_url": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.region_name": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.use_ssl": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"tf": 1}}, "df": 6}}}}}}}}}}}}}}}}}}}, "docs": {}, "df": 0}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.base_url": {"tf": 1}, "wmill.s3_types.S3FsArgs.endpoint_url": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_endpoint_url": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.endpoint_url": {"tf": 1}}, "df": 4, "s": {"docs": {"wmill.client.Windmill.get_resume_urls": {"tf": 1}, "wmill.client.get_resume_urls": {"tf": 1}}, "df": 2}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"wmill.s3_types.S3FsArgs.use_ssl": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.use_ssl": {"tf": 1}}, "df": 2, "r": {"docs": {"wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.user": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}}, "df": 5, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 2}}}}}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}, "wmill.client.append_to_result_stream": {"tf": 1}}, "df": 3, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.token": {"tf": 1}, "wmill.client.Windmill.create_token": {"tf": 1}, "wmill.client.Windmill.get_id_token": {"tf": 1}, "wmill.client.get_id_token": {"tf": 1}}, "df": 4}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.send_teams_message": {"tf": 1}}, "df": 2}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "k": {"docs": {"wmill.client.task": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.headers": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 4}}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {"wmill.s3_types.StorageOptions.aws_allow_http": {"tf": 1}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.verify": {"tf": 1}}, "df": 1}}}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.version": {"tf": 1}, "wmill.client.get_version": {"tf": 1}}, "df": 2}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.get_variable": {"tf": 1}, "wmill.client.Windmill.set_variable": {"tf": 1}, "wmill.client.get_variable": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.parse_variable_syntax": {"tf": 1}}, "df": 5}}}}}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.client": {"tf": 1}, "wmill.client.Windmill.get_client": {"tf": 1}, "wmill.client.init_global_client": {"tf": 1}, "wmill.s3_types.S3FsArgs.client_kwargs": {"tf": 1}}, "df": 4}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.create_token": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.cancel_running": {"tf": 1}}, "df": 2}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {"wmill.s3_types.S3FsArgs.cache_regions": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.s3_types.DuckDbConnectionSettings.connection_settings_str": {"tf": 1}}, "df": 7}}}}}}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"wmill.client.Windmill.path": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.state_path": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.get_state_path": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}}, "df": 8}}, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.parse_resource_syntax": {"tf": 1}, "wmill.client.parse_s3_object": {"tf": 1}, "wmill.client.parse_variable_syntax": {"tf": 1}}, "df": 3}}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.post": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}}, "df": 2, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.PolarsConnectionSettings": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.s3fs_args": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.storage_options": {"tf": 1}}, "df": 3}}}}}}}}}}}}}}}}}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.set_progress": {"tf": 1}, "wmill.client.Windmill.get_progress": {"tf": 1}, "wmill.client.set_progress": {"tf": 1}, "wmill.client.get_progress": {"tf": 1}}, "df": 4}}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.s3_types.S3Object.presigned": {"tf": 1}}, "df": 1}}}}}}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}}, "df": 4}}}}}, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "k": {"docs": {"wmill.s3_reader.S3BufferedReader.peek": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.mocked_api": {"tf": 1}, "wmill.client.Windmill.get_mocked_api": {"tf": 1}}, "df": 2}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.send_teams_message": {"tf": 1}}, "df": 2}}}}}}}, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {"wmill.client.Windmill.mocked_api": {"tf": 1}, "wmill.client.Windmill.get_mocked_api": {"tf": 1}}, "df": 2}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}}, "df": 2}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.append_to_result_stream": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}}, "df": 8}}}}, "w": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.StorageOptions.aws_endpoint_url": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_access_key_id": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_region": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_allow_http": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"tf": 1}}, "df": 7}}, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.StorageOptions.aws_access_key_id": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"tf": 1}}, "df": 4}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"wmill.s3_types.StorageOptions.aws_allow_http": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.PolarsConnectionSettings.s3fs_args": {"tf": 1}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.get_mocked_api": {"tf": 1}, "wmill.client.Windmill.get_client": {"tf": 1}, "wmill.client.Windmill.get": {"tf": 1}, "wmill.client.Windmill.get_job": {"tf": 1}, "wmill.client.Windmill.get_root_job_id": {"tf": 1}, "wmill.client.Windmill.get_id_token": {"tf": 1}, "wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.Windmill.get_variable": {"tf": 1}, "wmill.client.Windmill.get_resource": {"tf": 1}, "wmill.client.Windmill.get_progress": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.Windmill.get_resume_urls": {"tf": 1}, "wmill.client.get_workspace": {"tf": 1}, "wmill.client.get_root_job_id": {"tf": 1}, "wmill.client.get_version": {"tf": 1}, "wmill.client.get_id_token": {"tf": 1}, "wmill.client.get_job_status": {"tf": 1}, "wmill.client.get_result": {"tf": 1}, "wmill.client.get_state": {"tf": 1}, "wmill.client.get_resource": {"tf": 1}, "wmill.client.get_progress": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}, "wmill.client.get_variable": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.get_state_path": {"tf": 1}, "wmill.client.get_resume_urls": {"tf": 1}}, "df": 33}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"wmill.s3_reader.bytes_generator": {"tf": 1}}, "df": 1}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.init_global_client": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 16, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.cancel_running": {"tf": 1}}, "df": 2}}}}}}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.get_root_job_id": {"tf": 1}, "wmill.client.get_root_job_id": {"tf": 1}}, "df": 2}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.get_result": {"tf": 1}, "wmill.client.append_to_result_stream": {"tf": 1}, "wmill.client.stream_result": {"tf": 1}}, "df": 4}}, "m": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.get_resume_urls": {"tf": 1}, "wmill.client.get_resume_urls": {"tf": 1}}, "df": 2}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.get_resource": {"tf": 1}, "wmill.client.Windmill.set_resource": {"tf": 1}, "wmill.client.get_resource": {"tf": 1}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.parse_resource_syntax": {"tf": 1}}, "df": 5}}}}}}, "a": {"docs": {}, "df": 0, "d": {"1": {"docs": {"wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 1}, "docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}}, "df": 2}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}}, "df": 2}}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.s3_types.S3FsClientKwargs.region_name": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_region": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.region_name": {"tf": 1}}, "df": 3, "s": {"docs": {"wmill.s3_types.S3FsArgs.cache_regions": {"tf": 1}}, "df": 1}}}}}}}, "s": {"3": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.Windmill.sign_s3_objects": {"tf": 1}, "wmill.client.Windmill.sign_s3_object": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}, "wmill.client.parse_s3_object": {"tf": 1}, "wmill.s3_types.S3Object.s3": {"tf": 1}}, "df": 12, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"wmill.s3_reader.S3BufferedReader": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.peek": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 5}}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"wmill.s3_types.S3Object": {"tf": 1}, "wmill.s3_types.S3Object.s3": {"tf": 1}, "wmill.s3_types.S3Object.storage": {"tf": 1}, "wmill.s3_types.S3Object.presigned": {"tf": 1}}, "df": 4}}}}}}, "f": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.PolarsConnectionSettings.s3fs_args": {"tf": 1}}, "df": 1, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.S3FsClientKwargs": {"tf": 1}, "wmill.s3_types.S3FsClientKwargs.region_name": {"tf": 1}}, "df": 2}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.S3FsArgs": {"tf": 1}, "wmill.s3_types.S3FsArgs.endpoint_url": {"tf": 1}, "wmill.s3_types.S3FsArgs.key": {"tf": 1}, "wmill.s3_types.S3FsArgs.secret": {"tf": 1}, "wmill.s3_types.S3FsArgs.use_ssl": {"tf": 1}, "wmill.s3_types.S3FsArgs.cache_regions": {"tf": 1}, "wmill.s3_types.S3FsArgs.client_kwargs": {"tf": 1}}, "df": 7}}}}}}}, "docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 14}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.get_job_status": {"tf": 1}}, "df": 2}}, "e": {"docs": {"wmill.client.Windmill.set_state": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.state_path": {"tf": 1}, "wmill.client.Windmill.state": {"tf": 1}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.get_state": {"tf": 1}, "wmill.client.set_state": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}, "wmill.client.get_state_path": {"tf": 1}}, "df": 18}}}, "r": {"docs": {"wmill.s3_types.DuckDbConnectionSettings.connection_settings_str": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"wmill.client.append_to_result_stream": {"tf": 1}, "wmill.client.stream_result": {"tf": 1}}, "df": 2}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"wmill.s3_types.S3Object.storage": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.storage_options": {"tf": 1}}, "df": 2, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.StorageOptions": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_endpoint_url": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_access_key_id": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_region": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_allow_http": {"tf": 1}}, "df": 6}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.set_variable": {"tf": 1}, "wmill.client.Windmill.set_resource": {"tf": 1}, "wmill.client.Windmill.set_state": {"tf": 1}, "wmill.client.Windmill.set_progress": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.set_state": {"tf": 1}, "wmill.client.set_progress": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}}, "df": 14, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.s3_types.DuckDbConnectionSettings.connection_settings_str": {"tf": 1}}, "df": 7}}}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.send_teams_message": {"tf": 1}}, "df": 2}}, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"wmill.s3_types.S3FsArgs.secret": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"tf": 1}}, "df": 3}}}}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.sign_s3_objects": {"tf": 1}, "wmill.client.Windmill.sign_s3_object": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}}, "df": 4}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}}, "df": 8}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}}, "df": 2}}}}, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {"wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}}, "df": 2}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "x": {"docs": {"wmill.client.parse_resource_syntax": {"tf": 1}, "wmill.client.parse_variable_syntax": {"tf": 1}}, "df": 2}}}}}, "s": {"docs": {}, "df": 0, "l": {"docs": {"wmill.s3_types.S3FsArgs.use_ssl": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.use_ssl": {"tf": 1}}, "df": 2}}}, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}}, "df": 6}}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}}, "df": 6}}}}, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "b": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}}, "df": 2, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.DuckDbConnectionSettings": {"tf": 1}, "wmill.s3_types.DuckDbConnectionSettings.connection_settings_str": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.deprecate": {"tf": 1}}, "df": 1}}}}}}}}}, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.sign_s3_object": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}, "wmill.client.parse_s3_object": {"tf": 1}}, "df": 3, "s": {"docs": {"wmill.client.Windmill.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}}, "df": 2}}}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.PolarsConnectionSettings.storage_options": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 2}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.s3_types.S3FsArgs.endpoint_url": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_endpoint_url": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.endpoint_url": {"tf": 1}}, "df": 3}}}}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"wmill.s3_types.S3FsClientKwargs.region_name": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.region_name": {"tf": 1}}, "df": 2}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "y": {"docs": {"wmill.s3_types.S3FsArgs.key": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_access_key_id": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"tf": 1}}, "df": 5}}, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.S3FsArgs.client_kwargs": {"tf": 1}}, "df": 1}}}}}}}}, "fullname": {"root": {"docs": {"wmill.client.Windmill.__init__": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}}, "df": 2, "w": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"wmill": {"tf": 1}, "wmill.client": {"tf": 1}, "wmill.client.logger": {"tf": 1}, "wmill.client.JobStatus": {"tf": 1}, "wmill.client.Windmill": {"tf": 1}, "wmill.client.Windmill.__init__": {"tf": 1}, "wmill.client.Windmill.base_url": {"tf": 1}, "wmill.client.Windmill.token": {"tf": 1}, "wmill.client.Windmill.headers": {"tf": 1}, "wmill.client.Windmill.verify": {"tf": 1}, "wmill.client.Windmill.client": {"tf": 1}, "wmill.client.Windmill.workspace": {"tf": 1}, "wmill.client.Windmill.path": {"tf": 1}, "wmill.client.Windmill.mocked_api": {"tf": 1}, "wmill.client.Windmill.get_mocked_api": {"tf": 1}, "wmill.client.Windmill.get_client": {"tf": 1}, "wmill.client.Windmill.get": {"tf": 1}, "wmill.client.Windmill.post": {"tf": 1}, "wmill.client.Windmill.create_token": {"tf": 1}, "wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.Windmill.get_job": {"tf": 1}, "wmill.client.Windmill.get_root_job_id": {"tf": 1}, "wmill.client.Windmill.get_id_token": {"tf": 1}, "wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.Windmill.get_variable": {"tf": 1}, "wmill.client.Windmill.set_variable": {"tf": 1}, "wmill.client.Windmill.get_resource": {"tf": 1}, "wmill.client.Windmill.set_resource": {"tf": 1}, "wmill.client.Windmill.set_state": {"tf": 1}, "wmill.client.Windmill.set_progress": {"tf": 1}, "wmill.client.Windmill.get_progress": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.version": {"tf": 1}, "wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.Windmill.sign_s3_objects": {"tf": 1}, "wmill.client.Windmill.sign_s3_object": {"tf": 1}, "wmill.client.Windmill.whoami": {"tf": 1}, "wmill.client.Windmill.user": {"tf": 1}, "wmill.client.Windmill.state_path": {"tf": 1}, "wmill.client.Windmill.state": {"tf": 1}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.Windmill.get_resume_urls": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.init_global_client": {"tf": 1}, "wmill.client.deprecate": {"tf": 1}, "wmill.client.get_workspace": {"tf": 1}, "wmill.client.get_root_job_id": {"tf": 1}, "wmill.client.get_version": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.get_id_token": {"tf": 1}, "wmill.client.get_job_status": {"tf": 1}, "wmill.client.get_result": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}, "wmill.client.whoami": {"tf": 1}, "wmill.client.get_state": {"tf": 1}, "wmill.client.get_resource": {"tf": 1}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.set_state": {"tf": 1}, "wmill.client.set_progress": {"tf": 1}, "wmill.client.get_progress": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}, "wmill.client.get_variable": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}, "wmill.client.get_state_path": {"tf": 1}, "wmill.client.get_resume_urls": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}, "wmill.client.send_teams_message": {"tf": 1}, "wmill.client.cancel_running": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}, "wmill.client.task": {"tf": 1}, "wmill.client.parse_resource_syntax": {"tf": 1}, "wmill.client.parse_s3_object": {"tf": 1}, "wmill.client.parse_variable_syntax": {"tf": 1}, "wmill.client.append_to_result_stream": {"tf": 1}, "wmill.client.stream_result": {"tf": 1}, "wmill.s3_reader": {"tf": 1}, "wmill.s3_reader.S3BufferedReader": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.peek": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}, "wmill.s3_reader.bytes_generator": {"tf": 1}, "wmill.s3_types": {"tf": 1}, "wmill.s3_types.S3Object": {"tf": 1}, "wmill.s3_types.S3Object.s3": {"tf": 1}, "wmill.s3_types.S3Object.storage": {"tf": 1}, "wmill.s3_types.S3Object.presigned": {"tf": 1}, "wmill.s3_types.S3FsClientKwargs": {"tf": 1}, "wmill.s3_types.S3FsClientKwargs.region_name": {"tf": 1}, "wmill.s3_types.S3FsArgs": {"tf": 1}, "wmill.s3_types.S3FsArgs.endpoint_url": {"tf": 1}, "wmill.s3_types.S3FsArgs.key": {"tf": 1}, "wmill.s3_types.S3FsArgs.secret": {"tf": 1}, "wmill.s3_types.S3FsArgs.use_ssl": {"tf": 1}, "wmill.s3_types.S3FsArgs.cache_regions": {"tf": 1}, "wmill.s3_types.S3FsArgs.client_kwargs": {"tf": 1}, "wmill.s3_types.StorageOptions": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_endpoint_url": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_access_key_id": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_region": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_allow_http": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.s3fs_args": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.storage_options": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.endpoint_url": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.region_name": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.use_ssl": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.DuckDbConnectionSettings": {"tf": 1}, "wmill.s3_types.DuckDbConnectionSettings.connection_settings_str": {"tf": 1}}, "df": 153}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill": {"tf": 1}, "wmill.client.Windmill.__init__": {"tf": 1}, "wmill.client.Windmill.base_url": {"tf": 1}, "wmill.client.Windmill.token": {"tf": 1}, "wmill.client.Windmill.headers": {"tf": 1}, "wmill.client.Windmill.verify": {"tf": 1}, "wmill.client.Windmill.client": {"tf": 1}, "wmill.client.Windmill.workspace": {"tf": 1}, "wmill.client.Windmill.path": {"tf": 1}, "wmill.client.Windmill.mocked_api": {"tf": 1}, "wmill.client.Windmill.get_mocked_api": {"tf": 1}, "wmill.client.Windmill.get_client": {"tf": 1}, "wmill.client.Windmill.get": {"tf": 1}, "wmill.client.Windmill.post": {"tf": 1}, "wmill.client.Windmill.create_token": {"tf": 1}, "wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.Windmill.get_job": {"tf": 1}, "wmill.client.Windmill.get_root_job_id": {"tf": 1}, "wmill.client.Windmill.get_id_token": {"tf": 1}, "wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.Windmill.get_variable": {"tf": 1}, "wmill.client.Windmill.set_variable": {"tf": 1}, "wmill.client.Windmill.get_resource": {"tf": 1}, "wmill.client.Windmill.set_resource": {"tf": 1}, "wmill.client.Windmill.set_state": {"tf": 1}, "wmill.client.Windmill.set_progress": {"tf": 1}, "wmill.client.Windmill.get_progress": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.version": {"tf": 1}, "wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.Windmill.sign_s3_objects": {"tf": 1}, "wmill.client.Windmill.sign_s3_object": {"tf": 1}, "wmill.client.Windmill.whoami": {"tf": 1}, "wmill.client.Windmill.user": {"tf": 1}, "wmill.client.Windmill.state_path": {"tf": 1}, "wmill.client.Windmill.state": {"tf": 1}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.Windmill.get_resume_urls": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.Windmill.send_teams_message": {"tf": 1}}, "df": 59}}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.workspace": {"tf": 1}, "wmill.client.get_workspace": {"tf": 1}}, "df": 2}}}}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.wait_job": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}}, "df": 2}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {"wmill.client.Windmill.whoami": {"tf": 1}, "wmill.client.whoami": {"tf": 1}}, "df": 2}}}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client": {"tf": 1}, "wmill.client.logger": {"tf": 1}, "wmill.client.JobStatus": {"tf": 1}, "wmill.client.Windmill": {"tf": 1}, "wmill.client.Windmill.__init__": {"tf": 1}, "wmill.client.Windmill.base_url": {"tf": 1}, "wmill.client.Windmill.token": {"tf": 1}, "wmill.client.Windmill.headers": {"tf": 1}, "wmill.client.Windmill.verify": {"tf": 1}, "wmill.client.Windmill.client": {"tf": 1.4142135623730951}, "wmill.client.Windmill.workspace": {"tf": 1}, "wmill.client.Windmill.path": {"tf": 1}, "wmill.client.Windmill.mocked_api": {"tf": 1}, "wmill.client.Windmill.get_mocked_api": {"tf": 1}, "wmill.client.Windmill.get_client": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get": {"tf": 1}, "wmill.client.Windmill.post": {"tf": 1}, "wmill.client.Windmill.create_token": {"tf": 1}, "wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.Windmill.get_job": {"tf": 1}, "wmill.client.Windmill.get_root_job_id": {"tf": 1}, "wmill.client.Windmill.get_id_token": {"tf": 1}, "wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.Windmill.get_variable": {"tf": 1}, "wmill.client.Windmill.set_variable": {"tf": 1}, "wmill.client.Windmill.get_resource": {"tf": 1}, "wmill.client.Windmill.set_resource": {"tf": 1}, "wmill.client.Windmill.set_state": {"tf": 1}, "wmill.client.Windmill.set_progress": {"tf": 1}, "wmill.client.Windmill.get_progress": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.version": {"tf": 1}, "wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.Windmill.sign_s3_objects": {"tf": 1}, "wmill.client.Windmill.sign_s3_object": {"tf": 1}, "wmill.client.Windmill.whoami": {"tf": 1}, "wmill.client.Windmill.user": {"tf": 1}, "wmill.client.Windmill.state_path": {"tf": 1}, "wmill.client.Windmill.state": {"tf": 1}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.Windmill.get_resume_urls": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.init_global_client": {"tf": 1.4142135623730951}, "wmill.client.deprecate": {"tf": 1}, "wmill.client.get_workspace": {"tf": 1}, "wmill.client.get_root_job_id": {"tf": 1}, "wmill.client.get_version": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.get_id_token": {"tf": 1}, "wmill.client.get_job_status": {"tf": 1}, "wmill.client.get_result": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}, "wmill.client.whoami": {"tf": 1}, "wmill.client.get_state": {"tf": 1}, "wmill.client.get_resource": {"tf": 1}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.set_state": {"tf": 1}, "wmill.client.set_progress": {"tf": 1}, "wmill.client.get_progress": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}, "wmill.client.get_variable": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}, "wmill.client.get_state_path": {"tf": 1}, "wmill.client.get_resume_urls": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}, "wmill.client.send_teams_message": {"tf": 1}, "wmill.client.cancel_running": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}, "wmill.client.task": {"tf": 1}, "wmill.client.parse_resource_syntax": {"tf": 1}, "wmill.client.parse_s3_object": {"tf": 1}, "wmill.client.parse_variable_syntax": {"tf": 1}, "wmill.client.append_to_result_stream": {"tf": 1}, "wmill.client.stream_result": {"tf": 1}, "wmill.s3_types.S3FsArgs.client_kwargs": {"tf": 1}}, "df": 115}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.create_token": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.cancel_running": {"tf": 1}}, "df": 2}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {"wmill.s3_types.S3FsArgs.cache_regions": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.s3_types.DuckDbConnectionSettings.connection_settings_str": {"tf": 1}}, "df": 7}}}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.logger": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}}, "df": 4}}}}, "j": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {"wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.Windmill.get_job": {"tf": 1}, "wmill.client.Windmill.get_root_job_id": {"tf": 1}, "wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.get_root_job_id": {"tf": 1}, "wmill.client.get_job_status": {"tf": 1}}, "df": 6, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.JobStatus": {"tf": 1}}, "df": 1}}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.__init__": {"tf": 1}, "wmill.client.init_global_client": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}}, "df": 3}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}}, "df": 2}}}}}}}}}}, "d": {"docs": {"wmill.client.Windmill.get_root_job_id": {"tf": 1}, "wmill.client.Windmill.get_id_token": {"tf": 1}, "wmill.client.get_root_job_id": {"tf": 1}, "wmill.client.get_id_token": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_access_key_id": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"tf": 1}}, "df": 6}}, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.base_url": {"tf": 1}}, "df": 1}}}, "y": {"docs": {"wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 9, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_reader.bytes_generator": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"3": {"docs": {"wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}}, "df": 2, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.Boto3ConnectionSettings": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.endpoint_url": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.region_name": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.use_ssl": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"tf": 1}}, "df": 6}}}}}}}}}}}}}}}}}}}, "docs": {}, "df": 0}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.base_url": {"tf": 1}, "wmill.s3_types.S3FsArgs.endpoint_url": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_endpoint_url": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.endpoint_url": {"tf": 1}}, "df": 4, "s": {"docs": {"wmill.client.Windmill.get_resume_urls": {"tf": 1}, "wmill.client.get_resume_urls": {"tf": 1}}, "df": 2}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"wmill.s3_types.S3FsArgs.use_ssl": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.use_ssl": {"tf": 1}}, "df": 2, "r": {"docs": {"wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.user": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}}, "df": 5, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 2}}}}}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}, "wmill.client.append_to_result_stream": {"tf": 1}}, "df": 3, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.token": {"tf": 1}, "wmill.client.Windmill.create_token": {"tf": 1}, "wmill.client.Windmill.get_id_token": {"tf": 1}, "wmill.client.get_id_token": {"tf": 1}}, "df": 4}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.send_teams_message": {"tf": 1}}, "df": 2}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "k": {"docs": {"wmill.client.task": {"tf": 1}}, "df": 1}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types": {"tf": 1}, "wmill.s3_types.S3Object": {"tf": 1}, "wmill.s3_types.S3Object.s3": {"tf": 1}, "wmill.s3_types.S3Object.storage": {"tf": 1}, "wmill.s3_types.S3Object.presigned": {"tf": 1}, "wmill.s3_types.S3FsClientKwargs": {"tf": 1}, "wmill.s3_types.S3FsClientKwargs.region_name": {"tf": 1}, "wmill.s3_types.S3FsArgs": {"tf": 1}, "wmill.s3_types.S3FsArgs.endpoint_url": {"tf": 1}, "wmill.s3_types.S3FsArgs.key": {"tf": 1}, "wmill.s3_types.S3FsArgs.secret": {"tf": 1}, "wmill.s3_types.S3FsArgs.use_ssl": {"tf": 1}, "wmill.s3_types.S3FsArgs.cache_regions": {"tf": 1}, "wmill.s3_types.S3FsArgs.client_kwargs": {"tf": 1}, "wmill.s3_types.StorageOptions": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_endpoint_url": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_access_key_id": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_region": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_allow_http": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.s3fs_args": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.storage_options": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.endpoint_url": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.region_name": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.use_ssl": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.DuckDbConnectionSettings": {"tf": 1}, "wmill.s3_types.DuckDbConnectionSettings.connection_settings_str": {"tf": 1}}, "df": 31}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.headers": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 4}}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {"wmill.s3_types.StorageOptions.aws_allow_http": {"tf": 1}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.verify": {"tf": 1}}, "df": 1}}}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.version": {"tf": 1}, "wmill.client.get_version": {"tf": 1}}, "df": 2}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.get_variable": {"tf": 1}, "wmill.client.Windmill.set_variable": {"tf": 1}, "wmill.client.get_variable": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.parse_variable_syntax": {"tf": 1}}, "df": 5}}}}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"wmill.client.Windmill.path": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.state_path": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.get_state_path": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}}, "df": 8}}, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.parse_resource_syntax": {"tf": 1}, "wmill.client.parse_s3_object": {"tf": 1}, "wmill.client.parse_variable_syntax": {"tf": 1}}, "df": 3}}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.post": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}}, "df": 2, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.PolarsConnectionSettings": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.s3fs_args": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.storage_options": {"tf": 1}}, "df": 3}}}}}}}}}}}}}}}}}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.set_progress": {"tf": 1}, "wmill.client.Windmill.get_progress": {"tf": 1}, "wmill.client.set_progress": {"tf": 1}, "wmill.client.get_progress": {"tf": 1}}, "df": 4}}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.s3_types.S3Object.presigned": {"tf": 1}}, "df": 1}}}}}}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}}, "df": 4}}}}}, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "k": {"docs": {"wmill.s3_reader.S3BufferedReader.peek": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.mocked_api": {"tf": 1}, "wmill.client.Windmill.get_mocked_api": {"tf": 1}}, "df": 2}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.send_teams_message": {"tf": 1}}, "df": 2}}}}}}}, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {"wmill.client.Windmill.mocked_api": {"tf": 1}, "wmill.client.Windmill.get_mocked_api": {"tf": 1}}, "df": 2}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}}, "df": 2}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.append_to_result_stream": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}}, "df": 8}}}}, "w": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.StorageOptions.aws_endpoint_url": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_access_key_id": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_region": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_allow_http": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"tf": 1}}, "df": 7}}, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.StorageOptions.aws_access_key_id": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"tf": 1}}, "df": 4}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"wmill.s3_types.StorageOptions.aws_allow_http": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.PolarsConnectionSettings.s3fs_args": {"tf": 1}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.get_mocked_api": {"tf": 1}, "wmill.client.Windmill.get_client": {"tf": 1}, "wmill.client.Windmill.get": {"tf": 1}, "wmill.client.Windmill.get_job": {"tf": 1}, "wmill.client.Windmill.get_root_job_id": {"tf": 1}, "wmill.client.Windmill.get_id_token": {"tf": 1}, "wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.Windmill.get_variable": {"tf": 1}, "wmill.client.Windmill.get_resource": {"tf": 1}, "wmill.client.Windmill.get_progress": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.Windmill.get_resume_urls": {"tf": 1}, "wmill.client.get_workspace": {"tf": 1}, "wmill.client.get_root_job_id": {"tf": 1}, "wmill.client.get_version": {"tf": 1}, "wmill.client.get_id_token": {"tf": 1}, "wmill.client.get_job_status": {"tf": 1}, "wmill.client.get_result": {"tf": 1}, "wmill.client.get_state": {"tf": 1}, "wmill.client.get_resource": {"tf": 1}, "wmill.client.get_progress": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}, "wmill.client.get_variable": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.get_state_path": {"tf": 1}, "wmill.client.get_resume_urls": {"tf": 1}}, "df": 33}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"wmill.s3_reader.bytes_generator": {"tf": 1}}, "df": 1}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.init_global_client": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 16, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.cancel_running": {"tf": 1}}, "df": 2}}}}}}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.get_root_job_id": {"tf": 1}, "wmill.client.get_root_job_id": {"tf": 1}}, "df": 2}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.get_result": {"tf": 1}, "wmill.client.append_to_result_stream": {"tf": 1}, "wmill.client.stream_result": {"tf": 1}}, "df": 4}}, "m": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.get_resume_urls": {"tf": 1}, "wmill.client.get_resume_urls": {"tf": 1}}, "df": 2}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.get_resource": {"tf": 1}, "wmill.client.Windmill.set_resource": {"tf": 1}, "wmill.client.get_resource": {"tf": 1}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.parse_resource_syntax": {"tf": 1}}, "df": 5}}}}}}, "a": {"docs": {}, "df": 0, "d": {"1": {"docs": {"wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 1}, "docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.s3_reader": {"tf": 1}, "wmill.s3_reader.S3BufferedReader": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.peek": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}, "wmill.s3_reader.bytes_generator": {"tf": 1}}, "df": 9}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}}, "df": 2}}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.s3_types.S3FsClientKwargs.region_name": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_region": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.region_name": {"tf": 1}}, "df": 3, "s": {"docs": {"wmill.s3_types.S3FsArgs.cache_regions": {"tf": 1}}, "df": 1}}}}}}}, "s": {"3": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.Windmill.sign_s3_objects": {"tf": 1}, "wmill.client.Windmill.sign_s3_object": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}, "wmill.client.parse_s3_object": {"tf": 1}, "wmill.s3_reader": {"tf": 1}, "wmill.s3_reader.S3BufferedReader": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.peek": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}, "wmill.s3_reader.bytes_generator": {"tf": 1}, "wmill.s3_types": {"tf": 1}, "wmill.s3_types.S3Object": {"tf": 1}, "wmill.s3_types.S3Object.s3": {"tf": 1.4142135623730951}, "wmill.s3_types.S3Object.storage": {"tf": 1}, "wmill.s3_types.S3Object.presigned": {"tf": 1}, "wmill.s3_types.S3FsClientKwargs": {"tf": 1}, "wmill.s3_types.S3FsClientKwargs.region_name": {"tf": 1}, "wmill.s3_types.S3FsArgs": {"tf": 1}, "wmill.s3_types.S3FsArgs.endpoint_url": {"tf": 1}, "wmill.s3_types.S3FsArgs.key": {"tf": 1}, "wmill.s3_types.S3FsArgs.secret": {"tf": 1}, "wmill.s3_types.S3FsArgs.use_ssl": {"tf": 1}, "wmill.s3_types.S3FsArgs.cache_regions": {"tf": 1}, "wmill.s3_types.S3FsArgs.client_kwargs": {"tf": 1}, "wmill.s3_types.StorageOptions": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_endpoint_url": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_access_key_id": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_region": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_allow_http": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.s3fs_args": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.storage_options": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.endpoint_url": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.region_name": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.use_ssl": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.DuckDbConnectionSettings": {"tf": 1}, "wmill.s3_types.DuckDbConnectionSettings.connection_settings_str": {"tf": 1}}, "df": 49, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"wmill.s3_reader.S3BufferedReader": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.peek": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 5}}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"wmill.s3_types.S3Object": {"tf": 1}, "wmill.s3_types.S3Object.s3": {"tf": 1}, "wmill.s3_types.S3Object.storage": {"tf": 1}, "wmill.s3_types.S3Object.presigned": {"tf": 1}}, "df": 4}}}}}}, "f": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.PolarsConnectionSettings.s3fs_args": {"tf": 1}}, "df": 1, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.S3FsClientKwargs": {"tf": 1}, "wmill.s3_types.S3FsClientKwargs.region_name": {"tf": 1}}, "df": 2}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.S3FsArgs": {"tf": 1}, "wmill.s3_types.S3FsArgs.endpoint_url": {"tf": 1}, "wmill.s3_types.S3FsArgs.key": {"tf": 1}, "wmill.s3_types.S3FsArgs.secret": {"tf": 1}, "wmill.s3_types.S3FsArgs.use_ssl": {"tf": 1}, "wmill.s3_types.S3FsArgs.cache_regions": {"tf": 1}, "wmill.s3_types.S3FsArgs.client_kwargs": {"tf": 1}}, "df": 7}}}}}}}, "docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 14}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.get_job_status": {"tf": 1}}, "df": 2}}, "e": {"docs": {"wmill.client.Windmill.set_state": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.state_path": {"tf": 1}, "wmill.client.Windmill.state": {"tf": 1}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.get_state": {"tf": 1}, "wmill.client.set_state": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}, "wmill.client.get_state_path": {"tf": 1}}, "df": 18}}}, "r": {"docs": {"wmill.s3_types.DuckDbConnectionSettings.connection_settings_str": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"wmill.client.append_to_result_stream": {"tf": 1}, "wmill.client.stream_result": {"tf": 1}}, "df": 2}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"wmill.s3_types.S3Object.storage": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.storage_options": {"tf": 1}}, "df": 2, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.StorageOptions": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_endpoint_url": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_access_key_id": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_region": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_allow_http": {"tf": 1}}, "df": 6}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.set_variable": {"tf": 1}, "wmill.client.Windmill.set_resource": {"tf": 1}, "wmill.client.Windmill.set_state": {"tf": 1}, "wmill.client.Windmill.set_progress": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.set_state": {"tf": 1}, "wmill.client.set_progress": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}}, "df": 14, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.s3_types.DuckDbConnectionSettings.connection_settings_str": {"tf": 1}}, "df": 7}}}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.send_teams_message": {"tf": 1}}, "df": 2}}, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"wmill.s3_types.S3FsArgs.secret": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"tf": 1}}, "df": 3}}}}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.sign_s3_objects": {"tf": 1}, "wmill.client.Windmill.sign_s3_object": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}}, "df": 4}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}}, "df": 8}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}}, "df": 2}}}}, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {"wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}}, "df": 2}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "x": {"docs": {"wmill.client.parse_resource_syntax": {"tf": 1}, "wmill.client.parse_variable_syntax": {"tf": 1}}, "df": 2}}}}}, "s": {"docs": {}, "df": 0, "l": {"docs": {"wmill.s3_types.S3FsArgs.use_ssl": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.use_ssl": {"tf": 1}}, "df": 2}}}, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}}, "df": 6}}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}}, "df": 6}}}}, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "b": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}}, "df": 2, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.DuckDbConnectionSettings": {"tf": 1}, "wmill.s3_types.DuckDbConnectionSettings.connection_settings_str": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.deprecate": {"tf": 1}}, "df": 1}}}}}}}}}, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.sign_s3_object": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}, "wmill.client.parse_s3_object": {"tf": 1}}, "df": 3, "s": {"docs": {"wmill.client.Windmill.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}}, "df": 2}}}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.PolarsConnectionSettings.storage_options": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 2}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.s3_types.S3FsArgs.endpoint_url": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_endpoint_url": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.endpoint_url": {"tf": 1}}, "df": 3}}}}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"wmill.s3_types.S3FsClientKwargs.region_name": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.region_name": {"tf": 1}}, "df": 2}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "y": {"docs": {"wmill.s3_types.S3FsArgs.key": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_access_key_id": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"tf": 1}}, "df": 5}}, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.S3FsArgs.client_kwargs": {"tf": 1}}, "df": 1}}}}}}}}, "annotation": {"root": {"docs": {"wmill.client.Windmill.user": {"tf": 1}, "wmill.client.Windmill.state_path": {"tf": 1}, "wmill.client.Windmill.state": {"tf": 1}, "wmill.s3_types.S3Object.s3": {"tf": 1}, "wmill.s3_types.S3Object.storage": {"tf": 1}, "wmill.s3_types.S3Object.presigned": {"tf": 1}, "wmill.s3_types.S3FsClientKwargs.region_name": {"tf": 1}, "wmill.s3_types.S3FsArgs.endpoint_url": {"tf": 1}, "wmill.s3_types.S3FsArgs.key": {"tf": 1}, "wmill.s3_types.S3FsArgs.secret": {"tf": 1}, "wmill.s3_types.S3FsArgs.use_ssl": {"tf": 1}, "wmill.s3_types.S3FsArgs.cache_regions": {"tf": 1}, "wmill.s3_types.S3FsArgs.client_kwargs": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_endpoint_url": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_access_key_id": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_region": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_allow_http": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.s3fs_args": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.storage_options": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.endpoint_url": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.region_name": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.use_ssl": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.DuckDbConnectionSettings.connection_settings_str": {"tf": 1}}, "df": 26, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.user": {"tf": 1}}, "df": 1}}}}, "s": {"3": {"docs": {"wmill.s3_types.S3FsArgs.client_kwargs": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.s3fs_args": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.storage_options": {"tf": 1}}, "df": 3, "f": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.S3FsArgs.client_kwargs": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.PolarsConnectionSettings.s3fs_args": {"tf": 1}}, "df": 1}}}}}}}, "docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.Windmill.state_path": {"tf": 1}, "wmill.s3_types.S3Object.s3": {"tf": 1}, "wmill.s3_types.S3FsClientKwargs.region_name": {"tf": 1}, "wmill.s3_types.S3FsArgs.endpoint_url": {"tf": 1}, "wmill.s3_types.S3FsArgs.key": {"tf": 1}, "wmill.s3_types.S3FsArgs.secret": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_endpoint_url": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_access_key_id": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_region": {"tf": 1}, "wmill.s3_types.StorageOptions.aws_allow_http": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.endpoint_url": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.region_name": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"tf": 1}, "wmill.s3_types.DuckDbConnectionSettings.connection_settings_str": {"tf": 1}}, "df": 16}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.PolarsConnectionSettings.storage_options": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.state": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"wmill.s3_types.S3Object.storage": {"tf": 1}, "wmill.s3_types.S3Object.presigned": {"tf": 1}}, "df": 2}}}}}}}}}}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"wmill.s3_types.S3FsArgs.use_ssl": {"tf": 1}, "wmill.s3_types.S3FsArgs.cache_regions": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings.use_ssl": {"tf": 1}}, "df": 3}}}}, "w": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"wmill.s3_types.S3FsArgs.client_kwargs": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.s3fs_args": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.storage_options": {"tf": 1}}, "df": 3}}}}}, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.S3FsArgs.client_kwargs": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.s3fs_args": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings.storage_options": {"tf": 1}}, "df": 3}}}}}}}, "default_value": {"root": {"docs": {"wmill.client.logger": {"tf": 1.4142135623730951}, "wmill.client.JobStatus": {"tf": 1}}, "df": 2, "l": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.logger": {"tf": 1}}, "df": 1}, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.logger": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.JobStatus": {"tf": 1}}, "df": 1}}}}}}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.logger": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"wmill.client.logger": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"wmill.client.JobStatus": {"tf": 1}}, "df": 1}}}}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.logger": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.JobStatus": {"tf": 1}}, "df": 1}}}}}}}}}, "g": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.logger": {"tf": 1}}, "df": 1}}, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"wmill.client.JobStatus": {"tf": 1}}, "df": 1}}}}}}, "x": {"2": {"7": {"docs": {"wmill.client.JobStatus": {"tf": 2.449489742783178}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"wmill.client.JobStatus": {"tf": 1}}, "df": 1}}}}}}}}}, "signature": {"root": {"0": {"docs": {"wmill.s3_reader.S3BufferedReader.peek": {"tf": 1}}, "df": 1}, "1": {"docs": {"wmill.client.Windmill.create_token": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 3}, "3": {"9": {"docs": {"wmill.client.Windmill.get_job_status": {"tf": 2.449489742783178}, "wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1.4142135623730951}, "wmill.client.Windmill.set_shared_state": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_shared_state": {"tf": 1.4142135623730951}, "wmill.client.get_job_status": {"tf": 2.449489742783178}, "wmill.client.duckdb_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.polars_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.boto3_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.set_resource": {"tf": 1.4142135623730951}, "wmill.client.set_shared_state_pickle": {"tf": 1.4142135623730951}, "wmill.client.get_shared_state_pickle": {"tf": 1.4142135623730951}, "wmill.client.set_shared_state": {"tf": 1.4142135623730951}, "wmill.client.get_shared_state": {"tf": 1.4142135623730951}}, "df": 17}, "docs": {}, "df": 0}, "docs": {"wmill.client.Windmill.__init__": {"tf": 6}, "wmill.client.Windmill.get_mocked_api": {"tf": 4.123105625617661}, "wmill.client.Windmill.get_client": {"tf": 4}, "wmill.client.Windmill.get": {"tf": 5.830951894845301}, "wmill.client.Windmill.post": {"tf": 5.830951894845301}, "wmill.client.Windmill.create_token": {"tf": 5.916079783099616}, "wmill.client.Windmill.run_script_async": {"tf": 8.602325267042627}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 6.928203230275509}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 7.280109889280518}, "wmill.client.Windmill.run_flow_async": {"tf": 8.18535277187245}, "wmill.client.Windmill.run_script": {"tf": 11.74734012447073}, "wmill.client.Windmill.run_script_by_path": {"tf": 10.770329614269007}, "wmill.client.Windmill.run_script_by_hash": {"tf": 10.816653826391969}, "wmill.client.Windmill.wait_job": {"tf": 9.746794344808963}, "wmill.client.Windmill.cancel_running": {"tf": 3.4641016151377544}, "wmill.client.Windmill.get_job": {"tf": 4.47213595499958}, "wmill.client.Windmill.get_root_job_id": {"tf": 5.5677643628300215}, "wmill.client.Windmill.get_id_token": {"tf": 4.47213595499958}, "wmill.client.Windmill.get_job_status": {"tf": 6.4031242374328485}, "wmill.client.Windmill.get_result": {"tf": 5.830951894845301}, "wmill.client.Windmill.get_variable": {"tf": 4.47213595499958}, "wmill.client.Windmill.set_variable": {"tf": 6.48074069840786}, "wmill.client.Windmill.get_resource": {"tf": 6.244997998398398}, "wmill.client.Windmill.set_resource": {"tf": 5.830951894845301}, "wmill.client.Windmill.set_state": {"tf": 4.242640687119285}, "wmill.client.Windmill.set_progress": {"tf": 6.082762530298219}, "wmill.client.Windmill.get_progress": {"tf": 5.5677643628300215}, "wmill.client.Windmill.set_flow_user_state": {"tf": 5.291502622129181}, "wmill.client.Windmill.get_flow_user_state": {"tf": 4.47213595499958}, "wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 6.557438524302}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 6.164414002968976}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 6.164414002968976}, "wmill.client.Windmill.load_s3_file": {"tf": 7}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 7.3484692283495345}, "wmill.client.Windmill.write_s3_file": {"tf": 11}, "wmill.client.Windmill.sign_s3_objects": {"tf": 7.280109889280518}, "wmill.client.Windmill.sign_s3_object": {"tf": 6.557438524302}, "wmill.client.Windmill.whoami": {"tf": 3.4641016151377544}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 5.656854249492381}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 4.898979485566356}, "wmill.client.Windmill.set_shared_state": {"tf": 5.656854249492381}, "wmill.client.Windmill.get_shared_state": {"tf": 4.898979485566356}, "wmill.client.Windmill.get_resume_urls": {"tf": 5.0990195135927845}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 9.539392014169456}, "wmill.client.Windmill.username_to_email": {"tf": 4.47213595499958}, "wmill.client.Windmill.send_teams_message": {"tf": 7.681145747868608}, "wmill.client.init_global_client": {"tf": 3.1622776601683795}, "wmill.client.deprecate": {"tf": 3.7416573867739413}, "wmill.client.get_workspace": {"tf": 3}, "wmill.client.get_root_job_id": {"tf": 5.196152422706632}, "wmill.client.get_version": {"tf": 3}, "wmill.client.run_script_async": {"tf": 7.54983443527075}, "wmill.client.run_flow_async": {"tf": 8.48528137423857}, "wmill.client.run_script_sync": {"tf": 10.295630140987}, "wmill.client.run_script_by_path_async": {"tf": 7.874007874011811}, "wmill.client.run_script_by_hash_async": {"tf": 7.937253933193772}, "wmill.client.run_script_by_path_sync": {"tf": 10.295630140987}, "wmill.client.get_id_token": {"tf": 4}, "wmill.client.get_job_status": {"tf": 6.082762530298219}, "wmill.client.get_result": {"tf": 5.830951894845301}, "wmill.client.duckdb_connection_settings": {"tf": 5.656854249492381}, "wmill.client.polars_connection_settings": {"tf": 5.656854249492381}, "wmill.client.boto3_connection_settings": {"tf": 5.656854249492381}, "wmill.client.load_s3_file": {"tf": 7.0710678118654755}, "wmill.client.load_s3_file_reader": {"tf": 7.416198487095663}, "wmill.client.write_s3_file": {"tf": 11.045361017187261}, "wmill.client.sign_s3_objects": {"tf": 6.928203230275509}, "wmill.client.sign_s3_object": {"tf": 6.082762530298219}, "wmill.client.whoami": {"tf": 3}, "wmill.client.get_state": {"tf": 3}, "wmill.client.get_resource": {"tf": 5.916079783099616}, "wmill.client.set_resource": {"tf": 6.324555320336759}, "wmill.client.set_state": {"tf": 4}, "wmill.client.set_progress": {"tf": 5.916079783099616}, "wmill.client.get_progress": {"tf": 5.196152422706632}, "wmill.client.set_shared_state_pickle": {"tf": 5.0990195135927845}, "wmill.client.get_shared_state_pickle": {"tf": 4.242640687119285}, "wmill.client.set_shared_state": {"tf": 5.0990195135927845}, "wmill.client.get_shared_state": {"tf": 4.242640687119285}, "wmill.client.get_variable": {"tf": 4}, "wmill.client.set_variable": {"tf": 6.164414002968976}, "wmill.client.get_flow_user_state": {"tf": 4}, "wmill.client.set_flow_user_state": {"tf": 4.898979485566356}, "wmill.client.get_state_path": {"tf": 3}, "wmill.client.get_resume_urls": {"tf": 4.69041575982343}, "wmill.client.request_interactive_slack_approval": {"tf": 9.273618495495704}, "wmill.client.send_teams_message": {"tf": 6.928203230275509}, "wmill.client.cancel_running": {"tf": 3}, "wmill.client.run_script": {"tf": 11.313708498984761}, "wmill.client.run_script_by_path": {"tf": 10.295630140987}, "wmill.client.run_script_by_hash": {"tf": 10.344080432788601}, "wmill.client.username_to_email": {"tf": 4}, "wmill.client.task": {"tf": 4.242640687119285}, "wmill.client.parse_resource_syntax": {"tf": 4.58257569495584}, "wmill.client.parse_s3_object": {"tf": 6.082762530298219}, "wmill.client.parse_variable_syntax": {"tf": 4.58257569495584}, "wmill.client.append_to_result_stream": {"tf": 4}, "wmill.client.stream_result": {"tf": 3.4641016151377544}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 7.937253933193772}, "wmill.s3_reader.S3BufferedReader.peek": {"tf": 4.242640687119285}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 4.242640687119285}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 4.242640687119285}, "wmill.s3_reader.bytes_generator": {"tf": 5.830951894845301}}, "df": 103, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.__init__": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1.7320508075688772}, "wmill.client.Windmill.run_script_by_path": {"tf": 1.7320508075688772}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1.7320508075688772}, "wmill.client.Windmill.wait_job": {"tf": 1.7320508075688772}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.Windmill.set_variable": {"tf": 1}, "wmill.client.Windmill.get_resource": {"tf": 1}, "wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1.7320508075688772}, "wmill.client.run_script_by_path_sync": {"tf": 1.7320508075688772}, "wmill.client.get_resource": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.send_teams_message": {"tf": 1}, "wmill.client.run_script": {"tf": 1.7320508075688772}, "wmill.client.run_script_by_path": {"tf": 1.7320508075688772}, "wmill.client.run_script_by_hash": {"tf": 1.7320508075688772}}, "df": 18}}, "t": {"docs": {}, "df": 0, "o": {"3": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}}}}}}, "docs": {}, "df": 0}}}, "y": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}}, "df": 4, "i": {"docs": {}, "df": 0, "o": {"docs": {"wmill.s3_reader.bytes_generator": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.s3_reader.bytes_generator": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.s3_reader.bytes_generator": {"tf": 1}}, "df": 5}}}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.send_teams_message": {"tf": 1}}, "df": 2}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.__init__": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.get_resource": {"tf": 1}, "wmill.client.get_resource": {"tf": 1}}, "df": 2}}}}}}}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.s3_reader.bytes_generator": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 2}}}}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.__init__": {"tf": 1.7320508075688772}, "wmill.client.Windmill.run_script_async": {"tf": 2}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1.4142135623730951}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1.4142135623730951}, "wmill.client.Windmill.run_flow_async": {"tf": 1.4142135623730951}, "wmill.client.Windmill.run_script": {"tf": 2.449489742783178}, "wmill.client.Windmill.run_script_by_path": {"tf": 2}, "wmill.client.Windmill.run_script_by_hash": {"tf": 2}, "wmill.client.Windmill.wait_job": {"tf": 1.7320508075688772}, "wmill.client.Windmill.get_root_job_id": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.Windmill.set_variable": {"tf": 1}, "wmill.client.Windmill.get_resource": {"tf": 1.4142135623730951}, "wmill.client.Windmill.set_progress": {"tf": 1}, "wmill.client.Windmill.get_progress": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 2.449489742783178}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.Windmill.get_resume_urls": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2.23606797749979}, "wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.get_root_job_id": {"tf": 1.4142135623730951}, "wmill.client.run_script_async": {"tf": 1.4142135623730951}, "wmill.client.run_flow_async": {"tf": 1.4142135623730951}, "wmill.client.run_script_sync": {"tf": 1.7320508075688772}, "wmill.client.run_script_by_path_async": {"tf": 1.4142135623730951}, "wmill.client.run_script_by_hash_async": {"tf": 1.4142135623730951}, "wmill.client.run_script_by_path_sync": {"tf": 1.7320508075688772}, "wmill.client.get_result": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1.4142135623730951}, "wmill.client.load_s3_file_reader": {"tf": 1.4142135623730951}, "wmill.client.write_s3_file": {"tf": 2.6457513110645907}, "wmill.client.get_resource": {"tf": 1.4142135623730951}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.set_state": {"tf": 1}, "wmill.client.set_progress": {"tf": 1.4142135623730951}, "wmill.client.get_progress": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}, "wmill.client.get_resume_urls": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 2.23606797749979}, "wmill.client.send_teams_message": {"tf": 1}, "wmill.client.run_script": {"tf": 2.23606797749979}, "wmill.client.run_script_by_path": {"tf": 1.7320508075688772}, "wmill.client.run_script_by_hash": {"tf": 1.7320508075688772}, "wmill.client.append_to_result_stream": {"tf": 1}, "wmill.client.stream_result": {"tf": 1}}, "df": 55}}, "t": {"docs": {"wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.get_result": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 13}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.__init__": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.__init__": {"tf": 1}, "wmill.client.Windmill.get": {"tf": 1}, "wmill.client.Windmill.post": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1.4142135623730951}, "wmill.client.run_script_by_path_sync": {"tf": 1.4142135623730951}, "wmill.client.get_result": {"tf": 1}, "wmill.client.run_script": {"tf": 1.4142135623730951}, "wmill.client.run_script_by_path": {"tf": 1.4142135623730951}, "wmill.client.run_script_by_hash": {"tf": 1.4142135623730951}}, "df": 17}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}}, "df": 2}}}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"wmill.client.Windmill.create_token": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 10}}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 9}}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.set_resource": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.client.set_resource": {"tf": 1}}, "df": 4, "s": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1.4142135623730951}, "wmill.client.Windmill.sign_s3_objects": {"tf": 1.4142135623730951}, "wmill.client.Windmill.sign_s3_object": {"tf": 1.4142135623730951}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1.4142135623730951}, "wmill.client.sign_s3_objects": {"tf": 1.4142135623730951}, "wmill.client.sign_s3_object": {"tf": 1.4142135623730951}, "wmill.client.parse_s3_object": {"tf": 1.4142135623730951}}, "df": 17}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.send_teams_message": {"tf": 1}, "wmill.client.append_to_result_stream": {"tf": 1}}, "df": 3}}}}, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.__init__": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}}, "df": 2}}}}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.get_job_status": {"tf": 1}}, "df": 2}}}}}}, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1.4142135623730951}, "wmill.client.Windmill.sign_s3_objects": {"tf": 1.4142135623730951}, "wmill.client.Windmill.sign_s3_object": {"tf": 1.4142135623730951}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1.4142135623730951}, "wmill.client.sign_s3_objects": {"tf": 1.4142135623730951}, "wmill.client.sign_s3_object": {"tf": 1.4142135623730951}, "wmill.client.parse_s3_object": {"tf": 1.4142135623730951}}, "df": 17}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.__init__": {"tf": 1}}, "df": 1}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 9}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.set_variable": {"tf": 1}, "wmill.client.Windmill.set_resource": {"tf": 1}, "wmill.client.Windmill.set_state": {"tf": 1}, "wmill.client.Windmill.set_progress": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.set_state": {"tf": 1}, "wmill.client.set_progress": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}}, "df": 14}}}}}, "s": {"3": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.Windmill.load_s3_file": {"tf": 1.4142135623730951}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1.4142135623730951}, "wmill.client.Windmill.write_s3_file": {"tf": 1.7320508075688772}, "wmill.client.Windmill.sign_s3_objects": {"tf": 1.7320508075688772}, "wmill.client.Windmill.sign_s3_object": {"tf": 1.7320508075688772}, "wmill.client.duckdb_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.polars_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.boto3_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.load_s3_file": {"tf": 1.4142135623730951}, "wmill.client.load_s3_file_reader": {"tf": 1.4142135623730951}, "wmill.client.write_s3_file": {"tf": 1.7320508075688772}, "wmill.client.sign_s3_objects": {"tf": 1.7320508075688772}, "wmill.client.sign_s3_object": {"tf": 1.7320508075688772}, "wmill.client.parse_s3_object": {"tf": 1.7320508075688772}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}}, "df": 18, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1.4142135623730951}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1.4142135623730951}, "wmill.client.Windmill.write_s3_file": {"tf": 1.7320508075688772}, "wmill.client.Windmill.sign_s3_objects": {"tf": 1.4142135623730951}, "wmill.client.Windmill.sign_s3_object": {"tf": 1.4142135623730951}, "wmill.client.load_s3_file": {"tf": 1.4142135623730951}, "wmill.client.load_s3_file_reader": {"tf": 1.4142135623730951}, "wmill.client.write_s3_file": {"tf": 1.7320508075688772}, "wmill.client.sign_s3_objects": {"tf": 1.4142135623730951}, "wmill.client.sign_s3_object": {"tf": 1.4142135623730951}, "wmill.client.parse_s3_object": {"tf": 1.4142135623730951}}, "df": 11}}}}}}}, "docs": {"wmill.client.parse_resource_syntax": {"tf": 1}, "wmill.client.parse_variable_syntax": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "f": {"docs": {"wmill.client.Windmill.get_mocked_api": {"tf": 1}, "wmill.client.Windmill.get_client": {"tf": 1}, "wmill.client.Windmill.get": {"tf": 1}, "wmill.client.Windmill.post": {"tf": 1}, "wmill.client.Windmill.create_token": {"tf": 1}, "wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.Windmill.get_job": {"tf": 1}, "wmill.client.Windmill.get_root_job_id": {"tf": 1}, "wmill.client.Windmill.get_id_token": {"tf": 1}, "wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.Windmill.get_variable": {"tf": 1}, "wmill.client.Windmill.set_variable": {"tf": 1}, "wmill.client.Windmill.get_resource": {"tf": 1}, "wmill.client.Windmill.set_resource": {"tf": 1}, "wmill.client.Windmill.set_state": {"tf": 1}, "wmill.client.Windmill.set_progress": {"tf": 1}, "wmill.client.Windmill.get_progress": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.Windmill.sign_s3_objects": {"tf": 1}, "wmill.client.Windmill.sign_s3_object": {"tf": 1}, "wmill.client.Windmill.whoami": {"tf": 1}, "wmill.client.Windmill.get_resume_urls": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.peek": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 44}}, "c": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}}, "df": 8}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.set_variable": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}}, "df": 2}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.get": {"tf": 1}, "wmill.client.Windmill.post": {"tf": 1}}, "df": 2}}, "e": {"docs": {"wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}}, "df": 8}}}, "r": {"docs": {"wmill.client.Windmill.create_token": {"tf": 1}, "wmill.client.Windmill.run_script_async": {"tf": 1.7320508075688772}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1.4142135623730951}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1.4142135623730951}, "wmill.client.Windmill.run_flow_async": {"tf": 1.4142135623730951}, "wmill.client.Windmill.run_script": {"tf": 1.4142135623730951}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.get_job": {"tf": 1}, "wmill.client.Windmill.get_root_job_id": {"tf": 1}, "wmill.client.Windmill.get_id_token": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.Windmill.get_variable": {"tf": 1.4142135623730951}, "wmill.client.Windmill.set_variable": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_resource": {"tf": 1}, "wmill.client.Windmill.set_resource": {"tf": 1.4142135623730951}, "wmill.client.Windmill.set_progress": {"tf": 1}, "wmill.client.Windmill.get_progress": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.load_s3_file": {"tf": 1.4142135623730951}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1.4142135623730951}, "wmill.client.Windmill.write_s3_file": {"tf": 2}, "wmill.client.Windmill.sign_s3_objects": {"tf": 1}, "wmill.client.Windmill.sign_s3_object": {"tf": 1}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.Windmill.get_resume_urls": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2}, "wmill.client.Windmill.username_to_email": {"tf": 1.4142135623730951}, "wmill.client.Windmill.send_teams_message": {"tf": 1.4142135623730951}, "wmill.client.deprecate": {"tf": 1}, "wmill.client.get_workspace": {"tf": 1}, "wmill.client.get_root_job_id": {"tf": 1.4142135623730951}, "wmill.client.get_version": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1.7320508075688772}, "wmill.client.run_flow_async": {"tf": 1.7320508075688772}, "wmill.client.run_script_sync": {"tf": 1.4142135623730951}, "wmill.client.run_script_by_path_async": {"tf": 1.7320508075688772}, "wmill.client.run_script_by_hash_async": {"tf": 1.7320508075688772}, "wmill.client.run_script_by_path_sync": {"tf": 1.4142135623730951}, "wmill.client.get_id_token": {"tf": 1.4142135623730951}, "wmill.client.get_job_status": {"tf": 1}, "wmill.client.get_result": {"tf": 1.4142135623730951}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1.4142135623730951}, "wmill.client.load_s3_file_reader": {"tf": 1.4142135623730951}, "wmill.client.write_s3_file": {"tf": 2}, "wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}, "wmill.client.get_resource": {"tf": 1}, "wmill.client.set_resource": {"tf": 1.4142135623730951}, "wmill.client.set_progress": {"tf": 1}, "wmill.client.get_progress": {"tf": 1}, "wmill.client.get_variable": {"tf": 1.4142135623730951}, "wmill.client.set_variable": {"tf": 1.4142135623730951}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}, "wmill.client.get_state_path": {"tf": 1}, "wmill.client.get_resume_urls": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 2}, "wmill.client.send_teams_message": {"tf": 1.4142135623730951}, "wmill.client.run_script": {"tf": 1.4142135623730951}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1.4142135623730951}, "wmill.client.parse_resource_syntax": {"tf": 1.4142135623730951}, "wmill.client.parse_s3_object": {"tf": 1}, "wmill.client.parse_variable_syntax": {"tf": 1.4142135623730951}, "wmill.client.append_to_result_stream": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 2}}, "df": 79, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"wmill.client.stream_result": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}}, "df": 8}}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}}, "df": 2}}}}, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.send_teams_message": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"wmill.s3_reader.S3BufferedReader.peek": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 3}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.get_mocked_api": {"tf": 1}, "wmill.client.Windmill.set_progress": {"tf": 1}, "wmill.client.Windmill.get_progress": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}, "wmill.client.set_progress": {"tf": 1}, "wmill.client.get_progress": {"tf": 1}, "wmill.client.parse_resource_syntax": {"tf": 1}, "wmill.client.parse_variable_syntax": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1.4142135623730951}}, "df": 10}}}}}}}, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.sign_s3_object": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}, "wmill.client.parse_s3_object": {"tf": 1}}, "df": 3, "s": {"docs": {"wmill.client.Windmill.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}}, "df": 2}}}}}}, "f": {"docs": {"wmill.client.deprecate": {"tf": 1}}, "df": 1}, "r": {"docs": {"wmill.client.run_script_async": {"tf": 1}}, "df": 1}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.get_mocked_api": {"tf": 1}, "wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.Windmill.get_job": {"tf": 1}, "wmill.client.Windmill.get_root_job_id": {"tf": 1}, "wmill.client.Windmill.get_resource": {"tf": 1}, "wmill.client.Windmill.whoami": {"tf": 1}, "wmill.client.Windmill.get_resume_urls": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}, "wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.get_result": {"tf": 1}, "wmill.client.whoami": {"tf": 1}, "wmill.client.get_resource": {"tf": 1}, "wmill.client.get_resume_urls": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1.4142135623730951}, "wmill.client.send_teams_message": {"tf": 1}, "wmill.client.cancel_running": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 32}}, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}}, "df": 2}}}}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.create_token": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.create_token": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 10}}}}}}, "y": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.create_token": {"tf": 1}}, "df": 1}}}, "o": {"docs": {"wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}}, "df": 2}, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}}, "df": 2}}}}}}, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}}, "df": 2}}}}}}}, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "x": {"docs": {"wmill.client.Windmill.get_client": {"tf": 1}, "wmill.client.Windmill.get": {"tf": 1}, "wmill.client.Windmill.post": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}}, "df": 4}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 9}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.get_client": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1.4142135623730951}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {"wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 9}}}}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.get_job_status": {"tf": 1}}, "df": 2}}}}}}}, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.write_s3_file": {"tf": 1.7320508075688772}, "wmill.client.write_s3_file": {"tf": 1.7320508075688772}}, "df": 2}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.send_teams_message": {"tf": 1}}, "df": 2}}}}}}}}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}}, "df": 2}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.send_teams_message": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.get": {"tf": 1}, "wmill.client.Windmill.post": {"tf": 1}}, "df": 2}}}}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}}, "df": 2}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.get": {"tf": 1}, "wmill.client.Windmill.post": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.get": {"tf": 1}, "wmill.client.Windmill.post": {"tf": 1}}, "df": 2}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.get_result": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 11}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.set_resource": {"tf": 1}, "wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}}, "df": 17}}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"wmill.s3_reader.bytes_generator": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.get_job_status": {"tf": 1}}, "df": 2}}}}}}}, "f": {"docs": {"wmill.client.init_global_client": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.Windmill.get": {"tf": 1}, "wmill.client.Windmill.post": {"tf": 1}}, "df": 2}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 7}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.run_script": {"tf": 1.4142135623730951}, "wmill.client.Windmill.run_script_by_path": {"tf": 1.4142135623730951}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1.4142135623730951}, "wmill.client.Windmill.wait_job": {"tf": 1.4142135623730951}, "wmill.client.Windmill.set_variable": {"tf": 1}, "wmill.client.Windmill.get_resource": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.get_resource": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 13}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.deprecate": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}}, "df": 3}}}}, "k": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.get": {"tf": 1}, "wmill.client.Windmill.post": {"tf": 1}, "wmill.client.task": {"tf": 1}}, "df": 3}}}}}, "e": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}}, "df": 5}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.get_variable": {"tf": 1}, "wmill.client.Windmill.set_variable": {"tf": 1}, "wmill.client.Windmill.get_resource": {"tf": 1}, "wmill.client.Windmill.set_resource": {"tf": 1}, "wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.client.get_resource": {"tf": 1}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}, "wmill.client.get_variable": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1}}, "df": 42}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}}, "df": 2}}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}}, "df": 4}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}, "wmill.client.task": {"tf": 1}}, "df": 19}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.get_result": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 11}}}}}, "n": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.Windmill.set_resource": {"tf": 1}, "wmill.client.Windmill.set_state": {"tf": 1}, "wmill.client.Windmill.get_progress": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1.4142135623730951}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1.4142135623730951}, "wmill.client.get_result": {"tf": 1}, "wmill.client.get_state": {"tf": 1}, "wmill.client.set_resource": {"tf": 1.4142135623730951}, "wmill.client.set_state": {"tf": 1}, "wmill.client.get_progress": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 31}}, "u": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.get_id_token": {"tf": 1}, "wmill.client.get_id_token": {"tf": 1}}, "df": 2}}}}}}}, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.Windmill.get_resume_urls": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.get_resume_urls": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}}, "df": 4}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1.4142135623730951}, "wmill.client.deprecate": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1.4142135623730951}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}}, "df": 9, "t": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.Windmill.set_progress": {"tf": 1}, "wmill.client.run_script_async": {"tf": 1}, "wmill.client.run_flow_async": {"tf": 1}, "wmill.client.run_script_by_path_async": {"tf": 1}, "wmill.client.run_script_by_hash_async": {"tf": 1}, "wmill.client.set_progress": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 17}}, "s": {"docs": {"wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.Windmill.set_variable": {"tf": 1}, "wmill.client.run_script_sync": {"tf": 1}, "wmill.client.run_script_by_path_sync": {"tf": 1}, "wmill.client.get_result": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 13}, "d": {"docs": {"wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.Windmill.get_job": {"tf": 1}, "wmill.client.Windmill.get_root_job_id": {"tf": 1}, "wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.Windmill.set_progress": {"tf": 1}, "wmill.client.Windmill.get_progress": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.get_root_job_id": {"tf": 1}, "wmill.client.get_job_status": {"tf": 1}, "wmill.client.get_result": {"tf": 1}, "wmill.client.set_progress": {"tf": 1}, "wmill.client.get_progress": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}, "wmill.client.send_teams_message": {"tf": 1}}, "df": 16}, "f": {"docs": {"wmill.client.Windmill.get_resource": {"tf": 1}, "wmill.client.get_resource": {"tf": 1}}, "df": 2}, "o": {"docs": {"wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.s3_reader.bytes_generator": {"tf": 1.4142135623730951}}, "df": 5}}, "j": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {"wmill.client.Windmill.wait_job": {"tf": 1}, "wmill.client.Windmill.get_job": {"tf": 1}, "wmill.client.Windmill.get_root_job_id": {"tf": 1}, "wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.Windmill.get_result": {"tf": 1}, "wmill.client.Windmill.set_progress": {"tf": 1}, "wmill.client.Windmill.get_progress": {"tf": 1}, "wmill.client.get_root_job_id": {"tf": 1}, "wmill.client.get_job_status": {"tf": 1}, "wmill.client.get_result": {"tf": 1}, "wmill.client.set_progress": {"tf": 1}, "wmill.client.get_progress": {"tf": 1}}, "df": 12}}, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1.4142135623730951}}, "df": 6}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.get_job_status": {"tf": 1}, "wmill.client.get_job_status": {"tf": 1}}, "df": 2}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.sign_s3_objects": {"tf": 1.4142135623730951}, "wmill.client.sign_s3_objects": {"tf": 1.4142135623730951}}, "df": 2}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.request_interactive_slack_approval": {"tf": 1}}, "df": 2}}}}}}}}}, "bases": {"root": {"docs": {"wmill.s3_reader.S3BufferedReader": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "o": {"docs": {"wmill.s3_reader.S3BufferedReader": {"tf": 1}}, "df": 1}}, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"wmill.s3_reader.S3BufferedReader": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_types.S3Object": {"tf": 1}, "wmill.s3_types.S3FsClientKwargs": {"tf": 1}, "wmill.s3_types.S3FsArgs": {"tf": 1}, "wmill.s3_types.StorageOptions": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings": {"tf": 1}, "wmill.s3_types.DuckDbConnectionSettings": {"tf": 1}}, "df": 7}}}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"wmill.s3_types.S3Object": {"tf": 1}, "wmill.s3_types.S3FsClientKwargs": {"tf": 1}, "wmill.s3_types.S3FsArgs": {"tf": 1}, "wmill.s3_types.StorageOptions": {"tf": 1}, "wmill.s3_types.PolarsConnectionSettings": {"tf": 1}, "wmill.s3_types.Boto3ConnectionSettings": {"tf": 1}, "wmill.s3_types.DuckDbConnectionSettings": {"tf": 1}}, "df": 7}}}}}}, "doc": {"root": {"4": {"2": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "8": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}}, "df": 1}, "docs": {"wmill": {"tf": 1.7320508075688772}, "wmill.client": {"tf": 1.7320508075688772}, "wmill.client.logger": {"tf": 1.7320508075688772}, "wmill.client.JobStatus": {"tf": 1.7320508075688772}, "wmill.client.Windmill": {"tf": 1.7320508075688772}, "wmill.client.Windmill.__init__": {"tf": 1.7320508075688772}, "wmill.client.Windmill.base_url": {"tf": 1.7320508075688772}, "wmill.client.Windmill.token": {"tf": 1.7320508075688772}, "wmill.client.Windmill.headers": {"tf": 1.7320508075688772}, "wmill.client.Windmill.verify": {"tf": 1.7320508075688772}, "wmill.client.Windmill.client": {"tf": 1.7320508075688772}, "wmill.client.Windmill.workspace": {"tf": 1.7320508075688772}, "wmill.client.Windmill.path": {"tf": 1.7320508075688772}, "wmill.client.Windmill.mocked_api": {"tf": 1.7320508075688772}, "wmill.client.Windmill.get_mocked_api": {"tf": 1.7320508075688772}, "wmill.client.Windmill.get_client": {"tf": 1.7320508075688772}, "wmill.client.Windmill.get": {"tf": 1.7320508075688772}, "wmill.client.Windmill.post": {"tf": 1.7320508075688772}, "wmill.client.Windmill.create_token": {"tf": 1.7320508075688772}, "wmill.client.Windmill.run_script_async": {"tf": 2.8284271247461903}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1.7320508075688772}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1.7320508075688772}, "wmill.client.Windmill.run_flow_async": {"tf": 1.7320508075688772}, "wmill.client.Windmill.run_script": {"tf": 2.8284271247461903}, "wmill.client.Windmill.run_script_by_path": {"tf": 1.7320508075688772}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1.7320508075688772}, "wmill.client.Windmill.wait_job": {"tf": 1.7320508075688772}, "wmill.client.Windmill.cancel_running": {"tf": 1.7320508075688772}, "wmill.client.Windmill.get_job": {"tf": 1.7320508075688772}, "wmill.client.Windmill.get_root_job_id": {"tf": 1.7320508075688772}, "wmill.client.Windmill.get_id_token": {"tf": 1.7320508075688772}, "wmill.client.Windmill.get_job_status": {"tf": 1.7320508075688772}, "wmill.client.Windmill.get_result": {"tf": 1.7320508075688772}, "wmill.client.Windmill.get_variable": {"tf": 1.7320508075688772}, "wmill.client.Windmill.set_variable": {"tf": 1.7320508075688772}, "wmill.client.Windmill.get_resource": {"tf": 1.7320508075688772}, "wmill.client.Windmill.set_resource": {"tf": 1.7320508075688772}, "wmill.client.Windmill.set_state": {"tf": 1.7320508075688772}, "wmill.client.Windmill.set_progress": {"tf": 1.7320508075688772}, "wmill.client.Windmill.get_progress": {"tf": 1.7320508075688772}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1.4142135623730951}, "wmill.client.Windmill.version": {"tf": 1.7320508075688772}, "wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.Windmill.load_s3_file": {"tf": 3}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 3}, "wmill.client.Windmill.write_s3_file": {"tf": 4.242640687119285}, "wmill.client.Windmill.sign_s3_objects": {"tf": 1.7320508075688772}, "wmill.client.Windmill.sign_s3_object": {"tf": 1.7320508075688772}, "wmill.client.Windmill.whoami": {"tf": 1.7320508075688772}, "wmill.client.Windmill.user": {"tf": 1.7320508075688772}, "wmill.client.Windmill.state_path": {"tf": 1.7320508075688772}, "wmill.client.Windmill.state": {"tf": 1.7320508075688772}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1.4142135623730951}, "wmill.client.Windmill.set_shared_state": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_shared_state": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_resume_urls": {"tf": 1.7320508075688772}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 10.862780491200215}, "wmill.client.Windmill.username_to_email": {"tf": 1.7320508075688772}, "wmill.client.Windmill.send_teams_message": {"tf": 1.4142135623730951}, "wmill.client.init_global_client": {"tf": 1.7320508075688772}, "wmill.client.deprecate": {"tf": 1.7320508075688772}, "wmill.client.get_workspace": {"tf": 1.7320508075688772}, "wmill.client.get_root_job_id": {"tf": 1.7320508075688772}, "wmill.client.get_version": {"tf": 1.7320508075688772}, "wmill.client.run_script_async": {"tf": 1.7320508075688772}, "wmill.client.run_flow_async": {"tf": 1.7320508075688772}, "wmill.client.run_script_sync": {"tf": 1.7320508075688772}, "wmill.client.run_script_by_path_async": {"tf": 1.7320508075688772}, "wmill.client.run_script_by_hash_async": {"tf": 1.7320508075688772}, "wmill.client.run_script_by_path_sync": {"tf": 1.7320508075688772}, "wmill.client.get_id_token": {"tf": 1.7320508075688772}, "wmill.client.get_job_status": {"tf": 1.7320508075688772}, "wmill.client.get_result": {"tf": 1.7320508075688772}, "wmill.client.duckdb_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.polars_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.boto3_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.load_s3_file": {"tf": 1.4142135623730951}, "wmill.client.load_s3_file_reader": {"tf": 1.4142135623730951}, "wmill.client.write_s3_file": {"tf": 3.1622776601683795}, "wmill.client.sign_s3_objects": {"tf": 1.4142135623730951}, "wmill.client.sign_s3_object": {"tf": 1.4142135623730951}, "wmill.client.whoami": {"tf": 1.4142135623730951}, "wmill.client.get_state": {"tf": 1.4142135623730951}, "wmill.client.get_resource": {"tf": 1.4142135623730951}, "wmill.client.set_resource": {"tf": 1.4142135623730951}, "wmill.client.set_state": {"tf": 1.4142135623730951}, "wmill.client.set_progress": {"tf": 1.4142135623730951}, "wmill.client.get_progress": {"tf": 1.4142135623730951}, "wmill.client.set_shared_state_pickle": {"tf": 1.4142135623730951}, "wmill.client.get_shared_state_pickle": {"tf": 1.4142135623730951}, "wmill.client.set_shared_state": {"tf": 1.4142135623730951}, "wmill.client.get_shared_state": {"tf": 1.4142135623730951}, "wmill.client.get_variable": {"tf": 1.4142135623730951}, "wmill.client.set_variable": {"tf": 1.4142135623730951}, "wmill.client.get_flow_user_state": {"tf": 1.4142135623730951}, "wmill.client.set_flow_user_state": {"tf": 1.4142135623730951}, "wmill.client.get_state_path": {"tf": 1.7320508075688772}, "wmill.client.get_resume_urls": {"tf": 1.7320508075688772}, "wmill.client.request_interactive_slack_approval": {"tf": 1.7320508075688772}, "wmill.client.send_teams_message": {"tf": 1.7320508075688772}, "wmill.client.cancel_running": {"tf": 1.7320508075688772}, "wmill.client.run_script": {"tf": 2.8284271247461903}, "wmill.client.run_script_by_path": {"tf": 1.7320508075688772}, "wmill.client.run_script_by_hash": {"tf": 1.7320508075688772}, "wmill.client.username_to_email": {"tf": 1.7320508075688772}, "wmill.client.task": {"tf": 1.7320508075688772}, "wmill.client.parse_resource_syntax": {"tf": 1.7320508075688772}, "wmill.client.parse_s3_object": {"tf": 1.7320508075688772}, "wmill.client.parse_variable_syntax": {"tf": 1.7320508075688772}, "wmill.client.append_to_result_stream": {"tf": 2.23606797749979}, "wmill.client.stream_result": {"tf": 2.23606797749979}, "wmill.s3_reader": {"tf": 1.7320508075688772}, "wmill.s3_reader.S3BufferedReader": {"tf": 1.7320508075688772}, "wmill.s3_reader.S3BufferedReader.__init__": {"tf": 1.7320508075688772}, "wmill.s3_reader.S3BufferedReader.peek": {"tf": 1.7320508075688772}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 3.872983346207417}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 2.449489742783178}, "wmill.s3_reader.bytes_generator": {"tf": 1.7320508075688772}, "wmill.s3_types": {"tf": 1.7320508075688772}, "wmill.s3_types.S3Object": {"tf": 1.7320508075688772}, "wmill.s3_types.S3Object.s3": {"tf": 1.7320508075688772}, "wmill.s3_types.S3Object.storage": {"tf": 1.7320508075688772}, "wmill.s3_types.S3Object.presigned": {"tf": 1.7320508075688772}, "wmill.s3_types.S3FsClientKwargs": {"tf": 1.7320508075688772}, "wmill.s3_types.S3FsClientKwargs.region_name": {"tf": 1.7320508075688772}, "wmill.s3_types.S3FsArgs": {"tf": 1.7320508075688772}, "wmill.s3_types.S3FsArgs.endpoint_url": {"tf": 1.7320508075688772}, "wmill.s3_types.S3FsArgs.key": {"tf": 1.7320508075688772}, "wmill.s3_types.S3FsArgs.secret": {"tf": 1.7320508075688772}, "wmill.s3_types.S3FsArgs.use_ssl": {"tf": 1.7320508075688772}, "wmill.s3_types.S3FsArgs.cache_regions": {"tf": 1.7320508075688772}, "wmill.s3_types.S3FsArgs.client_kwargs": {"tf": 1.7320508075688772}, "wmill.s3_types.StorageOptions": {"tf": 1.7320508075688772}, "wmill.s3_types.StorageOptions.aws_endpoint_url": {"tf": 1.7320508075688772}, "wmill.s3_types.StorageOptions.aws_access_key_id": {"tf": 1.7320508075688772}, "wmill.s3_types.StorageOptions.aws_secret_access_key": {"tf": 1.7320508075688772}, "wmill.s3_types.StorageOptions.aws_region": {"tf": 1.7320508075688772}, "wmill.s3_types.StorageOptions.aws_allow_http": {"tf": 1.7320508075688772}, "wmill.s3_types.PolarsConnectionSettings": {"tf": 1.7320508075688772}, "wmill.s3_types.PolarsConnectionSettings.s3fs_args": {"tf": 1.7320508075688772}, "wmill.s3_types.PolarsConnectionSettings.storage_options": {"tf": 1.7320508075688772}, "wmill.s3_types.Boto3ConnectionSettings": {"tf": 1.7320508075688772}, "wmill.s3_types.Boto3ConnectionSettings.endpoint_url": {"tf": 1.7320508075688772}, "wmill.s3_types.Boto3ConnectionSettings.region_name": {"tf": 1.7320508075688772}, "wmill.s3_types.Boto3ConnectionSettings.use_ssl": {"tf": 1.7320508075688772}, "wmill.s3_types.Boto3ConnectionSettings.aws_access_key_id": {"tf": 1.7320508075688772}, "wmill.s3_types.Boto3ConnectionSettings.aws_secret_access_key": {"tf": 1.7320508075688772}, "wmill.s3_types.DuckDbConnectionSettings": {"tf": 1.7320508075688772}, "wmill.s3_types.DuckDbConnectionSettings.connection_settings_str": {"tf": 1.7320508075688772}}, "df": 153, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.s3_reader.S3BufferedReader": {"tf": 1}}, "df": 5}, "o": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"wmill.client.set_resource": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}}, "df": 2}}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.cancel_running": {"tf": 1}}, "df": 2}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.whoami": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.cancel_running": {"tf": 1}}, "df": 2}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}}, "df": 6}}}}}, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}}, "df": 6}}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 2}, "wmill.client.Windmill.write_s3_file": {"tf": 1.4142135623730951}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1.7320508075688772}}, "df": 5}}, "x": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 3}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1.4142135623730951}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 3}}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"1": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}, "2": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1.4142135623730951}, "wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1.4142135623730951}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}, "wmill.client.Windmill.send_teams_message": {"tf": 1.4142135623730951}, "wmill.client.get_id_token": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}, "wmill.client.set_resource": {"tf": 1.4142135623730951}, "wmill.client.get_variable": {"tf": 1.4142135623730951}, "wmill.client.set_variable": {"tf": 1.4142135623730951}, "wmill.client.get_flow_user_state": {"tf": 1.4142135623730951}, "wmill.client.set_flow_user_state": {"tf": 1.4142135623730951}, "wmill.client.append_to_result_stream": {"tf": 1}, "wmill.s3_reader.S3BufferedReader": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 26, "n": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.polars_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.boto3_connection_settings": {"tf": 1.4142135623730951}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 10, "d": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 2.449489742783178}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 22}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}}, "df": 2}}}}}}}}, "s": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.get_variable": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1.4142135623730951}}, "df": 14, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1.4142135623730951}}, "df": 1}}}}, "t": {"docs": {"wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.get_variable": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1.4142135623730951}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 10}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.write_s3_file": {"tf": 1}}, "df": 1}}}, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}, "wmill.client.append_to_result_stream": {"tf": 1}, "wmill.client.stream_result": {"tf": 1}}, "df": 3}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}, "p": {"docs": {}, "df": 0, "p": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 2, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2.23606797749979}}, "df": 1, "#": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1, "r": {"1": {"2": {"3": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2}}, "df": 1}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}}}}, "s": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 4}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.append_to_result_stream": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}}}, "d": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}}, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 2}}}}}}, "u": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.get_id_token": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.write_s3_file": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "w": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.get_id_token": {"tf": 1}}, "df": 1}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}}}}}}}, "s": {"3": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.Windmill.load_s3_file": {"tf": 2.23606797749979}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 2.23606797749979}, "wmill.client.Windmill.write_s3_file": {"tf": 2.6457513110645907}, "wmill.client.duckdb_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.polars_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.boto3_connection_settings": {"tf": 1.4142135623730951}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1.4142135623730951}, "wmill.client.sign_s3_object": {"tf": 1.4142135623730951}, "wmill.client.parse_s3_object": {"tf": 1}}, "df": 15, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1.4142135623730951}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1.7320508075688772}, "wmill.client.Windmill.write_s3_file": {"tf": 1.4142135623730951}, "wmill.client.parse_s3_object": {"tf": 1}}, "df": 4}}}}}}}, "docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1.7320508075688772}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1.7320508075688772}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.cancel_running": {"tf": 1}, "wmill.client.run_script": {"tf": 1.7320508075688772}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 11}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.run_script": {"tf": 1}}, "df": 3}}}, "g": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}}, "df": 2}}}}}, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 6}}}}}}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "x": {"docs": {"wmill.client.parse_resource_syntax": {"tf": 1}, "wmill.client.parse_variable_syntax": {"tf": 1}}, "df": 2}}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.cancel_running": {"tf": 1}}, "df": 2}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.Windmill.username_to_email": {"tf": 1.4142135623730951}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.set_state": {"tf": 1}, "wmill.client.set_progress": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1.4142135623730951}}, "df": 13, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}}, "df": 6}}}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1}}, "df": 1, "s": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}, "t": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}, "e": {"docs": {"wmill.client.write_s3_file": {"tf": 1}}, "df": 1}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.get_state": {"tf": 1}, "wmill.client.set_state": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}}, "df": 14}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.append_to_result_stream": {"tf": 1.4142135623730951}, "wmill.client.stream_result": {"tf": 2.449489742783178}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1.4142135623730951}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 5, "s": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"wmill.client.set_resource": {"tf": 1}, "wmill.client.get_variable": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.parse_resource_syntax": {"tf": 1}, "wmill.client.parse_s3_object": {"tf": 1}, "wmill.client.parse_variable_syntax": {"tf": 1}}, "df": 6}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}}, "df": 1}}, "y": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}}, "df": 2}}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}}, "df": 8}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 2}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 3.1622776601683795}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}}}}}, "j": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1.4142135623730951}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1.4142135623730951}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1.4142135623730951}, "wmill.client.Windmill.run_flow_async": {"tf": 1.4142135623730951}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}}, "df": 5}}, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2}}, "df": 1}}}, "w": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.get_id_token": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 12, "s": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}, "wmill.client.whoami": {"tf": 1}, "wmill.client.get_variable": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1.7320508075688772}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 15}}}}}, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}, "wmill.client.append_to_result_stream": {"tf": 1.4142135623730951}, "wmill.client.stream_result": {"tf": 1.4142135623730951}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 10}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.client.get_resource": {"tf": 1}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.parse_resource_syntax": {"tf": 1}}, "df": 11}}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1.4142135623730951}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1.4142135623730951}}, "df": 3, "e": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.Windmill.load_s3_file_reader": {"tf": 1.7320508075688772}, "wmill.s3_reader.S3BufferedReader": {"tf": 1}}, "df": 2}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"wmill.s3_reader.S3BufferedReader": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1.4142135623730951}}, "df": 1}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2.6457513110645907}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 2, "d": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1.4142135623730951}, "wmill.client.Windmill.run_script": {"tf": 1.7320508075688772}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.run_script": {"tf": 1.7320508075688772}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 8, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.cancel_running": {"tf": 1}}, "df": 2}}}}}}, "b": {"docs": {"wmill.client.Windmill.write_s3_file": {"tf": 1}}, "df": 1}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}, "w": {"docs": {"wmill.s3_reader.S3BufferedReader": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 2.23606797749979}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 3}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.set_resource": {"tf": 1.4142135623730951}, "wmill.client.set_variable": {"tf": 1.4142135623730951}}, "df": 3, "s": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 11}}, "d": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2.449489742783178}, "wmill.client.Windmill.send_teams_message": {"tf": 1}}, "df": 6}, "n": {"docs": {"wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2}, "wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 17, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.run_script": {"tf": 1}}, "df": 3}}}}}, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}}, "df": 6}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}}, "df": 6}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1.4142135623730951}}, "df": 2}}}}}}}}, "o": {"docs": {"wmill.client.get_id_token": {"tf": 1}}, "df": 1}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 2}}}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}}, "df": 3}}}, "l": {"docs": {}, "df": 0, "y": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 2}}}, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 2}}}}}}}, "f": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1.7320508075688772}}, "df": 5}, "s": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}, "wmill.client.Windmill.username_to_email": {"tf": 1.7320508075688772}, "wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1.7320508075688772}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 2.449489742783178}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 6, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "o": {"docs": {"wmill.s3_reader.S3BufferedReader": {"tf": 1}}, "df": 1}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.run_script": {"tf": 1}}, "df": 3}}}}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "b": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}}, "df": 2}}}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.write_s3_file": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}}, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.set_resource": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 4}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1.4142135623730951}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.run_script": {"tf": 1}}, "df": 3}}}}}}, "i": {"docs": {}, "df": 0, "a": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}, "e": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1.7320508075688772}, "wmill.client.username_to_email": {"tf": 1.7320508075688772}}, "df": 2}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"1": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.get_variable": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.parse_variable_syntax": {"tf": 1}}, "df": 3, "s": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.get_id_token": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.run_script": {"tf": 1}}, "df": 4, "r": {"docs": {"wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.whoami": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}}, "df": 6, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1.7320508075688772}, "wmill.client.username_to_email": {"tf": 1.7320508075688772}}, "df": 2}}}}, "s": {"docs": {"wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}}, "df": 2}}, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 2}}}, "d": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}}, "df": 3}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}, "wmill.s3_reader.S3BufferedReader": {"tf": 1}}, "df": 11}}}, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}, "/": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.write_s3_file": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, "t": {"docs": {}, "df": 0, "f": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}}, "df": 1}}, "/": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}}}}, "p": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 2, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.write_s3_file": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1.4142135623730951}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 2}}}}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}}}}, "b": {"docs": {"wmill.client.Windmill.write_s3_file": {"tf": 1}}, "df": 1, "y": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1.4142135623730951}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1.4142135623730951}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}, "wmill.client.run_script": {"tf": 1.4142135623730951}, "wmill.client.run_script_by_path": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 11, "t": {"docs": {}, "df": 0, "e": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1, "s": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1.4142135623730951}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1.4142135623730951}}, "df": 6}}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"3": {"docs": {"wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}}, "df": 2}, "docs": {}, "df": 0}}}, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}}, "df": 3}}}}, "t": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 3}, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.s3_reader.S3BufferedReader": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1.4142135623730951}}, "df": 5}, "a": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_path_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_path": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.7320508075688772}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.get_variable": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_path": {"tf": 1}}, "df": 12, "/": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}}, "df": 3}}}}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 2}}}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.get_id_token": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.parse_resource_syntax": {"tf": 1}, "wmill.client.parse_s3_object": {"tf": 1}, "wmill.client.parse_variable_syntax": {"tf": 1}}, "df": 3}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}}, "df": 2}}}}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}}}}}, "y": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}}, "df": 3}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.load_s3_file_reader": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "w": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.set_progress": {"tf": 1}, "wmill.client.get_progress": {"tf": 1}}, "df": 2}}}}}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}}, "df": 8}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.get_id_token": {"tf": 1}}, "df": 1}}}}}}, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}}, "df": 2}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2.23606797749979}, "wmill.client.run_script": {"tf": 1}, "wmill.client.parse_s3_object": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 6, "g": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.write_s3_file": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "f": {"docs": {"wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.7320508075688772}, "wmill.client.Windmill.username_to_email": {"tf": 2}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}, "wmill.client.cancel_running": {"tf": 1}, "wmill.client.username_to_email": {"tf": 2}}, "df": 12}, "b": {"docs": {}, "df": 0, "j": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 2}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1.7320508075688772}}, "df": 3, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.sign_s3_object": {"tf": 1.4142135623730951}, "wmill.client.parse_s3_object": {"tf": 1}, "wmill.s3_reader.S3BufferedReader": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 5, "s": {"docs": {"wmill.client.sign_s3_objects": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 2}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1, "l": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2.23606797749979}}, "df": 1}}, "b": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}}, "n": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 2, "l": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}, "e": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 2}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "c": {"docs": {"wmill.client.get_id_token": {"tf": 1}}, "df": 1}}}, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"wmill.client.Windmill.run_script_async": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash_async": {"tf": 1}, "wmill.client.Windmill.run_script": {"tf": 1}, "wmill.client.Windmill.run_script_by_hash": {"tf": 1}, "wmill.client.run_script": {"tf": 1}, "wmill.client.run_script_by_hash": {"tf": 1}}, "df": 6}}}, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}}, "df": 6}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {"wmill.client.Windmill.write_s3_file": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, ":": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "w": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.write_s3_file": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}}}}}}}}}, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"wmill.client.Windmill.run_flow_async": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2.8284271247461903}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}}, "df": 6}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.load_s3_file": {"tf": 1.4142135623730951}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1.4142135623730951}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.client.get_resource": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}, "wmill.client.parse_resource_syntax": {"tf": 1}, "wmill.client.parse_s3_object": {"tf": 1}, "wmill.client.parse_variable_syntax": {"tf": 1}}, "df": 14}}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 2}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 2.23606797749979}, "wmill.client.Windmill.write_s3_file": {"tf": 3.1622776601683795}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}}, "df": 6}}, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.Windmill.write_s3_file": {"tf": 1.4142135623730951}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.7320508075688772}, "wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.get_id_token": {"tf": 1.4142135623730951}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 7, "m": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2.23606797749979}}, "df": 1, "a": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.parse_s3_object": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"wmill.client.Windmill.set_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.set_shared_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.set_shared_state": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}}, "df": 8}}}}, "o": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.7320508075688772}}, "df": 1, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.cancel_running": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.write_s3_file": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.set_resource": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}}, "df": 2}}}}, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.load_s3_file": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}}, "df": 1}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 2}, "wmill.client.username_to_email": {"tf": 2}}, "df": 2}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.write_s3_file": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 3}}}}, "t": {"docs": {}, "df": 0, "c": {"docs": {"wmill.client.get_id_token": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "f": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 2}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1.4142135623730951}}, "df": 2}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.cancel_running": {"tf": 1}, "wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1.4142135623730951}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.Windmill.set_shared_state_pickle": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1.4142135623730951}, "wmill.client.Windmill.set_shared_state": {"tf": 1.4142135623730951}, "wmill.client.Windmill.get_shared_state": {"tf": 1.4142135623730951}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 4}, "wmill.client.Windmill.username_to_email": {"tf": 2.8284271247461903}, "wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.client.get_id_token": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}, "wmill.client.whoami": {"tf": 1}, "wmill.client.get_state": {"tf": 1}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.set_state": {"tf": 1}, "wmill.client.set_progress": {"tf": 1}, "wmill.client.get_progress": {"tf": 1}, "wmill.client.set_shared_state_pickle": {"tf": 1.4142135623730951}, "wmill.client.get_shared_state_pickle": {"tf": 1.4142135623730951}, "wmill.client.set_shared_state": {"tf": 1.4142135623730951}, "wmill.client.get_shared_state": {"tf": 1.4142135623730951}, "wmill.client.get_variable": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}, "wmill.client.cancel_running": {"tf": 1}, "wmill.client.username_to_email": {"tf": 2.8284271247461903}, "wmill.client.append_to_result_stream": {"tf": 1.4142135623730951}, "wmill.client.stream_result": {"tf": 1.4142135623730951}, "wmill.s3_reader.S3BufferedReader": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 2.449489742783178}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 43}, "a": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 10}}, "i": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}, "wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 3}, "r": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.get_id_token": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}}, "df": 6}}}}, "o": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2}, "wmill.client.Windmill.username_to_email": {"tf": 1.4142135623730951}, "wmill.client.Windmill.send_teams_message": {"tf": 1.4142135623730951}, "wmill.client.get_id_token": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.client.sign_s3_objects": {"tf": 1}, "wmill.client.sign_s3_object": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1.4142135623730951}, "wmill.client.append_to_result_stream": {"tf": 1.7320508075688772}, "wmill.client.stream_result": {"tf": 1.7320508075688772}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1.4142135623730951}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1.4142135623730951}}, "df": 19, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.get_id_token": {"tf": 1}}, "df": 1, "s": {"docs": {"wmill.client.sign_s3_objects": {"tf": 1}}, "df": 1}}}}}, "x": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1.4142135623730951}}, "df": 3}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1}}, "df": 1}}}, "x": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.append_to_result_stream": {"tf": 1.7320508075688772}}, "df": 1}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.write_s3_file": {"tf": 1.7320508075688772}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.get_id_token": {"tf": 1}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.get_variable": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}, "wmill.s3_reader.S3BufferedReader": {"tf": 1}}, "df": 9}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_shared_state_pickle": {"tf": 1}, "wmill.client.Windmill.get_shared_state": {"tf": 1}, "wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.get_id_token": {"tf": 1}, "wmill.client.get_state": {"tf": 1}, "wmill.client.get_resource": {"tf": 1}, "wmill.client.get_progress": {"tf": 1}, "wmill.client.get_shared_state_pickle": {"tf": 1}, "wmill.client.get_shared_state": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 12}}, "c": {"docs": {}, "df": 0, "p": {"docs": {"wmill.client.get_id_token": {"tf": 1}}, "df": 1}}, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.write_s3_file": {"tf": 1}}, "df": 1}}}}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "y": {"1": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}, "2": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}, "docs": {"wmill.client.Windmill.set_flow_user_state": {"tf": 1}, "wmill.client.Windmill.get_flow_user_state": {"tf": 1}, "wmill.client.get_flow_user_state": {"tf": 1}, "wmill.client.set_flow_user_state": {"tf": 1}}, "df": 4}}}, "n": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.get_duckdb_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_polars_connection_settings": {"tf": 1}, "wmill.client.Windmill.get_boto3_connection_settings": {"tf": 1}, "wmill.client.duckdb_connection_settings": {"tf": 1}, "wmill.client.polars_connection_settings": {"tf": 1}, "wmill.client.boto3_connection_settings": {"tf": 1}}, "df": 6}}}}}}}, "w": {"docs": {"wmill.s3_reader.S3BufferedReader": {"tf": 1}}, "df": 1}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}, "o": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1, "t": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}, "wmill.client.set_resource": {"tf": 1}, "wmill.client.set_variable": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1.4142135623730951}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 5, "e": {"docs": {}, "df": 0, "s": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}, "n": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1.4142135623730951}}, "df": 2}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1.4142135623730951}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1.4142135623730951}, "wmill.client.load_s3_file": {"tf": 1}, "wmill.client.load_s3_file_reader": {"tf": 1}}, "df": 4}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.get_id_token": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.write_s3_file": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.get_id_token": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.sign_s3_objects": {"tf": 1}}, "df": 1}}}}, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 5}}}}}}}}, "m": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}, "wmill.client.Windmill.username_to_email": {"tf": 1.4142135623730951}, "wmill.client.username_to_email": {"tf": 1.4142135623730951}}, "df": 3, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1}, "wmill.client.Windmill.load_s3_file_reader": {"tf": 1.4142135623730951}, "wmill.client.Windmill.write_s3_file": {"tf": 1}}, "df": 3}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"wmill.client.Windmill.load_s3_file_reader": {"tf": 1}, "wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.Windmill.send_teams_message": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 4, "i": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.4142135623730951}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.write_s3_file": {"tf": 1}, "wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1.7320508075688772}, "wmill.client.get_resource": {"tf": 1}}, "df": 3}}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.write_s3_file": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 3}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.write_s3_file": {"tf": 1.7320508075688772}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}, "wmill.client.Windmill.send_teams_message": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}, "m": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.load_s3_file": {"tf": 1.4142135623730951}, "wmill.client.Windmill.write_s3_file": {"tf": 1.7320508075688772}}, "df": 2}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"wmill.client.Windmill.write_s3_file": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 2}, "wmill.client.Windmill.send_teams_message": {"tf": 1.4142135623730951}}, "df": 2}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"wmill.client.Windmill.username_to_email": {"tf": 1}, "wmill.client.username_to_email": {"tf": 1}}, "df": 2}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}, "z": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {"wmill.client.write_s3_file": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}, "wmill.s3_reader.S3BufferedReader.read1": {"tf": 1}}, "df": 2}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.request_interactive_slack_approval": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "t": {"docs": {"wmill.client.Windmill.send_teams_message": {"tf": 1}}, "df": 1}}}}}}}}, "d": {"docs": {}, "df": 0, "n": {"docs": {"wmill.client.write_s3_file": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "y": {"docs": {"wmill.s3_reader.S3BufferedReader.read": {"tf": 1}}, "df": 1}}}}}}, "pipeline": ["trimmer"], "_isPrebuiltIndex": true}; + + // mirrored in build-search-index.js (part 1) + // Also split on html tags. this is a cheap heuristic, but good enough. + elasticlunr.tokenizer.setSeperator(/[\s\-.;&_'"=,()]+|<[^>]*>/); + + let searchIndex; + if (docs._isPrebuiltIndex) { + console.info("using precompiled search index"); + searchIndex = elasticlunr.Index.load(docs); + } else { + console.time("building search index"); + // mirrored in build-search-index.js (part 2) + searchIndex = elasticlunr(function () { + this.pipeline.remove(elasticlunr.stemmer); + this.pipeline.remove(elasticlunr.stopWordFilter); + this.addField("qualname"); + this.addField("fullname"); + this.addField("annotation"); + this.addField("default_value"); + this.addField("signature"); + this.addField("bases"); + this.addField("doc"); + this.setRef("fullname"); + }); + for (let doc of docs) { + searchIndex.addDoc(doc); + } + console.timeEnd("building search index"); + } + + return (term) => searchIndex.search(term, { + fields: { + qualname: {boost: 4}, + fullname: {boost: 2}, + annotation: {boost: 2}, + default_value: {boost: 2}, + signature: {boost: 2}, + bases: {boost: 2}, + doc: {boost: 1}, + }, + expand: true + }); +})(); \ No newline at end of file diff --git a/python-client/docs/wmill.html b/python-client/docs/wmill.html new file mode 100644 index 0000000000..fafe32ad0b --- /dev/null +++ b/python-client/docs/wmill.html @@ -0,0 +1,240 @@ + + + + + + +1from __future__ import annotations + 2 + 3import atexit + 4import datetime as dt + 5import functools + 6from io import BufferedReader, BytesIO + 7import logging + 8import os + 9import random + 10import time + 11import warnings + 12import json + 13from json import JSONDecodeError + 14from typing import Dict, Any, Union, Literal, Optional + 15import re + 16 + 17import httpx + 18 + 19from .s3_reader import S3BufferedReader, bytes_generator + 20from .s3_types import ( + 21 Boto3ConnectionSettings, + 22 DuckDbConnectionSettings, + 23 PolarsConnectionSettings, + 24 S3Object, + 25) + 26 + 27_client: "Windmill | None" = None + 28 + 29logger = logging.getLogger("windmill_client") + 30 + 31JobStatus = Literal["RUNNING", "WAITING", "COMPLETED"] + 32 + 33 + 34class Windmill: + 35 def __init__(self, base_url=None, token=None, workspace=None, verify=True): + 36 base = ( + 37 base_url + 38 or os.environ.get("BASE_INTERNAL_URL") + 39 or os.environ.get("WM_BASE_URL") + 40 ) + 41 + 42 self.base_url = f"{base}/api" + 43 self.token = token or os.environ.get("WM_TOKEN") + 44 self.headers = { + 45 "Content-Type": "application/json", + 46 "Authorization": f"Bearer {self.token}", + 47 } + 48 self.verify = verify + 49 self.client = self.get_client() + 50 self.workspace = workspace or os.environ.get("WM_WORKSPACE") + 51 self.path = os.environ.get("WM_JOB_PATH") + 52 + 53 self.mocked_api = self.get_mocked_api() + 54 + 55 assert self.workspace, ( + 56 f"workspace required as an argument or as WM_WORKSPACE environment variable" + 57 ) + 58 + 59 def get_mocked_api(self) -> Optional[dict]: + 60 mocked_path = os.environ.get("WM_MOCKED_API_FILE") + 61 if not mocked_path: + 62 return None + 63 logger.info("Using mocked API from %s", mocked_path) + 64 mocked_api = {"variables": {}, "resources": {}} + 65 try: + 66 with open(mocked_path, "r") as f: + 67 incoming_mocked_api = json.load(f) + 68 mocked_api = {**mocked_api, **incoming_mocked_api} + 69 except Exception as e: + 70 logger.warning( + 71 "Error parsing mocked API file at path %s Using empty mocked API.", + 72 mocked_path, + 73 ) + 74 logger.debug(e) + 75 return mocked_api + 76 + 77 def get_client(self) -> httpx.Client: + 78 return httpx.Client( + 79 base_url=self.base_url, + 80 headers=self.headers, + 81 verify=self.verify, + 82 ) + 83 + 84 def get(self, endpoint, raise_for_status=True, **kwargs) -> httpx.Response: + 85 endpoint = endpoint.lstrip("/") + 86 resp = self.client.get(f"/{endpoint}", **kwargs) + 87 if raise_for_status: + 88 try: + 89 resp.raise_for_status() + 90 except httpx.HTTPStatusError as err: + 91 error = f"{err.request.url}: {err.response.status_code}, {err.response.text}" + 92 logger.error(error) + 93 raise Exception(error) + 94 return resp + 95 + 96 def post(self, endpoint, raise_for_status=True, **kwargs) -> httpx.Response: + 97 endpoint = endpoint.lstrip("/") + 98 resp = self.client.post(f"/{endpoint}", **kwargs) + 99 if raise_for_status: + 100 try: + 101 resp.raise_for_status() + 102 except httpx.HTTPStatusError as err: + 103 error = f"{err.request.url}: {err.response.status_code}, {err.response.text}" + 104 logger.error(error) + 105 raise Exception(error) + 106 return resp + 107 + 108 def create_token(self, duration=dt.timedelta(days=1)) -> str: + 109 endpoint = "/users/tokens/create" + 110 payload = { + 111 "label": f"refresh {time.time()}", + 112 "expiration": (dt.datetime.now() + duration).strftime("%Y-%m-%dT%H:%M:%SZ"), + 113 } + 114 return self.post(endpoint, json=payload).text + 115 + 116 def run_script_async( + 117 self, + 118 path: str = None, + 119 hash_: str = None, + 120 args: dict = None, + 121 scheduled_in_secs: int = None, + 122 ) -> str: + 123 """Create a script job and return its job id. + 124 + 125 .. deprecated:: Use run_script_by_path_async or run_script_by_hash_async instead. + 126 """ + 127 logging.warning( + 128 "run_script_async is deprecated. Use run_script_by_path_async or run_script_by_hash_async instead.", + 129 ) + 130 assert not (path and hash_), "path and hash_ are mutually exclusive" + 131 return self._run_script_async_internal(path=path, hash_=hash_, args=args, scheduled_in_secs=scheduled_in_secs) + 132 + 133 def _run_script_async_internal( + 134 self, + 135 path: str = None, + 136 hash_: str = None, + 137 args: dict = None, + 138 scheduled_in_secs: int = None, + 139 ) -> str: + 140 """Internal helper for running scripts asynchronously.""" + 141 args = args or {} + 142 params = {"scheduled_in_secs": scheduled_in_secs} if scheduled_in_secs else {} + 143 if os.environ.get("WM_JOB_ID"): + 144 params["parent_job"] = os.environ.get("WM_JOB_ID") + 145 if os.environ.get("WM_ROOT_FLOW_JOB_ID"): + 146 params["root_job"] = os.environ.get("WM_ROOT_FLOW_JOB_ID") + 147 + 148 if path: + 149 endpoint = f"/w/{self.workspace}/jobs/run/p/{path}" + 150 elif hash_: + 151 endpoint = f"/w/{self.workspace}/jobs/run/h/{hash_}" + 152 else: + 153 raise Exception("path or hash_ must be provided") + 154 + 155 return self.post(endpoint, json=args, params=params).text + 156 + 157 def run_script_by_path_async( + 158 self, + 159 path: str, + 160 args: dict = None, + 161 scheduled_in_secs: int = None, + 162 ) -> str: + 163 """Create a script job by path and return its job id.""" + 164 return self._run_script_async_internal(path=path, args=args, scheduled_in_secs=scheduled_in_secs) + 165 + 166 def run_script_by_hash_async( + 167 self, + 168 hash_: str, + 169 args: dict = None, + 170 scheduled_in_secs: int = None, + 171 ) -> str: + 172 """Create a script job by hash and return its job id.""" + 173 return self._run_script_async_internal(hash_=hash_, args=args, scheduled_in_secs=scheduled_in_secs) + 174 + 175 def run_flow_async( + 176 self, + 177 path: str, + 178 args: dict = None, + 179 scheduled_in_secs: int = None, + 180 # can only be set to false if this the job will be fully await and not concurrent with any other job + 181 # as otherwise the child flow and its own child will store their state in the parent job which will + 182 # lead to incorrectness and failures + 183 do_not_track_in_parent: bool = True, + 184 ) -> str: + 185 """Create a flow job and return its job id.""" + 186 args = args or {} + 187 params = {"scheduled_in_secs": scheduled_in_secs} if scheduled_in_secs else {} + 188 if not do_not_track_in_parent: + 189 if os.environ.get("WM_JOB_ID"): + 190 params["parent_job"] = os.environ.get("WM_JOB_ID") + 191 if os.environ.get("WM_ROOT_FLOW_JOB_ID"): + 192 params["root_job"] = os.environ.get("WM_ROOT_FLOW_JOB_ID") + 193 if path: + 194 endpoint = f"/w/{self.workspace}/jobs/run/f/{path}" + 195 else: + 196 raise Exception("path must be provided") + 197 return self.post(endpoint, json=args, params=params).text + 198 + 199 def run_script( + 200 self, + 201 path: str = None, + 202 hash_: str = None, + 203 args: dict = None, + 204 timeout: dt.timedelta | int | float | None = None, + 205 verbose: bool = False, + 206 cleanup: bool = True, + 207 assert_result_is_not_none: bool = False, + 208 ) -> Any: + 209 """Run script synchronously and return its result. + 210 + 211 .. deprecated:: Use run_script_by_path or run_script_by_hash instead. + 212 """ + 213 logging.warning( + 214 "run_script is deprecated. Use run_script_by_path or run_script_by_hash instead.", + 215 ) + 216 assert not (path and hash_), "path and hash_ are mutually exclusive" + 217 return self._run_script_internal( + 218 path=path, hash_=hash_, args=args, timeout=timeout, verbose=verbose, + 219 cleanup=cleanup, assert_result_is_not_none=assert_result_is_not_none + 220 ) + 221 + 222 def _run_script_internal( + 223 self, + 224 path: str = None, + 225 hash_: str = None, + 226 args: dict = None, + 227 timeout: dt.timedelta | int | float | None = None, + 228 verbose: bool = False, + 229 cleanup: bool = True, + 230 assert_result_is_not_none: bool = False, + 231 ) -> Any: + 232 """Internal helper for running scripts synchronously.""" + 233 args = args or {} + 234 + 235 if verbose: + 236 if path: + 237 logger.info(f"running `{path}` synchronously with {args = }") + 238 elif hash_: + 239 logger.info(f"running script with hash `{hash_}` synchronously with {args = }") + 240 + 241 if isinstance(timeout, dt.timedelta): + 242 timeout = timeout.total_seconds() + 243 + 244 job_id = self._run_script_async_internal(path=path, hash_=hash_, args=args) + 245 return self.wait_job( + 246 job_id, timeout, verbose, cleanup, assert_result_is_not_none + 247 ) + 248 + 249 def run_script_by_path( + 250 self, + 251 path: str, + 252 args: dict = None, + 253 timeout: dt.timedelta | int | float | None = None, + 254 verbose: bool = False, + 255 cleanup: bool = True, + 256 assert_result_is_not_none: bool = False, + 257 ) -> Any: + 258 """Run script by path synchronously and return its result.""" + 259 return self._run_script_internal( + 260 path=path, args=args, timeout=timeout, verbose=verbose, + 261 cleanup=cleanup, assert_result_is_not_none=assert_result_is_not_none + 262 ) + 263 + 264 def run_script_by_hash( + 265 self, + 266 hash_: str, + 267 args: dict = None, + 268 timeout: dt.timedelta | int | float | None = None, + 269 verbose: bool = False, + 270 cleanup: bool = True, + 271 assert_result_is_not_none: bool = False, + 272 ) -> Any: + 273 """Run script by hash synchronously and return its result.""" + 274 return self._run_script_internal( + 275 hash_=hash_, args=args, timeout=timeout, verbose=verbose, + 276 cleanup=cleanup, assert_result_is_not_none=assert_result_is_not_none + 277 ) + 278 + 279 def wait_job( + 280 self, + 281 job_id, + 282 timeout: dt.timedelta | int | float | None = None, + 283 verbose: bool = False, + 284 cleanup: bool = True, + 285 assert_result_is_not_none: bool = False, + 286 ): + 287 def cancel_job(): + 288 logger.warning(f"cancelling job: {job_id}") + 289 self.post( + 290 f"/w/{self.workspace}/jobs_u/queue/cancel/{job_id}", + 291 json={"reason": "parent script cancelled"}, + 292 ).raise_for_status() + 293 + 294 if cleanup: + 295 atexit.register(cancel_job) + 296 + 297 start_time = time.time() + 298 + 299 if isinstance(timeout, dt.timedelta): + 300 timeout = timeout.total_seconds() + 301 + 302 while True: + 303 result_res = self.get( + 304 f"/w/{self.workspace}/jobs_u/completed/get_result_maybe/{job_id}", True + 305 ).json() + 306 + 307 started = result_res["started"] + 308 completed = result_res["completed"] + 309 success = result_res["success"] + 310 + 311 if not started and verbose: + 312 logger.info(f"job {job_id} has not started yet") + 313 + 314 if cleanup and completed: + 315 atexit.unregister(cancel_job) + 316 + 317 if completed: + 318 result = result_res["result"] + 319 if success: + 320 if result is None and assert_result_is_not_none: + 321 raise Exception("Result was none") + 322 return result + 323 else: + 324 error = result["error"] + 325 raise Exception(f"Job {job_id} was not successful: {str(error)}") + 326 + 327 if timeout and ((time.time() - start_time) > timeout): + 328 msg = "reached timeout" + 329 logger.warning(msg) + 330 self.post( + 331 f"/w/{self.workspace}/jobs_u/queue/cancel/{job_id}", + 332 json={"reason": msg}, + 333 ) + 334 raise TimeoutError(msg) + 335 if verbose: + 336 logger.info(f"sleeping 0.5 seconds for {job_id = }") + 337 + 338 time.sleep(0.5) + 339 + 340 def cancel_running(self) -> dict: + 341 """Cancel currently running executions of the same script.""" + 342 logger.info("canceling running executions of this script") + 343 + 344 jobs = self.get( + 345 f"/w/{self.workspace}/jobs/list", + 346 params={ + 347 "running": "true", + 348 "script_path_exact": self.path, + 349 }, + 350 ).json() + 351 + 352 current_job_id = os.environ.get("WM_JOB_ID") + 353 + 354 logger.debug(f"{current_job_id = }") + 355 + 356 job_ids = [j["id"] for j in jobs if j["id"] != current_job_id] + 357 + 358 if job_ids: + 359 logger.info(f"cancelling the following job ids: {job_ids}") + 360 else: + 361 logger.info("no previous executions to cancel") + 362 + 363 result = {} + 364 + 365 for id_ in job_ids: + 366 result[id_] = self.post( + 367 f"/w/{self.workspace}/jobs_u/queue/cancel/{id_}", + 368 json={"reason": "killed by `cancel_running` method"}, + 369 ) + 370 + 371 return result + 372 + 373 def get_job(self, job_id: str) -> dict: + 374 return self.get(f"/w/{self.workspace}/jobs_u/get/{job_id}").json() + 375 + 376 def get_root_job_id(self, job_id: str | None = None) -> dict: + 377 job_id = job_id or os.environ.get("WM_JOB_ID") + 378 return self.get(f"/w/{self.workspace}/jobs_u/get_root_job_id/{job_id}").json() + 379 + 380 def get_id_token(self, audience: str) -> str: + 381 return self.post(f"/w/{self.workspace}/oidc/token/{audience}").text + 382 + 383 def get_job_status(self, job_id: str) -> JobStatus: + 384 job = self.get_job(job_id) + 385 job_type = job.get("type", "") + 386 assert job_type, f"{job} is not a valid job" + 387 if job_type.lower() == "completedjob": + 388 return "COMPLETED" + 389 if job.get("running"): + 390 return "RUNNING" + 391 return "WAITING" + 392 + 393 def get_result( + 394 self, + 395 job_id: str, + 396 assert_result_is_not_none: bool = True, + 397 ) -> Any: + 398 result = self.get(f"/w/{self.workspace}/jobs_u/completed/get_result/{job_id}") + 399 result_text = result.text + 400 if assert_result_is_not_none and result_text is None: + 401 raise Exception(f"result is None for {job_id = }") + 402 try: + 403 return result.json() + 404 except JSONDecodeError: + 405 return result_text + 406 + 407 def get_variable(self, path: str) -> str: + 408 path = parse_variable_syntax(path) or path + 409 if self.mocked_api is not None: + 410 variables = self.mocked_api["variables"] + 411 try: + 412 result = variables[path] + 413 return result + 414 except KeyError: + 415 logger.info( + 416 f"MockedAPI present, but variable not found at {path}, falling back to real API" + 417 ) + 418 + 419 """Get variable from Windmill""" + 420 return self.get(f"/w/{self.workspace}/variables/get_value/{path}").json() + 421 + 422 def set_variable(self, path: str, value: str, is_secret: bool = False) -> None: + 423 path = parse_variable_syntax(path) or path + 424 if self.mocked_api is not None: + 425 self.mocked_api["variables"][path] = value + 426 return + 427 + 428 """Set variable from Windmill""" + 429 # check if variable exists + 430 r = self.get( + 431 f"/w/{self.workspace}/variables/get/{path}", raise_for_status=False + 432 ) + 433 if r.status_code == 404: + 434 # create variable + 435 self.post( + 436 f"/w/{self.workspace}/variables/create", + 437 json={ + 438 "path": path, + 439 "value": value, + 440 "is_secret": is_secret, + 441 "description": "", + 442 }, + 443 ) + 444 else: + 445 # update variable + 446 self.post( + 447 f"/w/{self.workspace}/variables/update/{path}", + 448 json={"value": value}, + 449 ) + 450 + 451 def get_resource( + 452 self, + 453 path: str, + 454 none_if_undefined: bool = False, + 455 ) -> dict | None: + 456 path = parse_resource_syntax(path) or path + 457 if self.mocked_api is not None: + 458 resources = self.mocked_api["resources"] + 459 try: + 460 result = resources[path] + 461 return result + 462 except KeyError: + 463 # NOTE: should mocked_api respect `none_if_undefined`? + 464 if none_if_undefined: + 465 logger.info( + 466 f"resource not found at ${path}, but none_if_undefined is True, so returning None" + 467 ) + 468 return None + 469 logger.info( + 470 f"MockedAPI present, but resource not found at ${path}, falling back to real API" + 471 ) + 472 + 473 """Get resource from Windmill""" + 474 try: + 475 return self.get( + 476 f"/w/{self.workspace}/resources/get_value_interpolated/{path}" + 477 ).json() + 478 except Exception as e: + 479 if none_if_undefined: + 480 return None + 481 logger.error(e) + 482 raise e + 483 + 484 def set_resource( + 485 self, + 486 value: Any, + 487 path: str, + 488 resource_type: str, + 489 ): + 490 path = parse_resource_syntax(path) or path + 491 if self.mocked_api is not None: + 492 self.mocked_api["resources"][path] = value + 493 return + 494 + 495 # check if resource exists + 496 r = self.get( + 497 f"/w/{self.workspace}/resources/get/{path}", raise_for_status=False + 498 ) + 499 if r.status_code == 404: + 500 # create resource + 501 self.post( + 502 f"/w/{self.workspace}/resources/create", + 503 json={ + 504 "path": path, + 505 "value": value, + 506 "resource_type": resource_type, + 507 }, + 508 ) + 509 else: + 510 # update resource + 511 self.post( + 512 f"/w/{self.workspace}/resources/update_value/{path}", + 513 json={"value": value}, + 514 ) + 515 + 516 def set_state(self, value: Any): + 517 self.set_resource(value, path=self.state_path, resource_type="state") + 518 + 519 def set_progress(self, value: int, job_id: Optional[str] = None): + 520 workspace = get_workspace() + 521 flow_id = os.environ.get("WM_FLOW_JOB_ID") + 522 job_id = job_id or os.environ.get("WM_JOB_ID") + 523 + 524 if job_id != None: + 525 job = self.get_job(job_id) + 526 flow_id = job.get("parent_job") + 527 + 528 self.post( + 529 f"/w/{workspace}/job_metrics/set_progress/{job_id}", + 530 json={ + 531 "percent": value, + 532 "flow_job_id": flow_id or None, + 533 }, + 534 ) + 535 + 536 def get_progress(self, job_id: Optional[str] = None) -> Any: + 537 workspace = get_workspace() + 538 job_id = job_id or os.environ.get("WM_JOB_ID") + 539 + 540 r = self.get( + 541 f"/w/{workspace}/job_metrics/get_progress/{job_id}", + 542 ) + 543 if r.status_code == 404: + 544 print(f"Job {job_id} does not exist") + 545 return None + 546 else: + 547 return r.json() + 548 + 549 def set_flow_user_state(self, key: str, value: Any) -> None: + 550 """Set the user state of a flow at a given key""" + 551 flow_id = self.get_root_job_id() + 552 r = self.post( + 553 f"/w/{self.workspace}/jobs/flow/user_states/{flow_id}/{key}", + 554 json=value, + 555 raise_for_status=False, + 556 ) + 557 if r.status_code == 404: + 558 print(f"Job {flow_id} does not exist or is not a flow") + 559 + 560 def get_flow_user_state(self, key: str) -> Any: + 561 """Get the user state of a flow at a given key""" + 562 flow_id = self.get_root_job_id() + 563 r = self.get( + 564 f"/w/{self.workspace}/jobs/flow/user_states/{flow_id}/{key}", + 565 raise_for_status=False, + 566 ) + 567 if r.status_code == 404: + 568 print(f"Job {flow_id} does not exist or is not a flow") + 569 return None + 570 else: + 571 return r.json() + 572 + 573 @property + 574 def version(self): + 575 return self.get("version").text + 576 + 577 def get_duckdb_connection_settings( + 578 self, + 579 s3_resource_path: str = "", + 580 ) -> DuckDbConnectionSettings | None: + 581 """ + 582 Convenient helpers that takes an S3 resource as input and returns the settings necessary to + 583 initiate an S3 connection from DuckDB + 584 """ + 585 s3_resource_path = parse_resource_syntax(s3_resource_path) or s3_resource_path + 586 try: + 587 raw_obj = self.post( + 588 f"/w/{self.workspace}/job_helpers/v2/duckdb_connection_settings", + 589 json={} + 590 if s3_resource_path == "" + 591 else {"s3_resource_path": s3_resource_path}, + 592 ).json() + 593 return DuckDbConnectionSettings(raw_obj) + 594 except JSONDecodeError as e: + 595 raise Exception( + 596 "Could not generate DuckDB S3 connection settings from the provided resource" + 597 ) from e + 598 + 599 def get_polars_connection_settings( + 600 self, + 601 s3_resource_path: str = "", + 602 ) -> PolarsConnectionSettings: + 603 """ + 604 Convenient helpers that takes an S3 resource as input and returns the settings necessary to + 605 initiate an S3 connection from Polars + 606 """ + 607 s3_resource_path = parse_resource_syntax(s3_resource_path) or s3_resource_path + 608 try: + 609 raw_obj = self.post( + 610 f"/w/{self.workspace}/job_helpers/v2/polars_connection_settings", + 611 json={} + 612 if s3_resource_path == "" + 613 else {"s3_resource_path": s3_resource_path}, + 614 ).json() + 615 return PolarsConnectionSettings(raw_obj) + 616 except JSONDecodeError as e: + 617 raise Exception( + 618 "Could not generate Polars S3 connection settings from the provided resource" + 619 ) from e + 620 + 621 def get_boto3_connection_settings( + 622 self, + 623 s3_resource_path: str = "", + 624 ) -> Boto3ConnectionSettings: + 625 """ + 626 Convenient helpers that takes an S3 resource as input and returns the settings necessary to + 627 initiate an S3 connection using boto3 + 628 """ + 629 s3_resource_path = parse_resource_syntax(s3_resource_path) or s3_resource_path + 630 try: + 631 s3_resource = self.post( + 632 f"/w/{self.workspace}/job_helpers/v2/s3_resource_info", + 633 json={} + 634 if s3_resource_path == "" + 635 else {"s3_resource_path": s3_resource_path}, + 636 ).json() + 637 return self.__boto3_connection_settings(s3_resource) + 638 except JSONDecodeError as e: + 639 raise Exception( + 640 "Could not generate Boto3 S3 connection settings from the provided resource" + 641 ) from e + 642 + 643 def load_s3_file(self, s3object: S3Object | str, s3_resource_path: str | None) -> bytes: + 644 """ + 645 Load a file from the workspace s3 bucket and returns its content as bytes. + 646 + 647 '''python + 648 from wmill import S3Object + 649 + 650 s3_obj = S3Object(s3="/path/to/my_file.txt") + 651 my_obj_content = client.load_s3_file(s3_obj) + 652 file_content = my_obj_content.decode("utf-8") + 653 ''' + 654 """ + 655 s3object = parse_s3_object(s3object) + 656 with self.load_s3_file_reader(s3object, s3_resource_path) as file_reader: + 657 return file_reader.read() + 658 + 659 def load_s3_file_reader( + 660 self, s3object: S3Object | str, s3_resource_path: str | None + 661 ) -> BufferedReader: + 662 """ + 663 Load a file from the workspace s3 bucket and returns the bytes stream. + 664 + 665 '''python + 666 from wmill import S3Object + 667 + 668 s3_obj = S3Object(s3="/path/to/my_file.txt") + 669 with wmill.load_s3_file_reader(s3object, s3_resource_path) as file_reader: + 670 print(file_reader.read()) + 671 ''' + 672 """ + 673 s3object = parse_s3_object(s3object) + 674 reader = S3BufferedReader( + 675 f"{self.workspace}", + 676 self.client, + 677 s3object["s3"], + 678 s3_resource_path, + 679 s3object["storage"] if "storage" in s3object else None, + 680 ) + 681 return reader + 682 + 683 def write_s3_file( + 684 self, + 685 s3object: S3Object | str | None, + 686 file_content: BufferedReader | bytes, + 687 s3_resource_path: str | None, + 688 content_type: str | None = None, + 689 content_disposition: str | None = None, + 690 ) -> S3Object: + 691 """ + 692 Write a file to the workspace S3 bucket + 693 + 694 '''python + 695 from wmill import S3Object + 696 + 697 s3_obj = S3Object(s3="/path/to/my_file.txt") + 698 + 699 # for an in memory bytes array: + 700 file_content = b'Hello Windmill!' + 701 client.write_s3_file(s3_obj, file_content) + 702 + 703 # for a file: + 704 with open("my_file.txt", "rb") as my_file: + 705 client.write_s3_file(s3_obj, my_file) + 706 ''' + 707 """ + 708 s3object = parse_s3_object(s3object) + 709 # httpx accepts either bytes or "a bytes generator" as content. If it's a BufferedReader, we need to convert it to a generator + 710 if isinstance(file_content, BufferedReader): + 711 content_payload = bytes_generator(file_content) + 712 elif isinstance(file_content, bytes): + 713 content_payload = file_content + 714 else: + 715 raise Exception("Type of file_content not supported") + 716 + 717 query_params = {} + 718 if s3object is not None and s3object["s3"] != "": + 719 query_params["file_key"] = s3object["s3"] + 720 if s3_resource_path is not None and s3_resource_path != "": + 721 query_params["s3_resource_path"] = s3_resource_path + 722 if ( + 723 s3object is not None + 724 and "storage" in s3object + 725 and s3object["storage"] is not None + 726 ): + 727 query_params["storage"] = s3object["storage"] + 728 if content_type is not None: + 729 query_params["content_type"] = content_type + 730 if content_disposition is not None: + 731 query_params["content_disposition"] = content_disposition + 732 + 733 try: + 734 # need a vanilla client b/c content-type is not application/json here + 735 response = httpx.post( + 736 f"{self.base_url}/w/{self.workspace}/job_helpers/upload_s3_file", + 737 headers={ + 738 "Authorization": f"Bearer {self.token}", + 739 "Content-Type": "application/octet-stream", + 740 }, + 741 params=query_params, + 742 content=content_payload, + 743 verify=self.verify, + 744 timeout=None, + 745 ).json() + 746 except Exception as e: + 747 raise Exception("Could not write file to S3") from e + 748 return S3Object(s3=response["file_key"]) + 749 + 750 def sign_s3_objects(self, s3_objects: list[S3Object | str]) -> list[S3Object]: + 751 return self.post( + 752 f"/w/{self.workspace}/apps/sign_s3_objects", json={"s3_objects": list(map(parse_s3_object, s3_objects))} + 753 ).json() + 754 + 755 def sign_s3_object(self, s3_object: S3Object | str) -> S3Object: + 756 return self.post( + 757 f"/w/{self.workspace}/apps/sign_s3_objects", + 758 json={"s3_objects": [s3_object]}, + 759 ).json()[0] + 760 + 761 def __boto3_connection_settings(self, s3_resource) -> Boto3ConnectionSettings: + 762 endpoint_url_prefix = "https://" if s3_resource["useSSL"] else "http://" + 763 return Boto3ConnectionSettings( + 764 { + 765 "endpoint_url": "{}{}".format( + 766 endpoint_url_prefix, s3_resource["endPoint"] + 767 ), + 768 "region_name": s3_resource["region"], + 769 "use_ssl": s3_resource["useSSL"], + 770 "aws_access_key_id": s3_resource["accessKey"], + 771 "aws_secret_access_key": s3_resource["secretKey"], + 772 # no need for path_style here as boto3 is clever enough to determine which one to use + 773 } + 774 ) + 775 + 776 def whoami(self) -> dict: + 777 return self.get("/users/whoami").json() + 778 + 779 @property + 780 def user(self) -> dict: + 781 return self.whoami() + 782 + 783 @property + 784 def state_path(self) -> str: + 785 state_path = os.environ.get( + 786 "WM_STATE_PATH_NEW", os.environ.get("WM_STATE_PATH") + 787 ) + 788 if state_path is None: + 789 raise Exception("State path not found") + 790 return state_path + 791 + 792 @property + 793 def state(self) -> Any: + 794 return self.get_resource(path=self.state_path, none_if_undefined=True) + 795 + 796 @state.setter + 797 def state(self, value: Any) -> None: + 798 self.set_state(value) + 799 + 800 @staticmethod + 801 def set_shared_state_pickle(value: Any, path: str = "state.pickle") -> None: + 802 """ + 803 Set the state in the shared folder using pickle + 804 """ + 805 import pickle + 806 + 807 with open(f"/shared/{path}", "wb") as handle: + 808 pickle.dump(value, handle, protocol=pickle.HIGHEST_PROTOCOL) + 809 + 810 @staticmethod + 811 def get_shared_state_pickle(path: str = "state.pickle") -> Any: + 812 """ + 813 Get the state in the shared folder using pickle + 814 """ + 815 import pickle + 816 + 817 with open(f"/shared/{path}", "rb") as handle: + 818 return pickle.load(handle) + 819 + 820 @staticmethod + 821 def set_shared_state(value: Any, path: str = "state.json") -> None: + 822 """ + 823 Set the state in the shared folder using pickle + 824 """ + 825 import json + 826 + 827 with open(f"/shared/{path}", "w", encoding="utf-8") as f: + 828 json.dump(value, f, ensure_ascii=False, indent=4) + 829 + 830 @staticmethod + 831 def get_shared_state(path: str = "state.json") -> None: + 832 """ + 833 Get the state in the shared folder using pickle + 834 """ + 835 import json + 836 + 837 with open(f"/shared/{path}", "r", encoding="utf-8") as f: + 838 return json.load(f) + 839 + 840 def get_resume_urls(self, approver: str = None) -> dict: + 841 nonce = random.randint(0, 1000000000) + 842 job_id = os.environ.get("WM_JOB_ID") or "NO_ID" + 843 return self.get( + 844 f"/w/{self.workspace}/jobs/resume_urls/{job_id}/{nonce}", + 845 params={"approver": approver}, + 846 ).json() + 847 + 848 def request_interactive_slack_approval( + 849 self, + 850 slack_resource_path: str, + 851 channel_id: str, + 852 message: str = None, + 853 approver: str = None, + 854 default_args_json: dict = None, + 855 dynamic_enums_json: dict = None, + 856 ) -> None: + 857 """ + 858 Sends an interactive approval request via Slack, allowing optional customization of the message, approver, and form fields. + 859 + 860 **[Enterprise Edition Only]** To include form fields in the Slack approval request, use the "Advanced -> Suspend -> Form" functionality. + 861 Learn more at: https://www.windmill.dev/docs/flows/flow_approval#form + 862 + 863 :param slack_resource_path: The path to the Slack resource in Windmill. + 864 :type slack_resource_path: str + 865 :param channel_id: The Slack channel ID where the approval request will be sent. + 866 :type channel_id: str + 867 :param message: Optional custom message to include in the Slack approval request. + 868 :type message: str, optional + 869 :param approver: Optional user ID or name of the approver for the request. + 870 :type approver: str, optional + 871 :param default_args_json: Optional dictionary defining or overriding the default arguments for form fields. + 872 :type default_args_json: dict, optional + 873 :param dynamic_enums_json: Optional dictionary overriding the enum default values of enum form fields. + 874 :type dynamic_enums_json: dict, optional + 875 + 876 :raises Exception: If the function is not called within a flow or flow preview. + 877 :raises Exception: If the required flow job or flow step environment variables are not set. + 878 + 879 :return: None + 880 + 881 **Usage Example:** + 882 >>> client.request_interactive_slack_approval( + 883 ... slack_resource_path="/u/alex/my_slack_resource", + 884 ... channel_id="admins-slack-channel", + 885 ... message="Please approve this request", + 886 ... approver="approver123", + 887 ... default_args_json={"key1": "value1", "key2": 42}, + 888 ... dynamic_enums_json={"foo": ["choice1", "choice2"], "bar": ["optionA", "optionB"]}, + 889 ... ) + 890 + 891 **Notes:** + 892 - This function must be executed within a Windmill flow or flow preview. + 893 - The function checks for required environment variables (`WM_FLOW_JOB_ID`, `WM_FLOW_STEP_ID`) to ensure it is run in the appropriate context. + 894 """ + 895 workspace = self.workspace + 896 flow_job_id = os.environ.get("WM_FLOW_JOB_ID") + 897 + 898 if not flow_job_id: + 899 raise Exception( + 900 "You can't use 'request_interactive_slack_approval' function in a standalone script or flow step preview. Please use it in a flow or a flow preview." + 901 ) + 902 + 903 # Only include non-empty parameters + 904 params = {} + 905 if message: + 906 params["message"] = message + 907 if approver: + 908 params["approver"] = approver + 909 if slack_resource_path: + 910 params["slack_resource_path"] = slack_resource_path + 911 if channel_id: + 912 params["channel_id"] = channel_id + 913 if os.environ.get("WM_FLOW_STEP_ID"): + 914 params["flow_step_id"] = os.environ.get("WM_FLOW_STEP_ID") + 915 if default_args_json: + 916 params["default_args_json"] = json.dumps(default_args_json) + 917 if dynamic_enums_json: + 918 params["dynamic_enums_json"] = json.dumps(dynamic_enums_json) + 919 + 920 self.get( + 921 f"/w/{workspace}/jobs/slack_approval/{os.environ.get('WM_JOB_ID', 'NO_JOB_ID')}", + 922 params=params, + 923 ) + 924 + 925 def username_to_email(self, username: str) -> str: + 926 """ + 927 Get email from workspace username + 928 This method is particularly useful for apps that require the email address of the viewer. + 929 Indeed, in the viewer context WM_USERNAME is set to the username of the viewer but WM_EMAIL is set to the email of the creator of the app. + 930 """ + 931 return self.get(f"/w/{self.workspace}/users/username_to_email/{username}").text + 932 + 933 def send_teams_message( + 934 self, + 935 conversation_id: str, + 936 text: str, + 937 success: bool = True, + 938 card_block: dict = None, + 939 ): + 940 """ + 941 Send a message to a Microsoft Teams conversation with conversation_id, where success is used to style the message + 942 """ + 943 return self.post( + 944 f"/teams/activities", + 945 json={ + 946 "conversation_id": conversation_id, + 947 "text": text, + 948 "success": success, + 949 "card_block": card_block, + 950 }, + 951 ) + 952 + 953 + 954def init_global_client(f): + 955 @functools.wraps(f) + 956 def wrapper(*args, **kwargs): + 957 global _client + 958 if _client is None: + 959 _client = Windmill() + 960 return f(*args, **kwargs) + 961 + 962 return wrapper + 963 + 964 + 965def deprecate(in_favor_of: str): + 966 def decorator(f): + 967 @functools.wraps(f) + 968 def wrapper(*args, **kwargs): + 969 warnings.warn( + 970 ( + 971 f"The '{f.__name__}' method is deprecated and may be removed in the future. " + 972 f"Consider {in_favor_of}" + 973 ), + 974 DeprecationWarning, + 975 ) + 976 return f(*args, **kwargs) + 977 + 978 return wrapper + 979 + 980 return decorator + 981 + 982 + 983@init_global_client + 984def get_workspace() -> str: + 985 return _client.workspace + 986 + 987 + 988@init_global_client + 989def get_root_job_id(job_id: str | None = None) -> str: + 990 return _client.get_root_job_id(job_id) + 991 + 992 + 993@init_global_client + 994@deprecate("Windmill().version") + 995def get_version() -> str: + 996 return _client.version + 997 + 998 + 999@init_global_client +1000def run_script_async( +1001 hash_or_path: str, +1002 args: Dict[str, Any] = None, +1003 scheduled_in_secs: int = None, +1004) -> str: +1005 is_path = "/" in hash_or_path +1006 hash_ = None if is_path else hash_or_path +1007 path = hash_or_path if is_path else None +1008 return _client.run_script_async( +1009 hash_=hash_, +1010 path=path, +1011 args=args, +1012 scheduled_in_secs=scheduled_in_secs, +1013 ) +1014 +1015 +1016@init_global_client +1017def run_flow_async( +1018 path: str, +1019 args: Dict[str, Any] = None, +1020 scheduled_in_secs: int = None, +1021 # can only be set to false if this the job will be fully await and not concurrent with any other job +1022 # as otherwise the child flow and its own child will store their state in the parent job which will +1023 # lead to incorrectness and failures +1024 do_not_track_in_parent: bool = True, +1025) -> str: +1026 return _client.run_flow_async( +1027 path=path, +1028 args=args, +1029 scheduled_in_secs=scheduled_in_secs, +1030 do_not_track_in_parent=do_not_track_in_parent, +1031 ) +1032 +1033 +1034@init_global_client +1035def run_script_sync( +1036 hash: str, +1037 args: Dict[str, Any] = None, +1038 verbose: bool = False, +1039 assert_result_is_not_none: bool = True, +1040 cleanup: bool = True, +1041 timeout: dt.timedelta = None, +1042) -> Any: +1043 return _client.run_script( +1044 hash_=hash, +1045 args=args, +1046 verbose=verbose, +1047 assert_result_is_not_none=assert_result_is_not_none, +1048 cleanup=cleanup, +1049 timeout=timeout, +1050 ) +1051 +1052 +1053@init_global_client +1054def run_script_by_path_async( +1055 path: str, +1056 args: Dict[str, Any] = None, +1057 scheduled_in_secs: Union[None, int] = None, +1058) -> str: +1059 return _client.run_script_by_path_async( +1060 path=path, +1061 args=args, +1062 scheduled_in_secs=scheduled_in_secs, +1063 ) +1064 +1065 +1066@init_global_client +1067def run_script_by_hash_async( +1068 hash_: str, +1069 args: Dict[str, Any] = None, +1070 scheduled_in_secs: Union[None, int] = None, +1071) -> str: +1072 return _client.run_script_by_hash_async( +1073 hash_=hash_, +1074 args=args, +1075 scheduled_in_secs=scheduled_in_secs, +1076 ) +1077 +1078 +1079@init_global_client +1080def run_script_by_path_sync( +1081 path: str, +1082 args: Dict[str, Any] = None, +1083 verbose: bool = False, +1084 assert_result_is_not_none: bool = True, +1085 cleanup: bool = True, +1086 timeout: dt.timedelta = None, +1087) -> Any: +1088 return _client.run_script( +1089 path=path, +1090 args=args, +1091 verbose=verbose, +1092 assert_result_is_not_none=assert_result_is_not_none, +1093 cleanup=cleanup, +1094 timeout=timeout, +1095 ) +1096 +1097 +1098@init_global_client +1099def get_id_token(audience: str) -> str: +1100 """ +1101 Get a JWT token for the given audience for OIDC purposes to login into third parties like AWS, Vault, GCP, etc. +1102 """ +1103 return _client.get_id_token(audience) +1104 +1105 +1106@init_global_client +1107def get_job_status(job_id: str) -> JobStatus: +1108 return _client.get_job_status(job_id) +1109 +1110 +1111@init_global_client +1112def get_result(job_id: str, assert_result_is_not_none=True) -> Dict[str, Any]: +1113 return _client.get_result( +1114 job_id=job_id, assert_result_is_not_none=assert_result_is_not_none +1115 ) +1116 +1117 +1118@init_global_client +1119def duckdb_connection_settings(s3_resource_path: str = "") -> DuckDbConnectionSettings: +1120 """ +1121 Convenient helpers that takes an S3 resource as input and returns the settings necessary to +1122 initiate an S3 connection from DuckDB +1123 """ +1124 return _client.get_duckdb_connection_settings(s3_resource_path) +1125 +1126 +1127@init_global_client +1128def polars_connection_settings(s3_resource_path: str = "") -> PolarsConnectionSettings: +1129 """ +1130 Convenient helpers that takes an S3 resource as input and returns the settings necessary to +1131 initiate an S3 connection from Polars +1132 """ +1133 return _client.get_polars_connection_settings(s3_resource_path) +1134 +1135 +1136@init_global_client +1137def boto3_connection_settings(s3_resource_path: str = "") -> Boto3ConnectionSettings: +1138 """ +1139 Convenient helpers that takes an S3 resource as input and returns the settings necessary to +1140 initiate an S3 connection using boto3 +1141 """ +1142 return _client.get_boto3_connection_settings(s3_resource_path) +1143 +1144 +1145@init_global_client +1146def load_s3_file(s3object: S3Object | str, s3_resource_path: str | None = None) -> bytes: +1147 """ +1148 Load the entire content of a file stored in S3 as bytes +1149 """ +1150 return _client.load_s3_file( +1151 s3object, s3_resource_path if s3_resource_path != "" else None +1152 ) +1153 +1154 +1155@init_global_client +1156def load_s3_file_reader( +1157 s3object: S3Object | str, s3_resource_path: str | None = None +1158) -> BufferedReader: +1159 """ +1160 Load the content of a file stored in S3 +1161 """ +1162 return _client.load_s3_file_reader( +1163 s3object, s3_resource_path if s3_resource_path != "" else None +1164 ) +1165 +1166 +1167@init_global_client +1168def write_s3_file( +1169 s3object: S3Object | str | None, +1170 file_content: BufferedReader | bytes, +1171 s3_resource_path: str | None = None, +1172 content_type: str | None = None, +1173 content_disposition: str | None = None, +1174) -> S3Object: +1175 """ +1176 Upload a file to S3 +1177 +1178 Content type will be automatically guessed from path extension if left empty +1179 +1180 See MDN for content_disposition: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition +1181 and content_type: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type +1182 +1183 """ +1184 return _client.write_s3_file( +1185 s3object, +1186 file_content, +1187 s3_resource_path if s3_resource_path != "" else None, +1188 content_type, +1189 content_disposition, +1190 ) +1191 +1192 +1193@init_global_client +1194def sign_s3_objects(s3_objects: list[S3Object | str]) -> list[S3Object]: +1195 """ +1196 Sign S3 objects to be used by anonymous users in public apps +1197 Returns a list of signed s3 tokens +1198 """ +1199 return _client.sign_s3_objects(s3_objects) +1200 +1201 +1202@init_global_client +1203def sign_s3_object(s3_object: S3Object| str) -> S3Object: +1204 """ +1205 Sign S3 object to be used by anonymous users in public apps +1206 Returns a signed s3 object +1207 """ +1208 return _client.sign_s3_object(s3_object) +1209 +1210 +1211@init_global_client +1212def whoami() -> dict: +1213 """ +1214 Returns the current user +1215 """ +1216 return _client.user +1217 +1218 +1219@init_global_client +1220@deprecate("Windmill().state") +1221def get_state() -> Any: +1222 """ +1223 Get the state +1224 """ +1225 return _client.state +1226 +1227 +1228@init_global_client +1229def get_resource( +1230 path: str, +1231 none_if_undefined: bool = False, +1232) -> dict | None: +1233 """Get resource from Windmill""" +1234 return _client.get_resource(path, none_if_undefined) +1235 +1236 +1237@init_global_client +1238def set_resource(path: str, value: Any, resource_type: str = "any") -> None: +1239 """ +1240 Set the resource at a given path as a string, creating it if it does not exist +1241 """ +1242 return _client.set_resource(value=value, path=path, resource_type=resource_type) +1243 +1244 +1245@init_global_client +1246def set_state(value: Any) -> None: +1247 """ +1248 Set the state +1249 """ +1250 return _client.set_state(value) +1251 +1252 +1253@init_global_client +1254def set_progress(value: int, job_id: Optional[str] = None) -> None: +1255 """ +1256 Set the progress +1257 """ +1258 return _client.set_progress(value, job_id) +1259 +1260 +1261@init_global_client +1262def get_progress(job_id: Optional[str] = None) -> Any: +1263 """ +1264 Get the progress +1265 """ +1266 return _client.get_progress(job_id) +1267 +1268 +1269def set_shared_state_pickle(value: Any, path="state.pickle") -> None: +1270 """ +1271 Set the state in the shared folder using pickle +1272 """ +1273 return Windmill.set_shared_state_pickle(value=value, path=path) +1274 +1275 +1276@deprecate("Windmill.get_shared_state_pickle(...)") +1277def get_shared_state_pickle(path="state.pickle") -> Any: +1278 """ +1279 Get the state in the shared folder using pickle +1280 """ +1281 return Windmill.get_shared_state_pickle(path=path) +1282 +1283 +1284def set_shared_state(value: Any, path="state.json") -> None: +1285 """ +1286 Set the state in the shared folder using pickle +1287 """ +1288 return Windmill.set_shared_state(value=value, path=path) +1289 +1290 +1291def get_shared_state(path="state.json") -> None: +1292 """ +1293 Get the state in the shared folder using pickle +1294 """ +1295 return Windmill.get_shared_state(path=path) +1296 +1297 +1298@init_global_client +1299def get_variable(path: str) -> str: +1300 """ +1301 Returns the variable at a given path as a string +1302 """ +1303 return _client.get_variable(path) +1304 +1305 +1306@init_global_client +1307def set_variable(path: str, value: str, is_secret: bool = False) -> None: +1308 """ +1309 Set the variable at a given path as a string, creating it if it does not exist +1310 """ +1311 return _client.set_variable(path, value, is_secret) +1312 +1313 +1314@init_global_client +1315def get_flow_user_state(key: str) -> Any: +1316 """ +1317 Get the user state of a flow at a given key +1318 """ +1319 return _client.get_flow_user_state(key) +1320 +1321 +1322@init_global_client +1323def set_flow_user_state(key: str, value: Any) -> None: +1324 """ +1325 Set the user state of a flow at a given key +1326 """ +1327 return _client.set_flow_user_state(key, value) +1328 +1329 +1330@init_global_client +1331def get_state_path() -> str: +1332 return _client.state_path +1333 +1334 +1335@init_global_client +1336def get_resume_urls(approver: str = None) -> dict: +1337 return _client.get_resume_urls(approver) +1338 +1339 +1340@init_global_client +1341def request_interactive_slack_approval( +1342 slack_resource_path: str, +1343 channel_id: str, +1344 message: str = None, +1345 approver: str = None, +1346 default_args_json: dict = None, +1347 dynamic_enums_json: dict = None, +1348) -> None: +1349 return _client.request_interactive_slack_approval( +1350 slack_resource_path=slack_resource_path, +1351 channel_id=channel_id, +1352 message=message, +1353 approver=approver, +1354 default_args_json=default_args_json, +1355 dynamic_enums_json=dynamic_enums_json, +1356 ) +1357 +1358 +1359@init_global_client +1360def send_teams_message( +1361 conversation_id: str, text: str, success: bool, card_block: dict = None +1362): +1363 return _client.send_teams_message(conversation_id, text, success, card_block) +1364 +1365 +1366@init_global_client +1367def cancel_running() -> dict: +1368 """Cancel currently running executions of the same script.""" +1369 return _client.cancel_running() +1370 +1371 +1372@init_global_client +1373def run_script( +1374 path: str = None, +1375 hash_: str = None, +1376 args: dict = None, +1377 timeout: dt.timedelta | int | float = None, +1378 verbose: bool = False, +1379 cleanup: bool = True, +1380 assert_result_is_not_none: bool = True, +1381) -> Any: +1382 """Run script synchronously and return its result. +1383 +1384 .. deprecated:: Use run_script_by_path or run_script_by_hash instead. +1385 """ +1386 return _client.run_script( +1387 path=path, +1388 hash_=hash_, +1389 args=args, +1390 verbose=verbose, +1391 assert_result_is_not_none=assert_result_is_not_none, +1392 cleanup=cleanup, +1393 timeout=timeout, +1394 ) +1395 +1396 +1397@init_global_client +1398def run_script_by_path( +1399 path: str, +1400 args: dict = None, +1401 timeout: dt.timedelta | int | float = None, +1402 verbose: bool = False, +1403 cleanup: bool = True, +1404 assert_result_is_not_none: bool = True, +1405) -> Any: +1406 """Run script by path synchronously and return its result.""" +1407 return _client.run_script_by_path( +1408 path=path, +1409 args=args, +1410 verbose=verbose, +1411 assert_result_is_not_none=assert_result_is_not_none, +1412 cleanup=cleanup, +1413 timeout=timeout, +1414 ) +1415 +1416 +1417@init_global_client +1418def run_script_by_hash( +1419 hash_: str, +1420 args: dict = None, +1421 timeout: dt.timedelta | int | float = None, +1422 verbose: bool = False, +1423 cleanup: bool = True, +1424 assert_result_is_not_none: bool = True, +1425) -> Any: +1426 """Run script by hash synchronously and return its result.""" +1427 return _client.run_script_by_hash( +1428 hash_=hash_, +1429 args=args, +1430 verbose=verbose, +1431 assert_result_is_not_none=assert_result_is_not_none, +1432 cleanup=cleanup, +1433 timeout=timeout, +1434 ) +1435 +1436 +1437@init_global_client +1438def username_to_email(username: str) -> str: +1439 """ +1440 Get email from workspace username +1441 This method is particularly useful for apps that require the email address of the viewer. +1442 Indeed, in the viewer context WM_USERNAME is set to the username of the viewer but WM_EMAIL is set to the email of the creator of the app. +1443 """ +1444 return _client.username_to_email(username) +1445 +1446 +1447def task(*args, **kwargs): +1448 from inspect import signature +1449 +1450 def f(func, tag: str | None = None): +1451 if ( +1452 os.environ.get("WM_JOB_ID") is None +1453 or os.environ.get("MAIN_OVERRIDE") == func.__name__ +1454 ): +1455 +1456 def inner(*args, **kwargs): +1457 return func(*args, **kwargs) +1458 +1459 return inner +1460 else: +1461 +1462 def inner(*args, **kwargs): +1463 global _client +1464 if _client is None: +1465 _client = Windmill() +1466 w_id = os.environ.get("WM_WORKSPACE") +1467 job_id = os.environ.get("WM_JOB_ID") +1468 f_name = func.__name__ +1469 json = kwargs +1470 params = list(signature(func).parameters) +1471 for i, arg in enumerate(args): +1472 if i < len(params): +1473 p = params[i] +1474 key = p +1475 if key not in kwargs: +1476 json[key] = arg +1477 +1478 params = {} +1479 if tag is not None: +1480 params["tag"] = tag +1481 w_as_code_response = _client.post( +1482 f"/w/{w_id}/jobs/run/workflow_as_code/{job_id}/{f_name}", +1483 json={"args": json}, +1484 params=params, +1485 ) +1486 job_id = w_as_code_response.text +1487 print(f"Executing task {func.__name__} on job {job_id}") +1488 job_result = _client.wait_job(job_id) +1489 print(f"Task {func.__name__} ({job_id}) completed") +1490 return job_result +1491 +1492 return inner +1493 +1494 if len(args) == 1 and len(kwargs) == 0 and callable(args[0]): +1495 return f(args[0], None) +1496 else: +1497 return lambda x: f(x, kwargs.get("tag")) +1498 +1499def parse_resource_syntax(s: str) -> Optional[str]: +1500 """Parse resource syntax from string.""" +1501 if s is None: +1502 return None +1503 if s.startswith("$res:"): +1504 return s[5:] +1505 if s.startswith("res://"): +1506 return s[6:] +1507 return None +1508 +1509def parse_s3_object(s3_object: S3Object | str) -> S3Object: +1510 """Parse S3 object from string or S3Object format.""" +1511 if isinstance(s3_object, str): +1512 match = re.match(r'^s3://([^/]*)/(.*)$', s3_object) +1513 if match: +1514 return S3Object(s3=match.group(2) or "", storage=match.group(1) or None) +1515 return S3Object(s3="") +1516 else: +1517 return s3_object +1518 +1519 +1520 +1521def parse_variable_syntax(s: str) -> Optional[str]: +1522 """Parse variable syntax from string.""" +1523 if s.startswith("var://"): +1524 return s[6:] +1525 return None +1526 +1527 +1528def append_to_result_stream(text: str) -> None: +1529 """Append a text to the result stream. +1530 +1531 Args: +1532 text: text to append to the result stream +1533 """ +1534 print("WM_STREAM: {}".format(text.replace(chr(10), '\\n'))) +1535 +1536def stream_result(stream) -> None: +1537 """Stream to the result stream. +1538 +1539 Args: +1540 stream: stream to stream to the result stream +1541 """ +1542 for text in stream: +1543 append_to_result_stream(text) +
35class Windmill: + 36 def __init__(self, base_url=None, token=None, workspace=None, verify=True): + 37 base = ( + 38 base_url + 39 or os.environ.get("BASE_INTERNAL_URL") + 40 or os.environ.get("WM_BASE_URL") + 41 ) + 42 + 43 self.base_url = f"{base}/api" + 44 self.token = token or os.environ.get("WM_TOKEN") + 45 self.headers = { + 46 "Content-Type": "application/json", + 47 "Authorization": f"Bearer {self.token}", + 48 } + 49 self.verify = verify + 50 self.client = self.get_client() + 51 self.workspace = workspace or os.environ.get("WM_WORKSPACE") + 52 self.path = os.environ.get("WM_JOB_PATH") + 53 + 54 self.mocked_api = self.get_mocked_api() + 55 + 56 assert self.workspace, ( + 57 f"workspace required as an argument or as WM_WORKSPACE environment variable" + 58 ) + 59 + 60 def get_mocked_api(self) -> Optional[dict]: + 61 mocked_path = os.environ.get("WM_MOCKED_API_FILE") + 62 if not mocked_path: + 63 return None + 64 logger.info("Using mocked API from %s", mocked_path) + 65 mocked_api = {"variables": {}, "resources": {}} + 66 try: + 67 with open(mocked_path, "r") as f: + 68 incoming_mocked_api = json.load(f) + 69 mocked_api = {**mocked_api, **incoming_mocked_api} + 70 except Exception as e: + 71 logger.warning( + 72 "Error parsing mocked API file at path %s Using empty mocked API.", + 73 mocked_path, + 74 ) + 75 logger.debug(e) + 76 return mocked_api + 77 + 78 def get_client(self) -> httpx.Client: + 79 return httpx.Client( + 80 base_url=self.base_url, + 81 headers=self.headers, + 82 verify=self.verify, + 83 ) + 84 + 85 def get(self, endpoint, raise_for_status=True, **kwargs) -> httpx.Response: + 86 endpoint = endpoint.lstrip("/") + 87 resp = self.client.get(f"/{endpoint}", **kwargs) + 88 if raise_for_status: + 89 try: + 90 resp.raise_for_status() + 91 except httpx.HTTPStatusError as err: + 92 error = f"{err.request.url}: {err.response.status_code}, {err.response.text}" + 93 logger.error(error) + 94 raise Exception(error) + 95 return resp + 96 + 97 def post(self, endpoint, raise_for_status=True, **kwargs) -> httpx.Response: + 98 endpoint = endpoint.lstrip("/") + 99 resp = self.client.post(f"/{endpoint}", **kwargs) +100 if raise_for_status: +101 try: +102 resp.raise_for_status() +103 except httpx.HTTPStatusError as err: +104 error = f"{err.request.url}: {err.response.status_code}, {err.response.text}" +105 logger.error(error) +106 raise Exception(error) +107 return resp +108 +109 def create_token(self, duration=dt.timedelta(days=1)) -> str: +110 endpoint = "/users/tokens/create" +111 payload = { +112 "label": f"refresh {time.time()}", +113 "expiration": (dt.datetime.now() + duration).strftime("%Y-%m-%dT%H:%M:%SZ"), +114 } +115 return self.post(endpoint, json=payload).text +116 +117 def run_script_async( +118 self, +119 path: str = None, +120 hash_: str = None, +121 args: dict = None, +122 scheduled_in_secs: int = None, +123 ) -> str: +124 """Create a script job and return its job id. +125 +126 .. deprecated:: Use run_script_by_path_async or run_script_by_hash_async instead. +127 """ +128 logging.warning( +129 "run_script_async is deprecated. Use run_script_by_path_async or run_script_by_hash_async instead.", +130 ) +131 assert not (path and hash_), "path and hash_ are mutually exclusive" +132 return self._run_script_async_internal(path=path, hash_=hash_, args=args, scheduled_in_secs=scheduled_in_secs) +133 +134 def _run_script_async_internal( +135 self, +136 path: str = None, +137 hash_: str = None, +138 args: dict = None, +139 scheduled_in_secs: int = None, +140 ) -> str: +141 """Internal helper for running scripts asynchronously.""" +142 args = args or {} +143 params = {"scheduled_in_secs": scheduled_in_secs} if scheduled_in_secs else {} +144 if os.environ.get("WM_JOB_ID"): +145 params["parent_job"] = os.environ.get("WM_JOB_ID") +146 if os.environ.get("WM_ROOT_FLOW_JOB_ID"): +147 params["root_job"] = os.environ.get("WM_ROOT_FLOW_JOB_ID") +148 +149 if path: +150 endpoint = f"/w/{self.workspace}/jobs/run/p/{path}" +151 elif hash_: +152 endpoint = f"/w/{self.workspace}/jobs/run/h/{hash_}" +153 else: +154 raise Exception("path or hash_ must be provided") +155 +156 return self.post(endpoint, json=args, params=params).text +157 +158 def run_script_by_path_async( +159 self, +160 path: str, +161 args: dict = None, +162 scheduled_in_secs: int = None, +163 ) -> str: +164 """Create a script job by path and return its job id.""" +165 return self._run_script_async_internal(path=path, args=args, scheduled_in_secs=scheduled_in_secs) +166 +167 def run_script_by_hash_async( +168 self, +169 hash_: str, +170 args: dict = None, +171 scheduled_in_secs: int = None, +172 ) -> str: +173 """Create a script job by hash and return its job id.""" +174 return self._run_script_async_internal(hash_=hash_, args=args, scheduled_in_secs=scheduled_in_secs) +175 +176 def run_flow_async( +177 self, +178 path: str, +179 args: dict = None, +180 scheduled_in_secs: int = None, +181 # can only be set to false if this the job will be fully await and not concurrent with any other job +182 # as otherwise the child flow and its own child will store their state in the parent job which will +183 # lead to incorrectness and failures +184 do_not_track_in_parent: bool = True, +185 ) -> str: +186 """Create a flow job and return its job id.""" +187 args = args or {} +188 params = {"scheduled_in_secs": scheduled_in_secs} if scheduled_in_secs else {} +189 if not do_not_track_in_parent: +190 if os.environ.get("WM_JOB_ID"): +191 params["parent_job"] = os.environ.get("WM_JOB_ID") +192 if os.environ.get("WM_ROOT_FLOW_JOB_ID"): +193 params["root_job"] = os.environ.get("WM_ROOT_FLOW_JOB_ID") +194 if path: +195 endpoint = f"/w/{self.workspace}/jobs/run/f/{path}" +196 else: +197 raise Exception("path must be provided") +198 return self.post(endpoint, json=args, params=params).text +199 +200 def run_script( +201 self, +202 path: str = None, +203 hash_: str = None, +204 args: dict = None, +205 timeout: dt.timedelta | int | float | None = None, +206 verbose: bool = False, +207 cleanup: bool = True, +208 assert_result_is_not_none: bool = False, +209 ) -> Any: +210 """Run script synchronously and return its result. +211 +212 .. deprecated:: Use run_script_by_path or run_script_by_hash instead. +213 """ +214 logging.warning( +215 "run_script is deprecated. Use run_script_by_path or run_script_by_hash instead.", +216 ) +217 assert not (path and hash_), "path and hash_ are mutually exclusive" +218 return self._run_script_internal( +219 path=path, hash_=hash_, args=args, timeout=timeout, verbose=verbose, +220 cleanup=cleanup, assert_result_is_not_none=assert_result_is_not_none +221 ) +222 +223 def _run_script_internal( +224 self, +225 path: str = None, +226 hash_: str = None, +227 args: dict = None, +228 timeout: dt.timedelta | int | float | None = None, +229 verbose: bool = False, +230 cleanup: bool = True, +231 assert_result_is_not_none: bool = False, +232 ) -> Any: +233 """Internal helper for running scripts synchronously.""" +234 args = args or {} +235 +236 if verbose: +237 if path: +238 logger.info(f"running `{path}` synchronously with {args = }") +239 elif hash_: +240 logger.info(f"running script with hash `{hash_}` synchronously with {args = }") +241 +242 if isinstance(timeout, dt.timedelta): +243 timeout = timeout.total_seconds() +244 +245 job_id = self._run_script_async_internal(path=path, hash_=hash_, args=args) +246 return self.wait_job( +247 job_id, timeout, verbose, cleanup, assert_result_is_not_none +248 ) +249 +250 def run_script_by_path( +251 self, +252 path: str, +253 args: dict = None, +254 timeout: dt.timedelta | int | float | None = None, +255 verbose: bool = False, +256 cleanup: bool = True, +257 assert_result_is_not_none: bool = False, +258 ) -> Any: +259 """Run script by path synchronously and return its result.""" +260 return self._run_script_internal( +261 path=path, args=args, timeout=timeout, verbose=verbose, +262 cleanup=cleanup, assert_result_is_not_none=assert_result_is_not_none +263 ) +264 +265 def run_script_by_hash( +266 self, +267 hash_: str, +268 args: dict = None, +269 timeout: dt.timedelta | int | float | None = None, +270 verbose: bool = False, +271 cleanup: bool = True, +272 assert_result_is_not_none: bool = False, +273 ) -> Any: +274 """Run script by hash synchronously and return its result.""" +275 return self._run_script_internal( +276 hash_=hash_, args=args, timeout=timeout, verbose=verbose, +277 cleanup=cleanup, assert_result_is_not_none=assert_result_is_not_none +278 ) +279 +280 def wait_job( +281 self, +282 job_id, +283 timeout: dt.timedelta | int | float | None = None, +284 verbose: bool = False, +285 cleanup: bool = True, +286 assert_result_is_not_none: bool = False, +287 ): +288 def cancel_job(): +289 logger.warning(f"cancelling job: {job_id}") +290 self.post( +291 f"/w/{self.workspace}/jobs_u/queue/cancel/{job_id}", +292 json={"reason": "parent script cancelled"}, +293 ).raise_for_status() +294 +295 if cleanup: +296 atexit.register(cancel_job) +297 +298 start_time = time.time() +299 +300 if isinstance(timeout, dt.timedelta): +301 timeout = timeout.total_seconds() +302 +303 while True: +304 result_res = self.get( +305 f"/w/{self.workspace}/jobs_u/completed/get_result_maybe/{job_id}", True +306 ).json() +307 +308 started = result_res["started"] +309 completed = result_res["completed"] +310 success = result_res["success"] +311 +312 if not started and verbose: +313 logger.info(f"job {job_id} has not started yet") +314 +315 if cleanup and completed: +316 atexit.unregister(cancel_job) +317 +318 if completed: +319 result = result_res["result"] +320 if success: +321 if result is None and assert_result_is_not_none: +322 raise Exception("Result was none") +323 return result +324 else: +325 error = result["error"] +326 raise Exception(f"Job {job_id} was not successful: {str(error)}") +327 +328 if timeout and ((time.time() - start_time) > timeout): +329 msg = "reached timeout" +330 logger.warning(msg) +331 self.post( +332 f"/w/{self.workspace}/jobs_u/queue/cancel/{job_id}", +333 json={"reason": msg}, +334 ) +335 raise TimeoutError(msg) +336 if verbose: +337 logger.info(f"sleeping 0.5 seconds for {job_id = }") +338 +339 time.sleep(0.5) +340 +341 def cancel_running(self) -> dict: +342 """Cancel currently running executions of the same script.""" +343 logger.info("canceling running executions of this script") +344 +345 jobs = self.get( +346 f"/w/{self.workspace}/jobs/list", +347 params={ +348 "running": "true", +349 "script_path_exact": self.path, +350 }, +351 ).json() +352 +353 current_job_id = os.environ.get("WM_JOB_ID") +354 +355 logger.debug(f"{current_job_id = }") +356 +357 job_ids = [j["id"] for j in jobs if j["id"] != current_job_id] +358 +359 if job_ids: +360 logger.info(f"cancelling the following job ids: {job_ids}") +361 else: +362 logger.info("no previous executions to cancel") +363 +364 result = {} +365 +366 for id_ in job_ids: +367 result[id_] = self.post( +368 f"/w/{self.workspace}/jobs_u/queue/cancel/{id_}", +369 json={"reason": "killed by `cancel_running` method"}, +370 ) +371 +372 return result +373 +374 def get_job(self, job_id: str) -> dict: +375 return self.get(f"/w/{self.workspace}/jobs_u/get/{job_id}").json() +376 +377 def get_root_job_id(self, job_id: str | None = None) -> dict: +378 job_id = job_id or os.environ.get("WM_JOB_ID") +379 return self.get(f"/w/{self.workspace}/jobs_u/get_root_job_id/{job_id}").json() +380 +381 def get_id_token(self, audience: str) -> str: +382 return self.post(f"/w/{self.workspace}/oidc/token/{audience}").text +383 +384 def get_job_status(self, job_id: str) -> JobStatus: +385 job = self.get_job(job_id) +386 job_type = job.get("type", "") +387 assert job_type, f"{job} is not a valid job" +388 if job_type.lower() == "completedjob": +389 return "COMPLETED" +390 if job.get("running"): +391 return "RUNNING" +392 return "WAITING" +393 +394 def get_result( +395 self, +396 job_id: str, +397 assert_result_is_not_none: bool = True, +398 ) -> Any: +399 result = self.get(f"/w/{self.workspace}/jobs_u/completed/get_result/{job_id}") +400 result_text = result.text +401 if assert_result_is_not_none and result_text is None: +402 raise Exception(f"result is None for {job_id = }") +403 try: +404 return result.json() +405 except JSONDecodeError: +406 return result_text +407 +408 def get_variable(self, path: str) -> str: +409 path = parse_variable_syntax(path) or path +410 if self.mocked_api is not None: +411 variables = self.mocked_api["variables"] +412 try: +413 result = variables[path] +414 return result +415 except KeyError: +416 logger.info( +417 f"MockedAPI present, but variable not found at {path}, falling back to real API" +418 ) +419 +420 """Get variable from Windmill""" +421 return self.get(f"/w/{self.workspace}/variables/get_value/{path}").json() +422 +423 def set_variable(self, path: str, value: str, is_secret: bool = False) -> None: +424 path = parse_variable_syntax(path) or path +425 if self.mocked_api is not None: +426 self.mocked_api["variables"][path] = value +427 return +428 +429 """Set variable from Windmill""" +430 # check if variable exists +431 r = self.get( +432 f"/w/{self.workspace}/variables/get/{path}", raise_for_status=False +433 ) +434 if r.status_code == 404: +435 # create variable +436 self.post( +437 f"/w/{self.workspace}/variables/create", +438 json={ +439 "path": path, +440 "value": value, +441 "is_secret": is_secret, +442 "description": "", +443 }, +444 ) +445 else: +446 # update variable +447 self.post( +448 f"/w/{self.workspace}/variables/update/{path}", +449 json={"value": value}, +450 ) +451 +452 def get_resource( +453 self, +454 path: str, +455 none_if_undefined: bool = False, +456 ) -> dict | None: +457 path = parse_resource_syntax(path) or path +458 if self.mocked_api is not None: +459 resources = self.mocked_api["resources"] +460 try: +461 result = resources[path] +462 return result +463 except KeyError: +464 # NOTE: should mocked_api respect `none_if_undefined`? +465 if none_if_undefined: +466 logger.info( +467 f"resource not found at ${path}, but none_if_undefined is True, so returning None" +468 ) +469 return None +470 logger.info( +471 f"MockedAPI present, but resource not found at ${path}, falling back to real API" +472 ) +473 +474 """Get resource from Windmill""" +475 try: +476 return self.get( +477 f"/w/{self.workspace}/resources/get_value_interpolated/{path}" +478 ).json() +479 except Exception as e: +480 if none_if_undefined: +481 return None +482 logger.error(e) +483 raise e +484 +485 def set_resource( +486 self, +487 value: Any, +488 path: str, +489 resource_type: str, +490 ): +491 path = parse_resource_syntax(path) or path +492 if self.mocked_api is not None: +493 self.mocked_api["resources"][path] = value +494 return +495 +496 # check if resource exists +497 r = self.get( +498 f"/w/{self.workspace}/resources/get/{path}", raise_for_status=False +499 ) +500 if r.status_code == 404: +501 # create resource +502 self.post( +503 f"/w/{self.workspace}/resources/create", +504 json={ +505 "path": path, +506 "value": value, +507 "resource_type": resource_type, +508 }, +509 ) +510 else: +511 # update resource +512 self.post( +513 f"/w/{self.workspace}/resources/update_value/{path}", +514 json={"value": value}, +515 ) +516 +517 def set_state(self, value: Any): +518 self.set_resource(value, path=self.state_path, resource_type="state") +519 +520 def set_progress(self, value: int, job_id: Optional[str] = None): +521 workspace = get_workspace() +522 flow_id = os.environ.get("WM_FLOW_JOB_ID") +523 job_id = job_id or os.environ.get("WM_JOB_ID") +524 +525 if job_id != None: +526 job = self.get_job(job_id) +527 flow_id = job.get("parent_job") +528 +529 self.post( +530 f"/w/{workspace}/job_metrics/set_progress/{job_id}", +531 json={ +532 "percent": value, +533 "flow_job_id": flow_id or None, +534 }, +535 ) +536 +537 def get_progress(self, job_id: Optional[str] = None) -> Any: +538 workspace = get_workspace() +539 job_id = job_id or os.environ.get("WM_JOB_ID") +540 +541 r = self.get( +542 f"/w/{workspace}/job_metrics/get_progress/{job_id}", +543 ) +544 if r.status_code == 404: +545 print(f"Job {job_id} does not exist") +546 return None +547 else: +548 return r.json() +549 +550 def set_flow_user_state(self, key: str, value: Any) -> None: +551 """Set the user state of a flow at a given key""" +552 flow_id = self.get_root_job_id() +553 r = self.post( +554 f"/w/{self.workspace}/jobs/flow/user_states/{flow_id}/{key}", +555 json=value, +556 raise_for_status=False, +557 ) +558 if r.status_code == 404: +559 print(f"Job {flow_id} does not exist or is not a flow") +560 +561 def get_flow_user_state(self, key: str) -> Any: +562 """Get the user state of a flow at a given key""" +563 flow_id = self.get_root_job_id() +564 r = self.get( +565 f"/w/{self.workspace}/jobs/flow/user_states/{flow_id}/{key}", +566 raise_for_status=False, +567 ) +568 if r.status_code == 404: +569 print(f"Job {flow_id} does not exist or is not a flow") +570 return None +571 else: +572 return r.json() +573 +574 @property +575 def version(self): +576 return self.get("version").text +577 +578 def get_duckdb_connection_settings( +579 self, +580 s3_resource_path: str = "", +581 ) -> DuckDbConnectionSettings | None: +582 """ +583 Convenient helpers that takes an S3 resource as input and returns the settings necessary to +584 initiate an S3 connection from DuckDB +585 """ +586 s3_resource_path = parse_resource_syntax(s3_resource_path) or s3_resource_path +587 try: +588 raw_obj = self.post( +589 f"/w/{self.workspace}/job_helpers/v2/duckdb_connection_settings", +590 json={} +591 if s3_resource_path == "" +592 else {"s3_resource_path": s3_resource_path}, +593 ).json() +594 return DuckDbConnectionSettings(raw_obj) +595 except JSONDecodeError as e: +596 raise Exception( +597 "Could not generate DuckDB S3 connection settings from the provided resource" +598 ) from e +599 +600 def get_polars_connection_settings( +601 self, +602 s3_resource_path: str = "", +603 ) -> PolarsConnectionSettings: +604 """ +605 Convenient helpers that takes an S3 resource as input and returns the settings necessary to +606 initiate an S3 connection from Polars +607 """ +608 s3_resource_path = parse_resource_syntax(s3_resource_path) or s3_resource_path +609 try: +610 raw_obj = self.post( +611 f"/w/{self.workspace}/job_helpers/v2/polars_connection_settings", +612 json={} +613 if s3_resource_path == "" +614 else {"s3_resource_path": s3_resource_path}, +615 ).json() +616 return PolarsConnectionSettings(raw_obj) +617 except JSONDecodeError as e: +618 raise Exception( +619 "Could not generate Polars S3 connection settings from the provided resource" +620 ) from e +621 +622 def get_boto3_connection_settings( +623 self, +624 s3_resource_path: str = "", +625 ) -> Boto3ConnectionSettings: +626 """ +627 Convenient helpers that takes an S3 resource as input and returns the settings necessary to +628 initiate an S3 connection using boto3 +629 """ +630 s3_resource_path = parse_resource_syntax(s3_resource_path) or s3_resource_path +631 try: +632 s3_resource = self.post( +633 f"/w/{self.workspace}/job_helpers/v2/s3_resource_info", +634 json={} +635 if s3_resource_path == "" +636 else {"s3_resource_path": s3_resource_path}, +637 ).json() +638 return self.__boto3_connection_settings(s3_resource) +639 except JSONDecodeError as e: +640 raise Exception( +641 "Could not generate Boto3 S3 connection settings from the provided resource" +642 ) from e +643 +644 def load_s3_file(self, s3object: S3Object | str, s3_resource_path: str | None) -> bytes: +645 """ +646 Load a file from the workspace s3 bucket and returns its content as bytes. +647 +648 '''python +649 from wmill import S3Object +650 +651 s3_obj = S3Object(s3="/path/to/my_file.txt") +652 my_obj_content = client.load_s3_file(s3_obj) +653 file_content = my_obj_content.decode("utf-8") +654 ''' +655 """ +656 s3object = parse_s3_object(s3object) +657 with self.load_s3_file_reader(s3object, s3_resource_path) as file_reader: +658 return file_reader.read() +659 +660 def load_s3_file_reader( +661 self, s3object: S3Object | str, s3_resource_path: str | None +662 ) -> BufferedReader: +663 """ +664 Load a file from the workspace s3 bucket and returns the bytes stream. +665 +666 '''python +667 from wmill import S3Object +668 +669 s3_obj = S3Object(s3="/path/to/my_file.txt") +670 with wmill.load_s3_file_reader(s3object, s3_resource_path) as file_reader: +671 print(file_reader.read()) +672 ''' +673 """ +674 s3object = parse_s3_object(s3object) +675 reader = S3BufferedReader( +676 f"{self.workspace}", +677 self.client, +678 s3object["s3"], +679 s3_resource_path, +680 s3object["storage"] if "storage" in s3object else None, +681 ) +682 return reader +683 +684 def write_s3_file( +685 self, +686 s3object: S3Object | str | None, +687 file_content: BufferedReader | bytes, +688 s3_resource_path: str | None, +689 content_type: str | None = None, +690 content_disposition: str | None = None, +691 ) -> S3Object: +692 """ +693 Write a file to the workspace S3 bucket +694 +695 '''python +696 from wmill import S3Object +697 +698 s3_obj = S3Object(s3="/path/to/my_file.txt") +699 +700 # for an in memory bytes array: +701 file_content = b'Hello Windmill!' +702 client.write_s3_file(s3_obj, file_content) +703 +704 # for a file: +705 with open("my_file.txt", "rb") as my_file: +706 client.write_s3_file(s3_obj, my_file) +707 ''' +708 """ +709 s3object = parse_s3_object(s3object) +710 # httpx accepts either bytes or "a bytes generator" as content. If it's a BufferedReader, we need to convert it to a generator +711 if isinstance(file_content, BufferedReader): +712 content_payload = bytes_generator(file_content) +713 elif isinstance(file_content, bytes): +714 content_payload = file_content +715 else: +716 raise Exception("Type of file_content not supported") +717 +718 query_params = {} +719 if s3object is not None and s3object["s3"] != "": +720 query_params["file_key"] = s3object["s3"] +721 if s3_resource_path is not None and s3_resource_path != "": +722 query_params["s3_resource_path"] = s3_resource_path +723 if ( +724 s3object is not None +725 and "storage" in s3object +726 and s3object["storage"] is not None +727 ): +728 query_params["storage"] = s3object["storage"] +729 if content_type is not None: +730 query_params["content_type"] = content_type +731 if content_disposition is not None: +732 query_params["content_disposition"] = content_disposition +733 +734 try: +735 # need a vanilla client b/c content-type is not application/json here +736 response = httpx.post( +737 f"{self.base_url}/w/{self.workspace}/job_helpers/upload_s3_file", +738 headers={ +739 "Authorization": f"Bearer {self.token}", +740 "Content-Type": "application/octet-stream", +741 }, +742 params=query_params, +743 content=content_payload, +744 verify=self.verify, +745 timeout=None, +746 ).json() +747 except Exception as e: +748 raise Exception("Could not write file to S3") from e +749 return S3Object(s3=response["file_key"]) +750 +751 def sign_s3_objects(self, s3_objects: list[S3Object | str]) -> list[S3Object]: +752 return self.post( +753 f"/w/{self.workspace}/apps/sign_s3_objects", json={"s3_objects": list(map(parse_s3_object, s3_objects))} +754 ).json() +755 +756 def sign_s3_object(self, s3_object: S3Object | str) -> S3Object: +757 return self.post( +758 f"/w/{self.workspace}/apps/sign_s3_objects", +759 json={"s3_objects": [s3_object]}, +760 ).json()[0] +761 +762 def __boto3_connection_settings(self, s3_resource) -> Boto3ConnectionSettings: +763 endpoint_url_prefix = "https://" if s3_resource["useSSL"] else "http://" +764 return Boto3ConnectionSettings( +765 { +766 "endpoint_url": "{}{}".format( +767 endpoint_url_prefix, s3_resource["endPoint"] +768 ), +769 "region_name": s3_resource["region"], +770 "use_ssl": s3_resource["useSSL"], +771 "aws_access_key_id": s3_resource["accessKey"], +772 "aws_secret_access_key": s3_resource["secretKey"], +773 # no need for path_style here as boto3 is clever enough to determine which one to use +774 } +775 ) +776 +777 def whoami(self) -> dict: +778 return self.get("/users/whoami").json() +779 +780 @property +781 def user(self) -> dict: +782 return self.whoami() +783 +784 @property +785 def state_path(self) -> str: +786 state_path = os.environ.get( +787 "WM_STATE_PATH_NEW", os.environ.get("WM_STATE_PATH") +788 ) +789 if state_path is None: +790 raise Exception("State path not found") +791 return state_path +792 +793 @property +794 def state(self) -> Any: +795 return self.get_resource(path=self.state_path, none_if_undefined=True) +796 +797 @state.setter +798 def state(self, value: Any) -> None: +799 self.set_state(value) +800 +801 @staticmethod +802 def set_shared_state_pickle(value: Any, path: str = "state.pickle") -> None: +803 """ +804 Set the state in the shared folder using pickle +805 """ +806 import pickle +807 +808 with open(f"/shared/{path}", "wb") as handle: +809 pickle.dump(value, handle, protocol=pickle.HIGHEST_PROTOCOL) +810 +811 @staticmethod +812 def get_shared_state_pickle(path: str = "state.pickle") -> Any: +813 """ +814 Get the state in the shared folder using pickle +815 """ +816 import pickle +817 +818 with open(f"/shared/{path}", "rb") as handle: +819 return pickle.load(handle) +820 +821 @staticmethod +822 def set_shared_state(value: Any, path: str = "state.json") -> None: +823 """ +824 Set the state in the shared folder using pickle +825 """ +826 import json +827 +828 with open(f"/shared/{path}", "w", encoding="utf-8") as f: +829 json.dump(value, f, ensure_ascii=False, indent=4) +830 +831 @staticmethod +832 def get_shared_state(path: str = "state.json") -> None: +833 """ +834 Get the state in the shared folder using pickle +835 """ +836 import json +837 +838 with open(f"/shared/{path}", "r", encoding="utf-8") as f: +839 return json.load(f) +840 +841 def get_resume_urls(self, approver: str = None) -> dict: +842 nonce = random.randint(0, 1000000000) +843 job_id = os.environ.get("WM_JOB_ID") or "NO_ID" +844 return self.get( +845 f"/w/{self.workspace}/jobs/resume_urls/{job_id}/{nonce}", +846 params={"approver": approver}, +847 ).json() +848 +849 def request_interactive_slack_approval( +850 self, +851 slack_resource_path: str, +852 channel_id: str, +853 message: str = None, +854 approver: str = None, +855 default_args_json: dict = None, +856 dynamic_enums_json: dict = None, +857 ) -> None: +858 """ +859 Sends an interactive approval request via Slack, allowing optional customization of the message, approver, and form fields. +860 +861 **[Enterprise Edition Only]** To include form fields in the Slack approval request, use the "Advanced -> Suspend -> Form" functionality. +862 Learn more at: https://www.windmill.dev/docs/flows/flow_approval#form +863 +864 :param slack_resource_path: The path to the Slack resource in Windmill. +865 :type slack_resource_path: str +866 :param channel_id: The Slack channel ID where the approval request will be sent. +867 :type channel_id: str +868 :param message: Optional custom message to include in the Slack approval request. +869 :type message: str, optional +870 :param approver: Optional user ID or name of the approver for the request. +871 :type approver: str, optional +872 :param default_args_json: Optional dictionary defining or overriding the default arguments for form fields. +873 :type default_args_json: dict, optional +874 :param dynamic_enums_json: Optional dictionary overriding the enum default values of enum form fields. +875 :type dynamic_enums_json: dict, optional +876 +877 :raises Exception: If the function is not called within a flow or flow preview. +878 :raises Exception: If the required flow job or flow step environment variables are not set. +879 +880 :return: None +881 +882 **Usage Example:** +883 >>> client.request_interactive_slack_approval( +884 ... slack_resource_path="/u/alex/my_slack_resource", +885 ... channel_id="admins-slack-channel", +886 ... message="Please approve this request", +887 ... approver="approver123", +888 ... default_args_json={"key1": "value1", "key2": 42}, +889 ... dynamic_enums_json={"foo": ["choice1", "choice2"], "bar": ["optionA", "optionB"]}, +890 ... ) +891 +892 **Notes:** +893 - This function must be executed within a Windmill flow or flow preview. +894 - The function checks for required environment variables (`WM_FLOW_JOB_ID`, `WM_FLOW_STEP_ID`) to ensure it is run in the appropriate context. +895 """ +896 workspace = self.workspace +897 flow_job_id = os.environ.get("WM_FLOW_JOB_ID") +898 +899 if not flow_job_id: +900 raise Exception( +901 "You can't use 'request_interactive_slack_approval' function in a standalone script or flow step preview. Please use it in a flow or a flow preview." +902 ) +903 +904 # Only include non-empty parameters +905 params = {} +906 if message: +907 params["message"] = message +908 if approver: +909 params["approver"] = approver +910 if slack_resource_path: +911 params["slack_resource_path"] = slack_resource_path +912 if channel_id: +913 params["channel_id"] = channel_id +914 if os.environ.get("WM_FLOW_STEP_ID"): +915 params["flow_step_id"] = os.environ.get("WM_FLOW_STEP_ID") +916 if default_args_json: +917 params["default_args_json"] = json.dumps(default_args_json) +918 if dynamic_enums_json: +919 params["dynamic_enums_json"] = json.dumps(dynamic_enums_json) +920 +921 self.get( +922 f"/w/{workspace}/jobs/slack_approval/{os.environ.get('WM_JOB_ID', 'NO_JOB_ID')}", +923 params=params, +924 ) +925 +926 def username_to_email(self, username: str) -> str: +927 """ +928 Get email from workspace username +929 This method is particularly useful for apps that require the email address of the viewer. +930 Indeed, in the viewer context WM_USERNAME is set to the username of the viewer but WM_EMAIL is set to the email of the creator of the app. +931 """ +932 return self.get(f"/w/{self.workspace}/users/username_to_email/{username}").text +933 +934 def send_teams_message( +935 self, +936 conversation_id: str, +937 text: str, +938 success: bool = True, +939 card_block: dict = None, +940 ): +941 """ +942 Send a message to a Microsoft Teams conversation with conversation_id, where success is used to style the message +943 """ +944 return self.post( +945 f"/teams/activities", +946 json={ +947 "conversation_id": conversation_id, +948 "text": text, +949 "success": success, +950 "card_block": card_block, +951 }, +952 ) +
36 def __init__(self, base_url=None, token=None, workspace=None, verify=True): +37 base = ( +38 base_url +39 or os.environ.get("BASE_INTERNAL_URL") +40 or os.environ.get("WM_BASE_URL") +41 ) +42 +43 self.base_url = f"{base}/api" +44 self.token = token or os.environ.get("WM_TOKEN") +45 self.headers = { +46 "Content-Type": "application/json", +47 "Authorization": f"Bearer {self.token}", +48 } +49 self.verify = verify +50 self.client = self.get_client() +51 self.workspace = workspace or os.environ.get("WM_WORKSPACE") +52 self.path = os.environ.get("WM_JOB_PATH") +53 +54 self.mocked_api = self.get_mocked_api() +55 +56 assert self.workspace, ( +57 f"workspace required as an argument or as WM_WORKSPACE environment variable" +58 ) +
60 def get_mocked_api(self) -> Optional[dict]: +61 mocked_path = os.environ.get("WM_MOCKED_API_FILE") +62 if not mocked_path: +63 return None +64 logger.info("Using mocked API from %s", mocked_path) +65 mocked_api = {"variables": {}, "resources": {}} +66 try: +67 with open(mocked_path, "r") as f: +68 incoming_mocked_api = json.load(f) +69 mocked_api = {**mocked_api, **incoming_mocked_api} +70 except Exception as e: +71 logger.warning( +72 "Error parsing mocked API file at path %s Using empty mocked API.", +73 mocked_path, +74 ) +75 logger.debug(e) +76 return mocked_api +
85 def get(self, endpoint, raise_for_status=True, **kwargs) -> httpx.Response: +86 endpoint = endpoint.lstrip("/") +87 resp = self.client.get(f"/{endpoint}", **kwargs) +88 if raise_for_status: +89 try: +90 resp.raise_for_status() +91 except httpx.HTTPStatusError as err: +92 error = f"{err.request.url}: {err.response.status_code}, {err.response.text}" +93 logger.error(error) +94 raise Exception(error) +95 return resp +
97 def post(self, endpoint, raise_for_status=True, **kwargs) -> httpx.Response: + 98 endpoint = endpoint.lstrip("/") + 99 resp = self.client.post(f"/{endpoint}", **kwargs) +100 if raise_for_status: +101 try: +102 resp.raise_for_status() +103 except httpx.HTTPStatusError as err: +104 error = f"{err.request.url}: {err.response.status_code}, {err.response.text}" +105 logger.error(error) +106 raise Exception(error) +107 return resp +
109 def create_token(self, duration=dt.timedelta(days=1)) -> str: +110 endpoint = "/users/tokens/create" +111 payload = { +112 "label": f"refresh {time.time()}", +113 "expiration": (dt.datetime.now() + duration).strftime("%Y-%m-%dT%H:%M:%SZ"), +114 } +115 return self.post(endpoint, json=payload).text +
117 def run_script_async( +118 self, +119 path: str = None, +120 hash_: str = None, +121 args: dict = None, +122 scheduled_in_secs: int = None, +123 ) -> str: +124 """Create a script job and return its job id. +125 +126 .. deprecated:: Use run_script_by_path_async or run_script_by_hash_async instead. +127 """ +128 logging.warning( +129 "run_script_async is deprecated. Use run_script_by_path_async or run_script_by_hash_async instead.", +130 ) +131 assert not (path and hash_), "path and hash_ are mutually exclusive" +132 return self._run_script_async_internal(path=path, hash_=hash_, args=args, scheduled_in_secs=scheduled_in_secs) +
Create a script job and return its job id.
+ +Deprecated since version Use run_script_by_path_async or run_script_by_hash_async instead..
+158 def run_script_by_path_async( +159 self, +160 path: str, +161 args: dict = None, +162 scheduled_in_secs: int = None, +163 ) -> str: +164 """Create a script job by path and return its job id.""" +165 return self._run_script_async_internal(path=path, args=args, scheduled_in_secs=scheduled_in_secs) +
Create a script job by path and return its job id.
+167 def run_script_by_hash_async( +168 self, +169 hash_: str, +170 args: dict = None, +171 scheduled_in_secs: int = None, +172 ) -> str: +173 """Create a script job by hash and return its job id.""" +174 return self._run_script_async_internal(hash_=hash_, args=args, scheduled_in_secs=scheduled_in_secs) +
Create a script job by hash and return its job id.
+176 def run_flow_async( +177 self, +178 path: str, +179 args: dict = None, +180 scheduled_in_secs: int = None, +181 # can only be set to false if this the job will be fully await and not concurrent with any other job +182 # as otherwise the child flow and its own child will store their state in the parent job which will +183 # lead to incorrectness and failures +184 do_not_track_in_parent: bool = True, +185 ) -> str: +186 """Create a flow job and return its job id.""" +187 args = args or {} +188 params = {"scheduled_in_secs": scheduled_in_secs} if scheduled_in_secs else {} +189 if not do_not_track_in_parent: +190 if os.environ.get("WM_JOB_ID"): +191 params["parent_job"] = os.environ.get("WM_JOB_ID") +192 if os.environ.get("WM_ROOT_FLOW_JOB_ID"): +193 params["root_job"] = os.environ.get("WM_ROOT_FLOW_JOB_ID") +194 if path: +195 endpoint = f"/w/{self.workspace}/jobs/run/f/{path}" +196 else: +197 raise Exception("path must be provided") +198 return self.post(endpoint, json=args, params=params).text +
Create a flow job and return its job id.
+200 def run_script( +201 self, +202 path: str = None, +203 hash_: str = None, +204 args: dict = None, +205 timeout: dt.timedelta | int | float | None = None, +206 verbose: bool = False, +207 cleanup: bool = True, +208 assert_result_is_not_none: bool = False, +209 ) -> Any: +210 """Run script synchronously and return its result. +211 +212 .. deprecated:: Use run_script_by_path or run_script_by_hash instead. +213 """ +214 logging.warning( +215 "run_script is deprecated. Use run_script_by_path or run_script_by_hash instead.", +216 ) +217 assert not (path and hash_), "path and hash_ are mutually exclusive" +218 return self._run_script_internal( +219 path=path, hash_=hash_, args=args, timeout=timeout, verbose=verbose, +220 cleanup=cleanup, assert_result_is_not_none=assert_result_is_not_none +221 ) +
Run script synchronously and return its result.
+ +Deprecated since version Use run_script_by_path or run_script_by_hash instead..
+250 def run_script_by_path( +251 self, +252 path: str, +253 args: dict = None, +254 timeout: dt.timedelta | int | float | None = None, +255 verbose: bool = False, +256 cleanup: bool = True, +257 assert_result_is_not_none: bool = False, +258 ) -> Any: +259 """Run script by path synchronously and return its result.""" +260 return self._run_script_internal( +261 path=path, args=args, timeout=timeout, verbose=verbose, +262 cleanup=cleanup, assert_result_is_not_none=assert_result_is_not_none +263 ) +
Run script by path synchronously and return its result.
+265 def run_script_by_hash( +266 self, +267 hash_: str, +268 args: dict = None, +269 timeout: dt.timedelta | int | float | None = None, +270 verbose: bool = False, +271 cleanup: bool = True, +272 assert_result_is_not_none: bool = False, +273 ) -> Any: +274 """Run script by hash synchronously and return its result.""" +275 return self._run_script_internal( +276 hash_=hash_, args=args, timeout=timeout, verbose=verbose, +277 cleanup=cleanup, assert_result_is_not_none=assert_result_is_not_none +278 ) +
Run script by hash synchronously and return its result.
+280 def wait_job( +281 self, +282 job_id, +283 timeout: dt.timedelta | int | float | None = None, +284 verbose: bool = False, +285 cleanup: bool = True, +286 assert_result_is_not_none: bool = False, +287 ): +288 def cancel_job(): +289 logger.warning(f"cancelling job: {job_id}") +290 self.post( +291 f"/w/{self.workspace}/jobs_u/queue/cancel/{job_id}", +292 json={"reason": "parent script cancelled"}, +293 ).raise_for_status() +294 +295 if cleanup: +296 atexit.register(cancel_job) +297 +298 start_time = time.time() +299 +300 if isinstance(timeout, dt.timedelta): +301 timeout = timeout.total_seconds() +302 +303 while True: +304 result_res = self.get( +305 f"/w/{self.workspace}/jobs_u/completed/get_result_maybe/{job_id}", True +306 ).json() +307 +308 started = result_res["started"] +309 completed = result_res["completed"] +310 success = result_res["success"] +311 +312 if not started and verbose: +313 logger.info(f"job {job_id} has not started yet") +314 +315 if cleanup and completed: +316 atexit.unregister(cancel_job) +317 +318 if completed: +319 result = result_res["result"] +320 if success: +321 if result is None and assert_result_is_not_none: +322 raise Exception("Result was none") +323 return result +324 else: +325 error = result["error"] +326 raise Exception(f"Job {job_id} was not successful: {str(error)}") +327 +328 if timeout and ((time.time() - start_time) > timeout): +329 msg = "reached timeout" +330 logger.warning(msg) +331 self.post( +332 f"/w/{self.workspace}/jobs_u/queue/cancel/{job_id}", +333 json={"reason": msg}, +334 ) +335 raise TimeoutError(msg) +336 if verbose: +337 logger.info(f"sleeping 0.5 seconds for {job_id = }") +338 +339 time.sleep(0.5) +
341 def cancel_running(self) -> dict: +342 """Cancel currently running executions of the same script.""" +343 logger.info("canceling running executions of this script") +344 +345 jobs = self.get( +346 f"/w/{self.workspace}/jobs/list", +347 params={ +348 "running": "true", +349 "script_path_exact": self.path, +350 }, +351 ).json() +352 +353 current_job_id = os.environ.get("WM_JOB_ID") +354 +355 logger.debug(f"{current_job_id = }") +356 +357 job_ids = [j["id"] for j in jobs if j["id"] != current_job_id] +358 +359 if job_ids: +360 logger.info(f"cancelling the following job ids: {job_ids}") +361 else: +362 logger.info("no previous executions to cancel") +363 +364 result = {} +365 +366 for id_ in job_ids: +367 result[id_] = self.post( +368 f"/w/{self.workspace}/jobs_u/queue/cancel/{id_}", +369 json={"reason": "killed by `cancel_running` method"}, +370 ) +371 +372 return result +
Cancel currently running executions of the same script.
+384 def get_job_status(self, job_id: str) -> JobStatus: +385 job = self.get_job(job_id) +386 job_type = job.get("type", "") +387 assert job_type, f"{job} is not a valid job" +388 if job_type.lower() == "completedjob": +389 return "COMPLETED" +390 if job.get("running"): +391 return "RUNNING" +392 return "WAITING" +
394 def get_result( +395 self, +396 job_id: str, +397 assert_result_is_not_none: bool = True, +398 ) -> Any: +399 result = self.get(f"/w/{self.workspace}/jobs_u/completed/get_result/{job_id}") +400 result_text = result.text +401 if assert_result_is_not_none and result_text is None: +402 raise Exception(f"result is None for {job_id = }") +403 try: +404 return result.json() +405 except JSONDecodeError: +406 return result_text +
408 def get_variable(self, path: str) -> str: +409 path = parse_variable_syntax(path) or path +410 if self.mocked_api is not None: +411 variables = self.mocked_api["variables"] +412 try: +413 result = variables[path] +414 return result +415 except KeyError: +416 logger.info( +417 f"MockedAPI present, but variable not found at {path}, falling back to real API" +418 ) +419 +420 """Get variable from Windmill""" +421 return self.get(f"/w/{self.workspace}/variables/get_value/{path}").json() +
423 def set_variable(self, path: str, value: str, is_secret: bool = False) -> None: +424 path = parse_variable_syntax(path) or path +425 if self.mocked_api is not None: +426 self.mocked_api["variables"][path] = value +427 return +428 +429 """Set variable from Windmill""" +430 # check if variable exists +431 r = self.get( +432 f"/w/{self.workspace}/variables/get/{path}", raise_for_status=False +433 ) +434 if r.status_code == 404: +435 # create variable +436 self.post( +437 f"/w/{self.workspace}/variables/create", +438 json={ +439 "path": path, +440 "value": value, +441 "is_secret": is_secret, +442 "description": "", +443 }, +444 ) +445 else: +446 # update variable +447 self.post( +448 f"/w/{self.workspace}/variables/update/{path}", +449 json={"value": value}, +450 ) +
452 def get_resource( +453 self, +454 path: str, +455 none_if_undefined: bool = False, +456 ) -> dict | None: +457 path = parse_resource_syntax(path) or path +458 if self.mocked_api is not None: +459 resources = self.mocked_api["resources"] +460 try: +461 result = resources[path] +462 return result +463 except KeyError: +464 # NOTE: should mocked_api respect `none_if_undefined`? +465 if none_if_undefined: +466 logger.info( +467 f"resource not found at ${path}, but none_if_undefined is True, so returning None" +468 ) +469 return None +470 logger.info( +471 f"MockedAPI present, but resource not found at ${path}, falling back to real API" +472 ) +473 +474 """Get resource from Windmill""" +475 try: +476 return self.get( +477 f"/w/{self.workspace}/resources/get_value_interpolated/{path}" +478 ).json() +479 except Exception as e: +480 if none_if_undefined: +481 return None +482 logger.error(e) +483 raise e +
485 def set_resource( +486 self, +487 value: Any, +488 path: str, +489 resource_type: str, +490 ): +491 path = parse_resource_syntax(path) or path +492 if self.mocked_api is not None: +493 self.mocked_api["resources"][path] = value +494 return +495 +496 # check if resource exists +497 r = self.get( +498 f"/w/{self.workspace}/resources/get/{path}", raise_for_status=False +499 ) +500 if r.status_code == 404: +501 # create resource +502 self.post( +503 f"/w/{self.workspace}/resources/create", +504 json={ +505 "path": path, +506 "value": value, +507 "resource_type": resource_type, +508 }, +509 ) +510 else: +511 # update resource +512 self.post( +513 f"/w/{self.workspace}/resources/update_value/{path}", +514 json={"value": value}, +515 ) +
520 def set_progress(self, value: int, job_id: Optional[str] = None): +521 workspace = get_workspace() +522 flow_id = os.environ.get("WM_FLOW_JOB_ID") +523 job_id = job_id or os.environ.get("WM_JOB_ID") +524 +525 if job_id != None: +526 job = self.get_job(job_id) +527 flow_id = job.get("parent_job") +528 +529 self.post( +530 f"/w/{workspace}/job_metrics/set_progress/{job_id}", +531 json={ +532 "percent": value, +533 "flow_job_id": flow_id or None, +534 }, +535 ) +
537 def get_progress(self, job_id: Optional[str] = None) -> Any: +538 workspace = get_workspace() +539 job_id = job_id or os.environ.get("WM_JOB_ID") +540 +541 r = self.get( +542 f"/w/{workspace}/job_metrics/get_progress/{job_id}", +543 ) +544 if r.status_code == 404: +545 print(f"Job {job_id} does not exist") +546 return None +547 else: +548 return r.json() +
550 def set_flow_user_state(self, key: str, value: Any) -> None: +551 """Set the user state of a flow at a given key""" +552 flow_id = self.get_root_job_id() +553 r = self.post( +554 f"/w/{self.workspace}/jobs/flow/user_states/{flow_id}/{key}", +555 json=value, +556 raise_for_status=False, +557 ) +558 if r.status_code == 404: +559 print(f"Job {flow_id} does not exist or is not a flow") +
Set the user state of a flow at a given key
+561 def get_flow_user_state(self, key: str) -> Any: +562 """Get the user state of a flow at a given key""" +563 flow_id = self.get_root_job_id() +564 r = self.get( +565 f"/w/{self.workspace}/jobs/flow/user_states/{flow_id}/{key}", +566 raise_for_status=False, +567 ) +568 if r.status_code == 404: +569 print(f"Job {flow_id} does not exist or is not a flow") +570 return None +571 else: +572 return r.json() +
Get the user state of a flow at a given key
+578 def get_duckdb_connection_settings( +579 self, +580 s3_resource_path: str = "", +581 ) -> DuckDbConnectionSettings | None: +582 """ +583 Convenient helpers that takes an S3 resource as input and returns the settings necessary to +584 initiate an S3 connection from DuckDB +585 """ +586 s3_resource_path = parse_resource_syntax(s3_resource_path) or s3_resource_path +587 try: +588 raw_obj = self.post( +589 f"/w/{self.workspace}/job_helpers/v2/duckdb_connection_settings", +590 json={} +591 if s3_resource_path == "" +592 else {"s3_resource_path": s3_resource_path}, +593 ).json() +594 return DuckDbConnectionSettings(raw_obj) +595 except JSONDecodeError as e: +596 raise Exception( +597 "Could not generate DuckDB S3 connection settings from the provided resource" +598 ) from e +
Convenient helpers that takes an S3 resource as input and returns the settings necessary to +initiate an S3 connection from DuckDB
+600 def get_polars_connection_settings( +601 self, +602 s3_resource_path: str = "", +603 ) -> PolarsConnectionSettings: +604 """ +605 Convenient helpers that takes an S3 resource as input and returns the settings necessary to +606 initiate an S3 connection from Polars +607 """ +608 s3_resource_path = parse_resource_syntax(s3_resource_path) or s3_resource_path +609 try: +610 raw_obj = self.post( +611 f"/w/{self.workspace}/job_helpers/v2/polars_connection_settings", +612 json={} +613 if s3_resource_path == "" +614 else {"s3_resource_path": s3_resource_path}, +615 ).json() +616 return PolarsConnectionSettings(raw_obj) +617 except JSONDecodeError as e: +618 raise Exception( +619 "Could not generate Polars S3 connection settings from the provided resource" +620 ) from e +
Convenient helpers that takes an S3 resource as input and returns the settings necessary to +initiate an S3 connection from Polars
+622 def get_boto3_connection_settings( +623 self, +624 s3_resource_path: str = "", +625 ) -> Boto3ConnectionSettings: +626 """ +627 Convenient helpers that takes an S3 resource as input and returns the settings necessary to +628 initiate an S3 connection using boto3 +629 """ +630 s3_resource_path = parse_resource_syntax(s3_resource_path) or s3_resource_path +631 try: +632 s3_resource = self.post( +633 f"/w/{self.workspace}/job_helpers/v2/s3_resource_info", +634 json={} +635 if s3_resource_path == "" +636 else {"s3_resource_path": s3_resource_path}, +637 ).json() +638 return self.__boto3_connection_settings(s3_resource) +639 except JSONDecodeError as e: +640 raise Exception( +641 "Could not generate Boto3 S3 connection settings from the provided resource" +642 ) from e +
Convenient helpers that takes an S3 resource as input and returns the settings necessary to +initiate an S3 connection using boto3
+644 def load_s3_file(self, s3object: S3Object | str, s3_resource_path: str | None) -> bytes: +645 """ +646 Load a file from the workspace s3 bucket and returns its content as bytes. +647 +648 '''python +649 from wmill import S3Object +650 +651 s3_obj = S3Object(s3="/path/to/my_file.txt") +652 my_obj_content = client.load_s3_file(s3_obj) +653 file_content = my_obj_content.decode("utf-8") +654 ''' +655 """ +656 s3object = parse_s3_object(s3object) +657 with self.load_s3_file_reader(s3object, s3_resource_path) as file_reader: +658 return file_reader.read() +
Load a file from the workspace s3 bucket and returns its content as bytes.
+ +'''python +from wmill import S3Object
+ +s3_obj = S3Object(s3="/path/to/my_file.txt") +my_obj_content = client.load_s3_file(s3_obj) +file_content = my_obj_content.decode("utf-8") +'''
+660 def load_s3_file_reader( +661 self, s3object: S3Object | str, s3_resource_path: str | None +662 ) -> BufferedReader: +663 """ +664 Load a file from the workspace s3 bucket and returns the bytes stream. +665 +666 '''python +667 from wmill import S3Object +668 +669 s3_obj = S3Object(s3="/path/to/my_file.txt") +670 with wmill.load_s3_file_reader(s3object, s3_resource_path) as file_reader: +671 print(file_reader.read()) +672 ''' +673 """ +674 s3object = parse_s3_object(s3object) +675 reader = S3BufferedReader( +676 f"{self.workspace}", +677 self.client, +678 s3object["s3"], +679 s3_resource_path, +680 s3object["storage"] if "storage" in s3object else None, +681 ) +682 return reader +
Load a file from the workspace s3 bucket and returns the bytes stream.
+ +'''python +from wmill import S3Object
+ +s3_obj = S3Object(s3="/path/to/my_file.txt") +with wmill.load_s3_file_reader(s3object, s3_resource_path) as file_reader: + print(file_reader.read()) +'''
+684 def write_s3_file( +685 self, +686 s3object: S3Object | str | None, +687 file_content: BufferedReader | bytes, +688 s3_resource_path: str | None, +689 content_type: str | None = None, +690 content_disposition: str | None = None, +691 ) -> S3Object: +692 """ +693 Write a file to the workspace S3 bucket +694 +695 '''python +696 from wmill import S3Object +697 +698 s3_obj = S3Object(s3="/path/to/my_file.txt") +699 +700 # for an in memory bytes array: +701 file_content = b'Hello Windmill!' +702 client.write_s3_file(s3_obj, file_content) +703 +704 # for a file: +705 with open("my_file.txt", "rb") as my_file: +706 client.write_s3_file(s3_obj, my_file) +707 ''' +708 """ +709 s3object = parse_s3_object(s3object) +710 # httpx accepts either bytes or "a bytes generator" as content. If it's a BufferedReader, we need to convert it to a generator +711 if isinstance(file_content, BufferedReader): +712 content_payload = bytes_generator(file_content) +713 elif isinstance(file_content, bytes): +714 content_payload = file_content +715 else: +716 raise Exception("Type of file_content not supported") +717 +718 query_params = {} +719 if s3object is not None and s3object["s3"] != "": +720 query_params["file_key"] = s3object["s3"] +721 if s3_resource_path is not None and s3_resource_path != "": +722 query_params["s3_resource_path"] = s3_resource_path +723 if ( +724 s3object is not None +725 and "storage" in s3object +726 and s3object["storage"] is not None +727 ): +728 query_params["storage"] = s3object["storage"] +729 if content_type is not None: +730 query_params["content_type"] = content_type +731 if content_disposition is not None: +732 query_params["content_disposition"] = content_disposition +733 +734 try: +735 # need a vanilla client b/c content-type is not application/json here +736 response = httpx.post( +737 f"{self.base_url}/w/{self.workspace}/job_helpers/upload_s3_file", +738 headers={ +739 "Authorization": f"Bearer {self.token}", +740 "Content-Type": "application/octet-stream", +741 }, +742 params=query_params, +743 content=content_payload, +744 verify=self.verify, +745 timeout=None, +746 ).json() +747 except Exception as e: +748 raise Exception("Could not write file to S3") from e +749 return S3Object(s3=response["file_key"]) +
Write a file to the workspace S3 bucket
+ +'''python +from wmill import S3Object
+ +s3_obj = S3Object(s3="/path/to/my_file.txt")
+ +file_content = b'Hello Windmill!' +client.write_s3_file(s3_obj, file_content)
+ +with open("my_file.txt", "rb") as my_file: + client.write_s3_file(s3_obj, my_file) +'''
+849 def request_interactive_slack_approval( +850 self, +851 slack_resource_path: str, +852 channel_id: str, +853 message: str = None, +854 approver: str = None, +855 default_args_json: dict = None, +856 dynamic_enums_json: dict = None, +857 ) -> None: +858 """ +859 Sends an interactive approval request via Slack, allowing optional customization of the message, approver, and form fields. +860 +861 **[Enterprise Edition Only]** To include form fields in the Slack approval request, use the "Advanced -> Suspend -> Form" functionality. +862 Learn more at: https://www.windmill.dev/docs/flows/flow_approval#form +863 +864 :param slack_resource_path: The path to the Slack resource in Windmill. +865 :type slack_resource_path: str +866 :param channel_id: The Slack channel ID where the approval request will be sent. +867 :type channel_id: str +868 :param message: Optional custom message to include in the Slack approval request. +869 :type message: str, optional +870 :param approver: Optional user ID or name of the approver for the request. +871 :type approver: str, optional +872 :param default_args_json: Optional dictionary defining or overriding the default arguments for form fields. +873 :type default_args_json: dict, optional +874 :param dynamic_enums_json: Optional dictionary overriding the enum default values of enum form fields. +875 :type dynamic_enums_json: dict, optional +876 +877 :raises Exception: If the function is not called within a flow or flow preview. +878 :raises Exception: If the required flow job or flow step environment variables are not set. +879 +880 :return: None +881 +882 **Usage Example:** +883 >>> client.request_interactive_slack_approval( +884 ... slack_resource_path="/u/alex/my_slack_resource", +885 ... channel_id="admins-slack-channel", +886 ... message="Please approve this request", +887 ... approver="approver123", +888 ... default_args_json={"key1": "value1", "key2": 42}, +889 ... dynamic_enums_json={"foo": ["choice1", "choice2"], "bar": ["optionA", "optionB"]}, +890 ... ) +891 +892 **Notes:** +893 - This function must be executed within a Windmill flow or flow preview. +894 - The function checks for required environment variables (`WM_FLOW_JOB_ID`, `WM_FLOW_STEP_ID`) to ensure it is run in the appropriate context. +895 """ +896 workspace = self.workspace +897 flow_job_id = os.environ.get("WM_FLOW_JOB_ID") +898 +899 if not flow_job_id: +900 raise Exception( +901 "You can't use 'request_interactive_slack_approval' function in a standalone script or flow step preview. Please use it in a flow or a flow preview." +902 ) +903 +904 # Only include non-empty parameters +905 params = {} +906 if message: +907 params["message"] = message +908 if approver: +909 params["approver"] = approver +910 if slack_resource_path: +911 params["slack_resource_path"] = slack_resource_path +912 if channel_id: +913 params["channel_id"] = channel_id +914 if os.environ.get("WM_FLOW_STEP_ID"): +915 params["flow_step_id"] = os.environ.get("WM_FLOW_STEP_ID") +916 if default_args_json: +917 params["default_args_json"] = json.dumps(default_args_json) +918 if dynamic_enums_json: +919 params["dynamic_enums_json"] = json.dumps(dynamic_enums_json) +920 +921 self.get( +922 f"/w/{workspace}/jobs/slack_approval/{os.environ.get('WM_JOB_ID', 'NO_JOB_ID')}", +923 params=params, +924 ) +
Sends an interactive approval request via Slack, allowing optional customization of the message, approver, and form fields.
+ +[Enterprise Edition Only] To include form fields in the Slack approval request, use the "Advanced -> Suspend -> Form" functionality. +Learn more at: https://www.windmill.dev/docs/flows/flow_approval#form
+ +++ +None
+
Usage Example:
+ +++ +++++client.request_interactive_slack_approval( + ... slack_resource_path="/u/alex/my_slack_resource", + ... channel_id="admins-slack-channel", + ... message="Please approve this request", + ... approver="approver123", + ... default_args_json={"key1": "value1", "key2": 42}, + ... dynamic_enums_json={"foo": ["choice1", "choice2"], "bar": ["optionA", "optionB"]}, + ... )
+
Notes:
+ +WM_FLOW_JOB_ID, WM_FLOW_STEP_ID) to ensure it is run in the appropriate context.926 def username_to_email(self, username: str) -> str: +927 """ +928 Get email from workspace username +929 This method is particularly useful for apps that require the email address of the viewer. +930 Indeed, in the viewer context WM_USERNAME is set to the username of the viewer but WM_EMAIL is set to the email of the creator of the app. +931 """ +932 return self.get(f"/w/{self.workspace}/users/username_to_email/{username}").text +
Get email from workspace username +This method is particularly useful for apps that require the email address of the viewer. +Indeed, in the viewer context WM_USERNAME is set to the username of the viewer but WM_EMAIL is set to the email of the creator of the app.
+934 def send_teams_message( +935 self, +936 conversation_id: str, +937 text: str, +938 success: bool = True, +939 card_block: dict = None, +940 ): +941 """ +942 Send a message to a Microsoft Teams conversation with conversation_id, where success is used to style the message +943 """ +944 return self.post( +945 f"/teams/activities", +946 json={ +947 "conversation_id": conversation_id, +948 "text": text, +949 "success": success, +950 "card_block": card_block, +951 }, +952 ) +
Send a message to a Microsoft Teams conversation with conversation_id, where success is used to style the message
+966def deprecate(in_favor_of: str): +967 def decorator(f): +968 @functools.wraps(f) +969 def wrapper(*args, **kwargs): +970 warnings.warn( +971 ( +972 f"The '{f.__name__}' method is deprecated and may be removed in the future. " +973 f"Consider {in_favor_of}" +974 ), +975 DeprecationWarning, +976 ) +977 return f(*args, **kwargs) +978 +979 return wrapper +980 +981 return decorator +
1000@init_global_client +1001def run_script_async( +1002 hash_or_path: str, +1003 args: Dict[str, Any] = None, +1004 scheduled_in_secs: int = None, +1005) -> str: +1006 is_path = "/" in hash_or_path +1007 hash_ = None if is_path else hash_or_path +1008 path = hash_or_path if is_path else None +1009 return _client.run_script_async( +1010 hash_=hash_, +1011 path=path, +1012 args=args, +1013 scheduled_in_secs=scheduled_in_secs, +1014 ) +
1017@init_global_client +1018def run_flow_async( +1019 path: str, +1020 args: Dict[str, Any] = None, +1021 scheduled_in_secs: int = None, +1022 # can only be set to false if this the job will be fully await and not concurrent with any other job +1023 # as otherwise the child flow and its own child will store their state in the parent job which will +1024 # lead to incorrectness and failures +1025 do_not_track_in_parent: bool = True, +1026) -> str: +1027 return _client.run_flow_async( +1028 path=path, +1029 args=args, +1030 scheduled_in_secs=scheduled_in_secs, +1031 do_not_track_in_parent=do_not_track_in_parent, +1032 ) +
1035@init_global_client +1036def run_script_sync( +1037 hash: str, +1038 args: Dict[str, Any] = None, +1039 verbose: bool = False, +1040 assert_result_is_not_none: bool = True, +1041 cleanup: bool = True, +1042 timeout: dt.timedelta = None, +1043) -> Any: +1044 return _client.run_script( +1045 hash_=hash, +1046 args=args, +1047 verbose=verbose, +1048 assert_result_is_not_none=assert_result_is_not_none, +1049 cleanup=cleanup, +1050 timeout=timeout, +1051 ) +
1054@init_global_client +1055def run_script_by_path_async( +1056 path: str, +1057 args: Dict[str, Any] = None, +1058 scheduled_in_secs: Union[None, int] = None, +1059) -> str: +1060 return _client.run_script_by_path_async( +1061 path=path, +1062 args=args, +1063 scheduled_in_secs=scheduled_in_secs, +1064 ) +
1067@init_global_client +1068def run_script_by_hash_async( +1069 hash_: str, +1070 args: Dict[str, Any] = None, +1071 scheduled_in_secs: Union[None, int] = None, +1072) -> str: +1073 return _client.run_script_by_hash_async( +1074 hash_=hash_, +1075 args=args, +1076 scheduled_in_secs=scheduled_in_secs, +1077 ) +
1080@init_global_client +1081def run_script_by_path_sync( +1082 path: str, +1083 args: Dict[str, Any] = None, +1084 verbose: bool = False, +1085 assert_result_is_not_none: bool = True, +1086 cleanup: bool = True, +1087 timeout: dt.timedelta = None, +1088) -> Any: +1089 return _client.run_script( +1090 path=path, +1091 args=args, +1092 verbose=verbose, +1093 assert_result_is_not_none=assert_result_is_not_none, +1094 cleanup=cleanup, +1095 timeout=timeout, +1096 ) +
1099@init_global_client +1100def get_id_token(audience: str) -> str: +1101 """ +1102 Get a JWT token for the given audience for OIDC purposes to login into third parties like AWS, Vault, GCP, etc. +1103 """ +1104 return _client.get_id_token(audience) +
Get a JWT token for the given audience for OIDC purposes to login into third parties like AWS, Vault, GCP, etc.
+1119@init_global_client +1120def duckdb_connection_settings(s3_resource_path: str = "") -> DuckDbConnectionSettings: +1121 """ +1122 Convenient helpers that takes an S3 resource as input and returns the settings necessary to +1123 initiate an S3 connection from DuckDB +1124 """ +1125 return _client.get_duckdb_connection_settings(s3_resource_path) +
Convenient helpers that takes an S3 resource as input and returns the settings necessary to +initiate an S3 connection from DuckDB
+1128@init_global_client +1129def polars_connection_settings(s3_resource_path: str = "") -> PolarsConnectionSettings: +1130 """ +1131 Convenient helpers that takes an S3 resource as input and returns the settings necessary to +1132 initiate an S3 connection from Polars +1133 """ +1134 return _client.get_polars_connection_settings(s3_resource_path) +
Convenient helpers that takes an S3 resource as input and returns the settings necessary to +initiate an S3 connection from Polars
+1137@init_global_client +1138def boto3_connection_settings(s3_resource_path: str = "") -> Boto3ConnectionSettings: +1139 """ +1140 Convenient helpers that takes an S3 resource as input and returns the settings necessary to +1141 initiate an S3 connection using boto3 +1142 """ +1143 return _client.get_boto3_connection_settings(s3_resource_path) +
Convenient helpers that takes an S3 resource as input and returns the settings necessary to +initiate an S3 connection using boto3
+1146@init_global_client +1147def load_s3_file(s3object: S3Object | str, s3_resource_path: str | None = None) -> bytes: +1148 """ +1149 Load the entire content of a file stored in S3 as bytes +1150 """ +1151 return _client.load_s3_file( +1152 s3object, s3_resource_path if s3_resource_path != "" else None +1153 ) +
Load the entire content of a file stored in S3 as bytes
+1156@init_global_client +1157def load_s3_file_reader( +1158 s3object: S3Object | str, s3_resource_path: str | None = None +1159) -> BufferedReader: +1160 """ +1161 Load the content of a file stored in S3 +1162 """ +1163 return _client.load_s3_file_reader( +1164 s3object, s3_resource_path if s3_resource_path != "" else None +1165 ) +
Load the content of a file stored in S3
+1168@init_global_client +1169def write_s3_file( +1170 s3object: S3Object | str | None, +1171 file_content: BufferedReader | bytes, +1172 s3_resource_path: str | None = None, +1173 content_type: str | None = None, +1174 content_disposition: str | None = None, +1175) -> S3Object: +1176 """ +1177 Upload a file to S3 +1178 +1179 Content type will be automatically guessed from path extension if left empty +1180 +1181 See MDN for content_disposition: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition +1182 and content_type: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type +1183 +1184 """ +1185 return _client.write_s3_file( +1186 s3object, +1187 file_content, +1188 s3_resource_path if s3_resource_path != "" else None, +1189 content_type, +1190 content_disposition, +1191 ) +
Upload a file to S3
+ +Content type will be automatically guessed from path extension if left empty
+ +See MDN for content_disposition: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition +and content_type: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type
+1194@init_global_client +1195def sign_s3_objects(s3_objects: list[S3Object | str]) -> list[S3Object]: +1196 """ +1197 Sign S3 objects to be used by anonymous users in public apps +1198 Returns a list of signed s3 tokens +1199 """ +1200 return _client.sign_s3_objects(s3_objects) +
Sign S3 objects to be used by anonymous users in public apps +Returns a list of signed s3 tokens
+1203@init_global_client +1204def sign_s3_object(s3_object: S3Object| str) -> S3Object: +1205 """ +1206 Sign S3 object to be used by anonymous users in public apps +1207 Returns a signed s3 object +1208 """ +1209 return _client.sign_s3_object(s3_object) +
Sign S3 object to be used by anonymous users in public apps +Returns a signed s3 object
+1212@init_global_client +1213def whoami() -> dict: +1214 """ +1215 Returns the current user +1216 """ +1217 return _client.user +
Returns the current user
+1220@init_global_client +1221@deprecate("Windmill().state") +1222def get_state() -> Any: +1223 """ +1224 Get the state +1225 """ +1226 return _client.state +
Get the state
+1229@init_global_client +1230def get_resource( +1231 path: str, +1232 none_if_undefined: bool = False, +1233) -> dict | None: +1234 """Get resource from Windmill""" +1235 return _client.get_resource(path, none_if_undefined) +
Get resource from Windmill
+1238@init_global_client +1239def set_resource(path: str, value: Any, resource_type: str = "any") -> None: +1240 """ +1241 Set the resource at a given path as a string, creating it if it does not exist +1242 """ +1243 return _client.set_resource(value=value, path=path, resource_type=resource_type) +
Set the resource at a given path as a string, creating it if it does not exist
+1246@init_global_client +1247def set_state(value: Any) -> None: +1248 """ +1249 Set the state +1250 """ +1251 return _client.set_state(value) +
Set the state
+1254@init_global_client +1255def set_progress(value: int, job_id: Optional[str] = None) -> None: +1256 """ +1257 Set the progress +1258 """ +1259 return _client.set_progress(value, job_id) +
Set the progress
+1262@init_global_client +1263def get_progress(job_id: Optional[str] = None) -> Any: +1264 """ +1265 Get the progress +1266 """ +1267 return _client.get_progress(job_id) +
Get the progress
+1299@init_global_client +1300def get_variable(path: str) -> str: +1301 """ +1302 Returns the variable at a given path as a string +1303 """ +1304 return _client.get_variable(path) +
Returns the variable at a given path as a string
+1307@init_global_client +1308def set_variable(path: str, value: str, is_secret: bool = False) -> None: +1309 """ +1310 Set the variable at a given path as a string, creating it if it does not exist +1311 """ +1312 return _client.set_variable(path, value, is_secret) +
Set the variable at a given path as a string, creating it if it does not exist
+1315@init_global_client +1316def get_flow_user_state(key: str) -> Any: +1317 """ +1318 Get the user state of a flow at a given key +1319 """ +1320 return _client.get_flow_user_state(key) +
Get the user state of a flow at a given key
+1323@init_global_client +1324def set_flow_user_state(key: str, value: Any) -> None: +1325 """ +1326 Set the user state of a flow at a given key +1327 """ +1328 return _client.set_flow_user_state(key, value) +
Set the user state of a flow at a given key
+1341@init_global_client +1342def request_interactive_slack_approval( +1343 slack_resource_path: str, +1344 channel_id: str, +1345 message: str = None, +1346 approver: str = None, +1347 default_args_json: dict = None, +1348 dynamic_enums_json: dict = None, +1349) -> None: +1350 return _client.request_interactive_slack_approval( +1351 slack_resource_path=slack_resource_path, +1352 channel_id=channel_id, +1353 message=message, +1354 approver=approver, +1355 default_args_json=default_args_json, +1356 dynamic_enums_json=dynamic_enums_json, +1357 ) +
1367@init_global_client +1368def cancel_running() -> dict: +1369 """Cancel currently running executions of the same script.""" +1370 return _client.cancel_running() +
Cancel currently running executions of the same script.
+1373@init_global_client +1374def run_script( +1375 path: str = None, +1376 hash_: str = None, +1377 args: dict = None, +1378 timeout: dt.timedelta | int | float = None, +1379 verbose: bool = False, +1380 cleanup: bool = True, +1381 assert_result_is_not_none: bool = True, +1382) -> Any: +1383 """Run script synchronously and return its result. +1384 +1385 .. deprecated:: Use run_script_by_path or run_script_by_hash instead. +1386 """ +1387 return _client.run_script( +1388 path=path, +1389 hash_=hash_, +1390 args=args, +1391 verbose=verbose, +1392 assert_result_is_not_none=assert_result_is_not_none, +1393 cleanup=cleanup, +1394 timeout=timeout, +1395 ) +
Run script synchronously and return its result.
+ +Deprecated since version Use run_script_by_path or run_script_by_hash instead..
+1398@init_global_client +1399def run_script_by_path( +1400 path: str, +1401 args: dict = None, +1402 timeout: dt.timedelta | int | float = None, +1403 verbose: bool = False, +1404 cleanup: bool = True, +1405 assert_result_is_not_none: bool = True, +1406) -> Any: +1407 """Run script by path synchronously and return its result.""" +1408 return _client.run_script_by_path( +1409 path=path, +1410 args=args, +1411 verbose=verbose, +1412 assert_result_is_not_none=assert_result_is_not_none, +1413 cleanup=cleanup, +1414 timeout=timeout, +1415 ) +
Run script by path synchronously and return its result.
+1418@init_global_client +1419def run_script_by_hash( +1420 hash_: str, +1421 args: dict = None, +1422 timeout: dt.timedelta | int | float = None, +1423 verbose: bool = False, +1424 cleanup: bool = True, +1425 assert_result_is_not_none: bool = True, +1426) -> Any: +1427 """Run script by hash synchronously and return its result.""" +1428 return _client.run_script_by_hash( +1429 hash_=hash_, +1430 args=args, +1431 verbose=verbose, +1432 assert_result_is_not_none=assert_result_is_not_none, +1433 cleanup=cleanup, +1434 timeout=timeout, +1435 ) +
Run script by hash synchronously and return its result.
+1438@init_global_client +1439def username_to_email(username: str) -> str: +1440 """ +1441 Get email from workspace username +1442 This method is particularly useful for apps that require the email address of the viewer. +1443 Indeed, in the viewer context WM_USERNAME is set to the username of the viewer but WM_EMAIL is set to the email of the creator of the app. +1444 """ +1445 return _client.username_to_email(username) +
Get email from workspace username +This method is particularly useful for apps that require the email address of the viewer. +Indeed, in the viewer context WM_USERNAME is set to the username of the viewer but WM_EMAIL is set to the email of the creator of the app.
+1448def task(*args, **kwargs): +1449 from inspect import signature +1450 +1451 def f(func, tag: str | None = None): +1452 if ( +1453 os.environ.get("WM_JOB_ID") is None +1454 or os.environ.get("MAIN_OVERRIDE") == func.__name__ +1455 ): +1456 +1457 def inner(*args, **kwargs): +1458 return func(*args, **kwargs) +1459 +1460 return inner +1461 else: +1462 +1463 def inner(*args, **kwargs): +1464 global _client +1465 if _client is None: +1466 _client = Windmill() +1467 w_id = os.environ.get("WM_WORKSPACE") +1468 job_id = os.environ.get("WM_JOB_ID") +1469 f_name = func.__name__ +1470 json = kwargs +1471 params = list(signature(func).parameters) +1472 for i, arg in enumerate(args): +1473 if i < len(params): +1474 p = params[i] +1475 key = p +1476 if key not in kwargs: +1477 json[key] = arg +1478 +1479 params = {} +1480 if tag is not None: +1481 params["tag"] = tag +1482 w_as_code_response = _client.post( +1483 f"/w/{w_id}/jobs/run/workflow_as_code/{job_id}/{f_name}", +1484 json={"args": json}, +1485 params=params, +1486 ) +1487 job_id = w_as_code_response.text +1488 print(f"Executing task {func.__name__} on job {job_id}") +1489 job_result = _client.wait_job(job_id) +1490 print(f"Task {func.__name__} ({job_id}) completed") +1491 return job_result +1492 +1493 return inner +1494 +1495 if len(args) == 1 and len(kwargs) == 0 and callable(args[0]): +1496 return f(args[0], None) +1497 else: +1498 return lambda x: f(x, kwargs.get("tag")) +
1500def parse_resource_syntax(s: str) -> Optional[str]: +1501 """Parse resource syntax from string.""" +1502 if s is None: +1503 return None +1504 if s.startswith("$res:"): +1505 return s[5:] +1506 if s.startswith("res://"): +1507 return s[6:] +1508 return None +
Parse resource syntax from string.
+1510def parse_s3_object(s3_object: S3Object | str) -> S3Object: +1511 """Parse S3 object from string or S3Object format.""" +1512 if isinstance(s3_object, str): +1513 match = re.match(r'^s3://([^/]*)/(.*)$', s3_object) +1514 if match: +1515 return S3Object(s3=match.group(2) or "", storage=match.group(1) or None) +1516 return S3Object(s3="") +1517 else: +1518 return s3_object +
Parse S3 object from string or S3Object format.
+1522def parse_variable_syntax(s: str) -> Optional[str]: +1523 """Parse variable syntax from string.""" +1524 if s.startswith("var://"): +1525 return s[6:] +1526 return None +
Parse variable syntax from string.
+1529def append_to_result_stream(text: str) -> None: +1530 """Append a text to the result stream. +1531 +1532 Args: +1533 text: text to append to the result stream +1534 """ +1535 print("WM_STREAM: {}".format(text.replace(chr(10), '\\n'))) +
Append a text to the result stream.
+ +Args: + text: text to append to the result stream
+1537def stream_result(stream) -> None: +1538 """Stream to the result stream. +1539 +1540 Args: +1541 stream: stream to stream to the result stream +1542 """ +1543 for text in stream: +1544 append_to_result_stream(text) +
Stream to the result stream.
+ +Args: + stream: stream to stream to the result stream
+1from io import BufferedReader, BytesIO + 2from typing import Optional, Union + 3 + 4import httpx + 5 + 6 + 7class S3BufferedReader(BufferedReader): + 8 def __init__(self, workspace: str, windmill_client: httpx.Client, file_key: str, s3_resource_path: Optional[str], storage: Optional[str]): + 9 params = { +10 "file_key": file_key, +11 } +12 if s3_resource_path is not None: +13 params["s3_resource_path"] = s3_resource_path +14 if storage is not None: +15 params["storage"] = storage +16 self._context_manager = windmill_client.stream( +17 "GET", +18 f"/w/{workspace}/job_helpers/download_s3_file", +19 params=params, +20 timeout=None, +21 ) +22 +23 def __enter__(self): +24 reader = self._context_manager.__enter__() +25 if reader.status_code >= 400: +26 error_bytes = reader.read() +27 try: +28 error_text = error_bytes.decode('utf-8') +29 except UnicodeDecodeError: +30 error_text = str(error_bytes) +31 raise httpx.HTTPStatusError( +32 f"Failed to load S3 file: {reader.status_code} {reader.reason_phrase} - {error_text}", +33 request=reader.request, +34 response=reader +35 ) +36 self._iterator = reader.iter_bytes() +37 return self +38 +39 def peek(self, size=0): +40 raise Exception("Not implemented, use read() instead") +41 +42 def read(self, size=-1): +43 read_result = [] +44 if size < 0: +45 for b in self._iterator: +46 read_result.append(b) +47 else: +48 for i in range(size): +49 try: +50 b = self._iterator.__next__() +51 except StopIteration: +52 break +53 read_result.append(b) +54 +55 return b"".join(read_result) +56 +57 def read1(self, size=-1): +58 return self.read(size) +59 +60 def __exit__(self, *args): +61 self._context_manager.__exit__(*args) +62 +63 +64def bytes_generator(buffered_reader: Union[BufferedReader, BytesIO]): +65 while True: +66 byte = buffered_reader.read(50 * 1024) +67 if not byte: +68 break +69 yield byte +
8class S3BufferedReader(BufferedReader): + 9 def __init__(self, workspace: str, windmill_client: httpx.Client, file_key: str, s3_resource_path: Optional[str], storage: Optional[str]): +10 params = { +11 "file_key": file_key, +12 } +13 if s3_resource_path is not None: +14 params["s3_resource_path"] = s3_resource_path +15 if storage is not None: +16 params["storage"] = storage +17 self._context_manager = windmill_client.stream( +18 "GET", +19 f"/w/{workspace}/job_helpers/download_s3_file", +20 params=params, +21 timeout=None, +22 ) +23 +24 def __enter__(self): +25 reader = self._context_manager.__enter__() +26 if reader.status_code >= 400: +27 error_bytes = reader.read() +28 try: +29 error_text = error_bytes.decode('utf-8') +30 except UnicodeDecodeError: +31 error_text = str(error_bytes) +32 raise httpx.HTTPStatusError( +33 f"Failed to load S3 file: {reader.status_code} {reader.reason_phrase} - {error_text}", +34 request=reader.request, +35 response=reader +36 ) +37 self._iterator = reader.iter_bytes() +38 return self +39 +40 def peek(self, size=0): +41 raise Exception("Not implemented, use read() instead") +42 +43 def read(self, size=-1): +44 read_result = [] +45 if size < 0: +46 for b in self._iterator: +47 read_result.append(b) +48 else: +49 for i in range(size): +50 try: +51 b = self._iterator.__next__() +52 except StopIteration: +53 break +54 read_result.append(b) +55 +56 return b"".join(read_result) +57 +58 def read1(self, size=-1): +59 return self.read(size) +60 +61 def __exit__(self, *args): +62 self._context_manager.__exit__(*args) +
Create a new buffered reader using the given readable raw IO object.
+9 def __init__(self, workspace: str, windmill_client: httpx.Client, file_key: str, s3_resource_path: Optional[str], storage: Optional[str]): +10 params = { +11 "file_key": file_key, +12 } +13 if s3_resource_path is not None: +14 params["s3_resource_path"] = s3_resource_path +15 if storage is not None: +16 params["storage"] = storage +17 self._context_manager = windmill_client.stream( +18 "GET", +19 f"/w/{workspace}/job_helpers/download_s3_file", +20 params=params, +21 timeout=None, +22 ) +
43 def read(self, size=-1): +44 read_result = [] +45 if size < 0: +46 for b in self._iterator: +47 read_result.append(b) +48 else: +49 for i in range(size): +50 try: +51 b = self._iterator.__next__() +52 except StopIteration: +53 break +54 read_result.append(b) +55 +56 return b"".join(read_result) +
Read and return up to n bytes.
+ +If the argument is omitted, None, or negative, reads and +returns all data until EOF.
+ +If the argument is positive, and the underlying raw stream is +not 'interactive', multiple raw reads may be issued to satisfy +the byte count (unless EOF is reached first). But for +interactive raw streams (as well as sockets and pipes), at most +one raw read will be issued, and a short result does not imply +that EOF is imminent.
+ +Returns an empty bytes object on EOF.
+ +Returns None if the underlying raw stream was open in non-blocking +mode and no data is available at the moment.
+1from typing import Optional + 2 + 3 + 4class S3Object(dict): + 5 s3: str + 6 storage: Optional[str] + 7 presigned: Optional[str] + 8 + 9 def __getattr__(self, attr): +10 return self[attr] +11 +12 +13class S3FsClientKwargs(dict): +14 region_name: str +15 +16 def __getattr__(self, attr): +17 return self[attr] +18 +19 +20class S3FsArgs(dict): +21 endpoint_url: str +22 key: str +23 secret: str +24 use_ssl: bool +25 cache_regions: bool +26 client_kwargs: S3FsClientKwargs +27 +28 def __getattr__(self, attr): +29 return self[attr] +30 +31 +32class StorageOptions(dict): +33 aws_endpoint_url: str +34 aws_access_key_id: str +35 aws_secret_access_key: str +36 aws_region: str +37 aws_allow_http: str +38 +39 def __getattr__(self, attr): +40 return self[attr] +41 +42 +43class PolarsConnectionSettings(dict): +44 s3fs_args: S3FsArgs +45 storage_options: StorageOptions +46 +47 def __getattr__(self, attr): +48 return self[attr] +49 +50 +51class Boto3ConnectionSettings(dict): +52 endpoint_url: str +53 region_name: str +54 use_ssl: bool +55 aws_access_key_id: str +56 aws_secret_access_key: str +57 +58 def __getattr__(self, attr): +59 return self[attr] +60 +61 +62class DuckDbConnectionSettings(dict): +63 connection_settings_str: str +64 +65 def __getattr__(self, attr): +66 return self[attr] +
21class S3FsArgs(dict): +22 endpoint_url: str +23 key: str +24 secret: str +25 use_ssl: bool +26 cache_regions: bool +27 client_kwargs: S3FsClientKwargs +28 +29 def __getattr__(self, attr): +30 return self[attr] +
44class PolarsConnectionSettings(dict): +45 s3fs_args: S3FsArgs +46 storage_options: StorageOptions +47 +48 def __getattr__(self, attr): +49 return self[attr] +