diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock
index e738178..2325ad1 100644
--- a/.speakeasy/gen.lock
+++ b/.speakeasy/gen.lock
@@ -1,19 +1,19 @@
lockVersion: 2.0.0
id: 140336b3-3873-4a19-9c47-b02749d85f10
management:
- docChecksum: 718da4b24d641bff11e94957ac4e712f
+ docChecksum: 7252c34872b0eda15d79d9b5b45cfd08
docVersion: 1.0.0
speakeasyVersion: 1.795.0
generationVersion: 2.931.0
- releaseVersion: 1.1.0
- configChecksum: 5427e5fec73194e3cdff8d74ad4b530d
+ releaseVersion: 1.1.1
+ configChecksum: da9c41259f065571dbca9e160ca55b24
repoURL: https://github.com/TextQLLabs/textql-python-v3.git
installationURL: https://github.com/TextQLLabs/textql-python-v3.git
published: true
persistentEdits:
- generation_id: bd7bb060-db0b-461f-a85a-38b2c0a8a4a5
- pristine_commit_hash: 0c6cd567686a60eb1191c5eebafabcaca5637da2
- pristine_tree_hash: 49398965ef5492a34b31a3896d9cd2f535a3f7e6
+ generation_id: 649d3d47-a01f-4607-8df4-1607b899e028
+ pristine_commit_hash: 874a78409e87749cf033a976f14482d7feb73603
+ pristine_tree_hash: 8987210c8bd4f613d35302860ecd0ce78c04619e
features:
python:
additionalDependencies: 1.1.0
@@ -3589,6 +3589,14 @@ trackedFiles:
id: b9b02f35e63d
last_write_checksum: sha1:9306121c9c64aa2a4d77a80c224a6bf4a14425e8
pristine_git_object: 7be8b68a66ec9995395aeb550fec17a55d40bf77
+ docs/models/sandboxqueryserviceexecutebashrequest.md:
+ id: 5079169d8ff3
+ last_write_checksum: sha1:f7cbef55fceb0763670b20c519eeebec4c946b44
+ pristine_git_object: 82367ea4b1ffed7ea72fd37761996fa81ac3b36d
+ docs/models/sandboxqueryserviceexecutebashresponse.md:
+ id: c7dba30f50b8
+ last_write_checksum: sha1:d654460665806a80ffb734d39c63e002b1de2f4d
+ pristine_git_object: 43901c7d4203bad3c2053536ea33a7b917b9fe69
docs/models/sandboxqueryserviceexecutequeryrequest.md:
id: 7903408b0c68
last_write_checksum: sha1:8d8695dcb84343d1f861c2af271766dd1a1025a3
@@ -4091,8 +4099,8 @@ trackedFiles:
pristine_git_object: 0d967cf3d0de25fc43e79dd295df8912e31aebc5
docs/models/textqlrpcauthorganization.md:
id: 9cd100fd12d1
- last_write_checksum: sha1:d72fc529c9931e712ab29554e504c49d5d0673be
- pristine_git_object: 9389bcd7c7abca73315a0f0e3a543ff9f805b120
+ last_write_checksum: sha1:7ab7ff8a1040e58c9df3ad4703f9368751afa869
+ pristine_git_object: 64e491b8690f51e948ccc6ea67b0f2eac6fc6789
docs/models/textqlrpcauththeme.md:
id: c153ce9ddfc8
last_write_checksum: sha1:9c3534b8fd1a9ffc26ba2429f11906897911d51f
@@ -9149,6 +9157,14 @@ trackedFiles:
id: 126840c53669
last_write_checksum: sha1:36c44ddcd2a9f69699dde6e87897cf4f65fb89de
pristine_git_object: d1c3048ddb0346555e5b0538a1dd8e774fed75da
+ docs/models/textqlrpcpublicsandboxquerysandboxexecutebashrequest.md:
+ id: da0939b82a65
+ last_write_checksum: sha1:76038e5428f31230f85a1d39ccf7cc64a4528854
+ pristine_git_object: 0291a8b5aa588f0d670e6d7a82604536419e3e7f
+ docs/models/textqlrpcpublicsandboxquerysandboxexecutebashresponse.md:
+ id: 58ab68cb9abf
+ last_write_checksum: sha1:90110f44dbe1a24a2f5391c14a2df54cd51e7497
+ pristine_git_object: bc45ed6f0834126e8205fa0cdd355ad37ec28dd4
docs/models/textqlrpcpublicsandboxquerysandboxexecutequeryrequest.md:
id: 1f5c305f446c
last_write_checksum: sha1:2df5ef98b70eb7f807dd2441bc06720b8edc95ca
@@ -9711,8 +9727,8 @@ trackedFiles:
pristine_git_object: 1db0ae8091d48ee06ac8a84e85084ad93c82ae2e
docs/sdks/sandbox/README.md:
id: 16b3b8b0e152
- last_write_checksum: sha1:84e57fa88913c0327010f7b4d929e47c2b5fc9d4
- pristine_git_object: d975fbb341ff2de5d8899f9cd915f9f90e0aa281
+ last_write_checksum: sha1:45a06f1590059bad6a4cb19925235a399730e4c7
+ pristine_git_object: d8d70a3315ff46df14d1520eda1d68126873939d
docs/sdks/sandboxadmin/README.md:
id: a02e1dc13020
last_write_checksum: sha1:47be0b366c5791a03c2784dbab44aaa834c71e09
@@ -9755,8 +9771,8 @@ trackedFiles:
pristine_git_object: d45dd3dfed8f57c8dde47774f645a4eb9575ba90
pyproject.toml:
id: 5d07e7d72637
- last_write_checksum: sha1:4e32c698c5af0021b8591394541e8e4282afb98e
- pristine_git_object: d9fa07b1a5f0cb91cd74738c8d57118596b001cf
+ last_write_checksum: sha1:510712b768cc716d79a21f5de81ae9775226c0f1
+ pristine_git_object: 0e77225d46f9f376e4111b60faac92b105458655
scripts/prepare_readme.py:
id: e0c5957a6035
last_write_checksum: sha1:d5a0f1ce09f7b890340fdb6f26345fce7dc9a70d
@@ -9783,8 +9799,8 @@ trackedFiles:
pristine_git_object: a9e63d694ae036ae9a43efc262dd124a2e1062e7
src/textql_sdk/_version.py:
id: "226928447e58"
- last_write_checksum: sha1:235bfcbe71dbab27737d950ceb4e08420633a877
- pristine_git_object: 871fa23431db456bb911d8d5de44cc952f3c3a95
+ last_write_checksum: sha1:e9250c1815a6ba6ee3e64c0dda84636828d32331
+ pristine_git_object: d74056e980004c50851d09586b53346e77fd67ca
src/textql_sdk/agents.py:
id: 4ff492529583
last_write_checksum: sha1:8a4e32311f74147bc4e282a193bc0131d91d3fda
@@ -9851,8 +9867,8 @@ trackedFiles:
pristine_git_object: f5227a747725a68f1c9b6ebffe42ac0d2436f77f
src/textql_sdk/models/__init__.py:
id: c8cef98ef3e7
- last_write_checksum: sha1:66d455ebf2408adb33fb8b5724e6f60b09560a29
- pristine_git_object: 142d9a73b1461b77eb4e243f16e5896980ff5b4d
+ last_write_checksum: sha1:986c037c725c80c880f2bbcc359383f144d20efc
+ pristine_git_object: e5dc83ba7260cc35b982cd2bc0307d7b74040fac
src/textql_sdk/models/agentservice_createagentop.py:
id: c31d4c4b52ae
last_write_checksum: sha1:eb9ab95a772110d0f587963a73ff3ab4a6f11859
@@ -11301,6 +11317,10 @@ trackedFiles:
id: 14625ba22540
last_write_checksum: sha1:9b4cdc52b390954b07bc6c313929857f63086852
pristine_git_object: fe97ddf88c33683adf658e8bebc109bc47e03030
+ src/textql_sdk/models/sandboxqueryservice_executebashop.py:
+ id: ceb0c37e4704
+ last_write_checksum: sha1:15d08703f04d4a661e627d55ef908f88cbe59309
+ pristine_git_object: 42aa799d826ba429693421b190808699998225c4
src/textql_sdk/models/sandboxqueryservice_executequeryop.py:
id: 85ae72dc7c73
last_write_checksum: sha1:6c5ad536a0d904049d453262ff1d8007e0ed4264
@@ -11503,8 +11523,8 @@ trackedFiles:
pristine_git_object: 0c950c11ad05677515be17314becde169bb90f8d
src/textql_sdk/models/textql_rpc_auth_organization.py:
id: 9c2612c7ac65
- last_write_checksum: sha1:13032ec5e476b5387ea6abafef44326eaad53278
- pristine_git_object: 764a9fc5acb15e286e85c36825241f71048f9e71
+ last_write_checksum: sha1:6d03efba25aa914bb754a74c29aa0337f68dc540
+ pristine_git_object: ab6feb4c2e02284a9c30898be2339daf0bac64d8
src/textql_sdk/models/textql_rpc_auth_theme.py:
id: d84272c6a772
last_write_checksum: sha1:5be5b7e34adc57a56a7f3025aea933123e58e378
@@ -16053,6 +16073,14 @@ trackedFiles:
id: 9525a1d6bb96
last_write_checksum: sha1:6f37378f82df9a786dddb85d916e4bf1f66f3d41
pristine_git_object: 0ba99515e1299cf561ecad3be1a2eac14e2e1fc1
+ src/textql_sdk/models/textql_rpc_public_sandbox_query_sandboxexecutebashrequest.py:
+ id: 243b48dcb4fb
+ last_write_checksum: sha1:a9dea28891d968fc113b78d3528d64f9ab41761b
+ pristine_git_object: f6ee680816005632e582571e427c5d8046d09475
+ src/textql_sdk/models/textql_rpc_public_sandbox_query_sandboxexecutebashresponse.py:
+ id: 598edaa3f2d7
+ last_write_checksum: sha1:4e2db7e40cc8b2b61b6e10dacec38b4ebffccf0a
+ pristine_git_object: 5ce6a3cea3127aadf9c0faa995c0ed06f0da2949
src/textql_sdk/models/textql_rpc_public_sandbox_query_sandboxexecutequeryrequest.py:
id: d16ca80a3a69
last_write_checksum: sha1:1866f8908cb9b1b2c79038b24c83871899658832
@@ -16467,8 +16495,8 @@ trackedFiles:
pristine_git_object: bd26a14eaea7d3dc301b4a471de43db5b08bc3af
src/textql_sdk/sandbox.py:
id: 14dbbbbb7c86
- last_write_checksum: sha1:6d99b030433d76d1edfff756dc05ecacf6ee8037
- pristine_git_object: 4874b00283715edcff53cc7d242d029554c08b3d
+ last_write_checksum: sha1:6a93eebb67056a8c838601422c12ebd2f58cc254
+ pristine_git_object: accb135a09dee4e0e329fdf06fba43edbe1cd82e
src/textql_sdk/sandboxadmin.py:
id: 9098d183635f
last_write_checksum: sha1:65d7511173af7341eb2c1e44568045165e6c543f
@@ -27502,5 +27530,19 @@ examples:
application/json: {"organization": {"createdAt": "2023-01-15T01:30:15.01Z", "updatedAt": "2023-01-15T01:30:15.01Z"}}
default:
application/json: {"code": "not_found"}
+ SandboxQueryService_ExecuteBash:
+ speakeasy-default-sandbox-query-service-execute-bash:
+ parameters:
+ header:
+ Connect-Protocol-Version: 1
+ requestBody:
+ application/json: {}
+ responses:
+ "200":
+ application/json: {}
+ default:
+ application/json: {"code": "not_found"}
examplesVersion: 1.0.2
-releaseNotes: "## Python SDK Changes:\n* `textql.mcp.get_servers()`: `response.mcp_servers[].mcp_server` **Changed**\n* `textql.mcp.upsert_mcp_servers()`: \n * `request.mcp_servers[]` **Changed**\n * `response.mcp_servers[].mcp_server` **Changed**\n"
+releaseNotes: |
+ ## Python SDK Changes:
+ * `textql.sandbox.execute_bash()`: **Added**
diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml
index 98a37ba..59f4c09 100644
--- a/.speakeasy/gen.yaml
+++ b/.speakeasy/gen.yaml
@@ -34,7 +34,7 @@ generation:
generateNewTests: true
skipResponseBodyAssertions: false
python:
- version: 1.1.0
+ version: 1.1.1
additionalDependencies:
dev:
types-protobuf: '>=6.31'
diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml
index cb712cf..eb8ee7b 100644
--- a/.speakeasy/out.openapi.yaml
+++ b/.speakeasy/out.openapi.yaml
@@ -13394,6 +13394,44 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/textql.rpc.public.sandbox_exec.SandboxLoadConnectorDataResponse'
+ /textql.rpc.public.sandbox_query.SandboxQueryService/ExecuteBash:
+ post:
+ tags:
+ - SandboxQueryService
+ summary: Runs in the caller's own worker; no connector/source scoping.
+ description: Runs in the caller's own worker; no connector/source scoping.
+ operationId: SandboxQueryService_ExecuteBash
+ x-speakeasy-group: sandbox
+ x-speakeasy-name-override: executeBash
+ parameters:
+ - name: Connect-Protocol-Version
+ in: header
+ required: true
+ schema:
+ $ref: '#/components/schemas/connect-protocol-version'
+ - name: Connect-Timeout-Ms
+ in: header
+ schema:
+ $ref: '#/components/schemas/connect-timeout-header'
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/textql.rpc.public.sandbox_query.SandboxExecuteBashRequest'
+ required: true
+ responses:
+ default:
+ description: Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/connect.error'
+ "200":
+ description: Success
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/textql.rpc.public.sandbox_query.SandboxExecuteBashResponse'
/textql.rpc.public.sandbox_query.SandboxQueryService/ExecuteQuery:
post:
tags:
@@ -15973,20 +16011,28 @@ components:
type: boolean
title: config_objects_enabled
description: |-
- config_objects feature_flags row: umbrella switch for all config-managed-object behavior — Ana's
- authoring tools, the export RPC + capabilities, reconcile takeover. Supersedes config_migrations_enabled (field 74).
+ config_objects feature_flags row: the umbrella half of the config-management predicate
+ (library.ConfigManagedOrg = this flag AND the org already having a Library — the flag
+ alone does not make an org config-managed). One switch for every object type and every
+ config-managed-object behavior — Ana's authoring tools, the export RPC + capabilities,
+ reconcile takeover, the lazy row-to-config migration. Supersedes
+ config_migrations_enabled (field 74).
nullable: true
configObjectsPlaybooksEnabled:
type: boolean
title: config_objects_playbooks_enabled
description: |-
- Per-type sub-toggles under config_objects: playbooks-as-files / dashboards-as-files.
- Effective only while config_objects_enabled is on; no feature_flags row means enabled.
+ Deprecated: never populated. config_objects_enabled (field 80) is the umbrella for every
+ object type — config management is one-way, so a per-type switch that cannot
+ un-migrate an object is either inert or actively harmful (ADR-0040). Retained only
+ because proto/api is additive-only.
nullable: true
+ deprecated: true
configObjectsDashboardsEnabled:
type: boolean
title: config_objects_dashboards_enabled
nullable: true
+ deprecated: true
configAutofixEnabled:
type: boolean
title: config_autofix_enabled
@@ -38208,6 +38254,56 @@ components:
description: library path to a .tql file
title: LibraryTQLTemplate
additionalProperties: false
+ textql.rpc.public.sandbox_query.SandboxExecuteBashRequest:
+ type: object
+ properties:
+ script:
+ type: string
+ title: script
+ env:
+ type: object
+ title: env
+ additionalProperties:
+ type: string
+ title: value
+ title: SandboxExecuteBashRequest
+ additionalProperties: false
+ textql.rpc.public.sandbox_query.SandboxExecuteBashRequest.EnvEntry:
+ type: object
+ properties:
+ key:
+ type: string
+ title: key
+ value:
+ type: string
+ title: value
+ title: EnvEntry
+ additionalProperties: false
+ textql.rpc.public.sandbox_query.SandboxExecuteBashResponse:
+ type: object
+ properties:
+ stdout:
+ type: string
+ title: stdout
+ format: byte
+ stderr:
+ type: string
+ title: stderr
+ format: byte
+ exitCode:
+ type: integer
+ title: exit_code
+ format: int32
+ error:
+ type: string
+ title: error
+ description: non-empty on execution-level failure (timeout, spawn error)
+ refreshedToken:
+ type: string
+ title: refreshed_token
+ nullable: true
+ title: SandboxExecuteBashResponse
+ additionalProperties: false
textql.rpc.public.sandbox_query.SandboxExecuteQueryRequest:
type: object
allOf:
diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock
index a5a1bd5..5601c44 100644
--- a/.speakeasy/workflow.lock
+++ b/.speakeasy/workflow.lock
@@ -2,8 +2,8 @@ speakeasyVersion: 1.795.0
sources:
TextQL API:
sourceNamespace: textql-api
- sourceRevisionDigest: sha256:d157354305b3985bb2f5779630c5514c9b722efb4991824852c1ee21e41e5f80
- sourceBlobDigest: sha256:5f86f9af8817f7113213d7d337c4cf0b0ef7053362f583dad601916eb9ffe2a4
+ sourceRevisionDigest: sha256:896f94386889ea862a6c5c9d15b530b069377483cb44f3d76a0963ba3cded091
+ sourceBlobDigest: sha256:0ff5134102f12c642678e4b9a485a750f5186bd9525a0088d0dde77dd4b757e5
tags:
- latest
- 1.0.0
@@ -11,10 +11,10 @@ targets:
textql:
source: TextQL API
sourceNamespace: textql-api
- sourceRevisionDigest: sha256:d157354305b3985bb2f5779630c5514c9b722efb4991824852c1ee21e41e5f80
- sourceBlobDigest: sha256:5f86f9af8817f7113213d7d337c4cf0b0ef7053362f583dad601916eb9ffe2a4
+ sourceRevisionDigest: sha256:896f94386889ea862a6c5c9d15b530b069377483cb44f3d76a0963ba3cded091
+ sourceBlobDigest: sha256:0ff5134102f12c642678e4b9a485a750f5186bd9525a0088d0dde77dd4b757e5
codeSamplesNamespace: textql-api-python-code-samples
- codeSamplesRevisionDigest: sha256:9298bc937f8b59e34b207da7bb4a98d73c4ec8dfa9e6eb29c4faedd62b124f86
+ codeSamplesRevisionDigest: sha256:5862462d3657b57533f4118971cb9f58dee0381c5fa969e693f7a4f7b463c91b
workflow:
workflowVersion: 1.0.0
speakeasyVersion: latest
diff --git a/README-PYPI.md b/README-PYPI.md
index a9b8009..72d3cc3 100644
--- a/README-PYPI.md
+++ b/README-PYPI.md
@@ -575,6 +575,7 @@ with Textql(
* [execute_code](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/sandbox/README.md#execute_code) - ExecuteCode
* [get_tool_availability](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/sandbox/README.md#get_tool_availability) - GetToolAvailability
* [load_connector_data](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/sandbox/README.md#load_connector_data) - LoadConnectorData
+* [execute_bash](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/sandbox/README.md#execute_bash) - Runs in the caller's own worker; no connector/source scoping.
* [execute_query](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/sandbox/README.md#execute_query) - ExecuteQuery
### [SandboxAdmin](https://github.com/TextQLLabs/textql-python-v3/blob/master/docs/sdks/sandboxadmin/README.md)
diff --git a/README.md b/README.md
index 7177eaf..01c02aa 100644
--- a/README.md
+++ b/README.md
@@ -575,6 +575,7 @@ with Textql(
* [execute_code](docs/sdks/sandbox/README.md#execute_code) - ExecuteCode
* [get_tool_availability](docs/sdks/sandbox/README.md#get_tool_availability) - GetToolAvailability
* [load_connector_data](docs/sdks/sandbox/README.md#load_connector_data) - LoadConnectorData
+* [execute_bash](docs/sdks/sandbox/README.md#execute_bash) - Runs in the caller's own worker; no connector/source scoping.
* [execute_query](docs/sdks/sandbox/README.md#execute_query) - ExecuteQuery
### [SandboxAdmin](docs/sdks/sandboxadmin/README.md)
diff --git a/RELEASES.md b/RELEASES.md
index 76bc4ea..1b54487 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -238,4 +238,14 @@ Based on:
### Generated
- [python v1.1.0] .
### Releases
-- [PyPI v1.1.0] https://pypi.org/project/textql-sdk/1.1.0 - .
\ No newline at end of file
+- [PyPI v1.1.0] https://pypi.org/project/textql-sdk/1.1.0 - .
+
+## 2026-08-20 01:01:06
+### Changes
+Based on:
+- OpenAPI Doc
+- Speakeasy CLI 1.795.0 (2.931.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.1.1] .
+### Releases
+- [PyPI v1.1.1] https://pypi.org/project/textql-sdk/1.1.1 - .
\ No newline at end of file
diff --git a/docs/models/sandboxqueryserviceexecutebashrequest.md b/docs/models/sandboxqueryserviceexecutebashrequest.md
new file mode 100644
index 0000000..82367ea
--- /dev/null
+++ b/docs/models/sandboxqueryserviceexecutebashrequest.md
@@ -0,0 +1,10 @@
+# SandboxQueryServiceExecuteBashRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| `connect_protocol_version` | *float* | :heavy_check_mark: | N/A |
+| `connect_timeout_ms` | *Optional[float]* | :heavy_minus_sign: | N/A |
+| `body` | [models.TextqlRPCPublicSandboxQuerySandboxExecuteBashRequest](../models/textqlrpcpublicsandboxquerysandboxexecutebashrequest.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/models/sandboxqueryserviceexecutebashresponse.md b/docs/models/sandboxqueryserviceexecutebashresponse.md
new file mode 100644
index 0000000..43901c7
--- /dev/null
+++ b/docs/models/sandboxqueryserviceexecutebashresponse.md
@@ -0,0 +1,17 @@
+# SandboxQueryServiceExecuteBashResponse
+
+
+## Supported Types
+
+### `models.TextqlRPCPublicSandboxQuerySandboxExecuteBashResponse`
+
+```python
+value: models.TextqlRPCPublicSandboxQuerySandboxExecuteBashResponse = /* values here */
+```
+
+### `models.ConnectError`
+
+```python
+value: models.ConnectError = /* values here */
+```
+
diff --git a/docs/models/textqlrpcauthorganization.md b/docs/models/textqlrpcauthorganization.md
index 9389bcd..64e491b 100644
--- a/docs/models/textqlrpcauthorganization.md
+++ b/docs/models/textqlrpcauthorganization.md
@@ -83,9 +83,9 @@
| `sandbox_observability_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | |
| `data_apps_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | Internal gate for the data apps feature (apps resource + html generative dashboards). | |
| `issues_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | |
-| `config_objects_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | config_objects feature_flags row: umbrella switch for all config-managed-object behavior — Ana's
authoring tools, the export RPC + capabilities, reconcile takeover. Supersedes config_migrations_enabled (field 74). | |
-| `config_objects_playbooks_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | Per-type sub-toggles under config_objects: playbooks-as-files / dashboards-as-files.
Effective only while config_objects_enabled is on; no feature_flags row means enabled. | |
-| `config_objects_dashboards_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | |
+| `config_objects_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | config_objects feature_flags row: the umbrella half of the config-management predicate
(library.ConfigManagedOrg = this flag AND the org already having a Library — the flag
alone does not make an org config-managed). One switch for every object type and every
config-managed-object behavior — Ana's authoring tools, the export RPC + capabilities,
reconcile takeover, the lazy row-to-config migration. Supersedes
config_migrations_enabled (field 74). | |
+| ~~`config_objects_playbooks_enabled`~~ | *OptionalNullable[bool]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.
Deprecated: never populated. config_objects_enabled (field 80) is the umbrella for every
object type — config management is one-way, so a per-type switch that cannot
un-migrate an object is either inert or actively harmful (ADR-0040). Retained only
because proto/api is additive-only. | |
+| ~~`config_objects_dashboards_enabled`~~ | *OptionalNullable[bool]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible. | |
| ~~`config_autofix_enabled`~~ | *OptionalNullable[bool]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.
Deprecated: never populated. The autofix sweep no longer has a per-org opt-in — it runs for
every org with the config-object checks surface on. Retained only because proto/api is additive-only. | |
| `helm_chart_version` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
| `spend_transparency_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | Internal flag: show dollar costs (spend transparency) across the product.
Only rendered for internal (@textql.com) users while pricing is verified. | |
diff --git a/docs/models/textqlrpcpublicsandboxquerysandboxexecutebashrequest.md b/docs/models/textqlrpcpublicsandboxquerysandboxexecutebashrequest.md
new file mode 100644
index 0000000..0291a8b
--- /dev/null
+++ b/docs/models/textqlrpcpublicsandboxquerysandboxexecutebashrequest.md
@@ -0,0 +1,9 @@
+# TextqlRPCPublicSandboxQuerySandboxExecuteBashRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `script` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `env` | Dict[str, *str*] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/models/textqlrpcpublicsandboxquerysandboxexecutebashresponse.md b/docs/models/textqlrpcpublicsandboxquerysandboxexecutebashresponse.md
new file mode 100644
index 0000000..bc45ed6
--- /dev/null
+++ b/docs/models/textqlrpcpublicsandboxquerysandboxexecutebashresponse.md
@@ -0,0 +1,12 @@
+# TextqlRPCPublicSandboxQuerySandboxExecuteBashResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- |
+| `stdout` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `stderr` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `exit_code` | *Optional[int]* | :heavy_minus_sign: | N/A |
+| `error` | *Optional[str]* | :heavy_minus_sign: | non-empty on execution-level failure (timeout, spawn error) |
+| `refreshed_token` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/sdks/sandbox/README.md b/docs/sdks/sandbox/README.md
index d975fbb..d8d70a3 100644
--- a/docs/sdks/sandbox/README.md
+++ b/docs/sdks/sandbox/README.md
@@ -9,6 +9,7 @@
* [execute_code](#execute_code) - ExecuteCode
* [get_tool_availability](#get_tool_availability) - GetToolAvailability
* [load_connector_data](#load_connector_data) - LoadConnectorData
+* [execute_bash](#execute_bash) - Runs in the caller's own worker; no connector/source scoping.
* [execute_query](#execute_query) - ExecuteQuery
## create
@@ -226,6 +227,48 @@ with Textql(
| ------------------------- | ------------------------- | ------------------------- |
| errors.TextqlDefaultError | 4XX, 5XX | \*/\* |
+## execute_bash
+
+Runs in the caller's own worker; no connector/source scoping.
+
+### Example Usage
+
+
+```python
+import os
+from textql_sdk import Textql
+
+
+with Textql(
+ api_key=os.getenv("TEXTQL_API_KEY", ""),
+) as textql:
+
+ res = textql.sandbox.execute_bash()
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- |
+| `connect_timeout_ms` | *Optional[float]* | :heavy_minus_sign: | N/A |
+| `script` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `env` | Dict[str, *str*] | :heavy_minus_sign: | N/A |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. |
+
+### Response
+
+**[models.SandboxQueryServiceExecuteBashResponse](../../models/sandboxqueryserviceexecutebashresponse.md)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ------------------------- | ------------------------- | ------------------------- |
+| errors.TextqlDefaultError | 4XX, 5XX | \*/\* |
+
## execute_query
ExecuteQuery
diff --git a/pyproject.toml b/pyproject.toml
index d9fa07b..0e77225 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "textql-sdk"
-version = "1.1.0"
+version = "1.1.1"
description = "Python Client SDK Generated by Speakeasy."
authors = [{ name = "Speakeasy" },]
readme = "README-PYPI.md"
diff --git a/src/textql_sdk/_version.py b/src/textql_sdk/_version.py
index 871fa23..d74056e 100644
--- a/src/textql_sdk/_version.py
+++ b/src/textql_sdk/_version.py
@@ -3,10 +3,10 @@
import importlib.metadata
__title__: str = "textql-sdk"
-__version__: str = "1.1.0"
+__version__: str = "1.1.1"
__openapi_doc_version__: str = "1.0.0"
__gen_version__: str = "2.931.0"
-__user_agent__: str = "speakeasy-sdk/python 1.1.0 2.931.0 1.0.0 textql-sdk"
+__user_agent__: str = "speakeasy-sdk/python 1.1.1 2.931.0 1.0.0 textql-sdk"
try:
if __package__ is not None:
diff --git a/src/textql_sdk/models/__init__.py b/src/textql_sdk/models/__init__.py
index 142d9a7..e5dc83b 100644
--- a/src/textql_sdk/models/__init__.py
+++ b/src/textql_sdk/models/__init__.py
@@ -2186,6 +2186,12 @@
SandboxExecServiceLoadConnectorDataResponse,
SandboxExecServiceLoadConnectorDataResponseTypedDict,
)
+ from .sandboxqueryservice_executebashop import (
+ SandboxQueryServiceExecuteBashRequest,
+ SandboxQueryServiceExecuteBashRequestTypedDict,
+ SandboxQueryServiceExecuteBashResponse,
+ SandboxQueryServiceExecuteBashResponseTypedDict,
+ )
from .sandboxqueryservice_executequeryop import (
SandboxQueryServiceExecuteQueryRequest,
SandboxQueryServiceExecuteQueryRequestTypedDict,
@@ -7562,6 +7568,14 @@
TextqlRPCPublicSandboxQueryLibraryTQLTemplate,
TextqlRPCPublicSandboxQueryLibraryTQLTemplateTypedDict,
)
+ from .textql_rpc_public_sandbox_query_sandboxexecutebashrequest import (
+ TextqlRPCPublicSandboxQuerySandboxExecuteBashRequest,
+ TextqlRPCPublicSandboxQuerySandboxExecuteBashRequestTypedDict,
+ )
+ from .textql_rpc_public_sandbox_query_sandboxexecutebashresponse import (
+ TextqlRPCPublicSandboxQuerySandboxExecuteBashResponse,
+ TextqlRPCPublicSandboxQuerySandboxExecuteBashResponseTypedDict,
+ )
from .textql_rpc_public_sandbox_query_sandboxexecutequeryrequest import (
AppDb,
AppDbTypedDict,
@@ -9739,6 +9753,10 @@
"SandboxExecServiceLoadConnectorDataRequestTypedDict",
"SandboxExecServiceLoadConnectorDataResponse",
"SandboxExecServiceLoadConnectorDataResponseTypedDict",
+ "SandboxQueryServiceExecuteBashRequest",
+ "SandboxQueryServiceExecuteBashRequestTypedDict",
+ "SandboxQueryServiceExecuteBashResponse",
+ "SandboxQueryServiceExecuteBashResponseTypedDict",
"SandboxQueryServiceExecuteQueryRequest",
"SandboxQueryServiceExecuteQueryRequestTypedDict",
"SandboxQueryServiceExecuteQueryResponse",
@@ -12445,6 +12463,10 @@
"TextqlRPCPublicSandboxQueryLibraryTQLTemplateTypedDict",
"TextqlRPCPublicSandboxQuerySQLQueryTemplate",
"TextqlRPCPublicSandboxQuerySQLQueryTemplateTypedDict",
+ "TextqlRPCPublicSandboxQuerySandboxExecuteBashRequest",
+ "TextqlRPCPublicSandboxQuerySandboxExecuteBashRequestTypedDict",
+ "TextqlRPCPublicSandboxQuerySandboxExecuteBashResponse",
+ "TextqlRPCPublicSandboxQuerySandboxExecuteBashResponseTypedDict",
"TextqlRPCPublicSandboxQuerySandboxExecuteQueryRequest",
"TextqlRPCPublicSandboxQuerySandboxExecuteQueryRequestLibraryTql",
"TextqlRPCPublicSandboxQuerySandboxExecuteQueryRequestLibraryTqlTypedDict",
@@ -14138,6 +14160,10 @@
"SandboxExecServiceLoadConnectorDataRequestTypedDict": ".sandboxexecservice_loadconnectordataop",
"SandboxExecServiceLoadConnectorDataResponse": ".sandboxexecservice_loadconnectordataop",
"SandboxExecServiceLoadConnectorDataResponseTypedDict": ".sandboxexecservice_loadconnectordataop",
+ "SandboxQueryServiceExecuteBashRequest": ".sandboxqueryservice_executebashop",
+ "SandboxQueryServiceExecuteBashRequestTypedDict": ".sandboxqueryservice_executebashop",
+ "SandboxQueryServiceExecuteBashResponse": ".sandboxqueryservice_executebashop",
+ "SandboxQueryServiceExecuteBashResponseTypedDict": ".sandboxqueryservice_executebashop",
"SandboxQueryServiceExecuteQueryRequest": ".sandboxqueryservice_executequeryop",
"SandboxQueryServiceExecuteQueryRequestTypedDict": ".sandboxqueryservice_executequeryop",
"SandboxQueryServiceExecuteQueryResponse": ".sandboxqueryservice_executequeryop",
@@ -17184,6 +17210,10 @@
"TextqlRPCPublicSandboxQueryAppDBTemplateTypedDict": ".textql_rpc_public_sandbox_query_appdbtemplate",
"TextqlRPCPublicSandboxQueryLibraryTQLTemplate": ".textql_rpc_public_sandbox_query_librarytqltemplate",
"TextqlRPCPublicSandboxQueryLibraryTQLTemplateTypedDict": ".textql_rpc_public_sandbox_query_librarytqltemplate",
+ "TextqlRPCPublicSandboxQuerySandboxExecuteBashRequest": ".textql_rpc_public_sandbox_query_sandboxexecutebashrequest",
+ "TextqlRPCPublicSandboxQuerySandboxExecuteBashRequestTypedDict": ".textql_rpc_public_sandbox_query_sandboxexecutebashrequest",
+ "TextqlRPCPublicSandboxQuerySandboxExecuteBashResponse": ".textql_rpc_public_sandbox_query_sandboxexecutebashresponse",
+ "TextqlRPCPublicSandboxQuerySandboxExecuteBashResponseTypedDict": ".textql_rpc_public_sandbox_query_sandboxexecutebashresponse",
"AppDb": ".textql_rpc_public_sandbox_query_sandboxexecutequeryrequest",
"AppDbTypedDict": ".textql_rpc_public_sandbox_query_sandboxexecutequeryrequest",
"TextqlRPCPublicSandboxQuerySandboxExecuteQueryRequest": ".textql_rpc_public_sandbox_query_sandboxexecutequeryrequest",
diff --git a/src/textql_sdk/models/sandboxqueryservice_executebashop.py b/src/textql_sdk/models/sandboxqueryservice_executebashop.py
new file mode 100644
index 0000000..42aa799
--- /dev/null
+++ b/src/textql_sdk/models/sandboxqueryservice_executebashop.py
@@ -0,0 +1,86 @@
+"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
+
+from __future__ import annotations
+from .connect_error import ConnectError, ConnectErrorTypedDict
+from .textql_rpc_public_sandbox_query_sandboxexecutebashrequest import (
+ TextqlRPCPublicSandboxQuerySandboxExecuteBashRequest,
+ TextqlRPCPublicSandboxQuerySandboxExecuteBashRequestTypedDict,
+)
+from .textql_rpc_public_sandbox_query_sandboxexecutebashresponse import (
+ TextqlRPCPublicSandboxQuerySandboxExecuteBashResponse,
+ TextqlRPCPublicSandboxQuerySandboxExecuteBashResponseTypedDict,
+)
+import pydantic
+from pydantic import model_serializer
+from pydantic.functional_validators import AfterValidator
+from textql_sdk.types import BaseModel, UNSET_SENTINEL
+from textql_sdk.utils import (
+ FieldMetadata,
+ HeaderMetadata,
+ RequestMetadata,
+ validate_const,
+)
+from typing import Optional, Union
+from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
+
+
+class SandboxQueryServiceExecuteBashRequestTypedDict(TypedDict):
+ body: TextqlRPCPublicSandboxQuerySandboxExecuteBashRequestTypedDict
+ connect_protocol_version: float
+ connect_timeout_ms: NotRequired[float]
+
+
+class SandboxQueryServiceExecuteBashRequest(BaseModel):
+ body: Annotated[
+ TextqlRPCPublicSandboxQuerySandboxExecuteBashRequest,
+ FieldMetadata(request=RequestMetadata(media_type="application/json")),
+ ]
+
+ connect_protocol_version: Annotated[
+ Annotated[float, AfterValidator(validate_const(1))],
+ pydantic.Field(alias="Connect-Protocol-Version"),
+ FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
+ ] = 1
+
+ connect_timeout_ms: Annotated[
+ Optional[float],
+ pydantic.Field(alias="Connect-Timeout-Ms"),
+ FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
+ ] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["Connect-Timeout-Ms"])
+ serialized = handler(self)
+ m = {}
+
+ for n, f in type(self).model_fields.items():
+ k = f.alias or n
+ val = serialized.get(k, serialized.get(n))
+
+ if val != UNSET_SENTINEL:
+ if val is not None or k not in optional_fields:
+ m[k] = val
+
+ return m
+
+
+SandboxQueryServiceExecuteBashResponseTypedDict = TypeAliasType(
+ "SandboxQueryServiceExecuteBashResponseTypedDict",
+ Union[
+ ConnectErrorTypedDict,
+ TextqlRPCPublicSandboxQuerySandboxExecuteBashResponseTypedDict,
+ ],
+)
+
+
+SandboxQueryServiceExecuteBashResponse = TypeAliasType(
+ "SandboxQueryServiceExecuteBashResponse",
+ Union[ConnectError, TextqlRPCPublicSandboxQuerySandboxExecuteBashResponse],
+)
+
+
+try:
+ SandboxQueryServiceExecuteBashRequest.model_rebuild()
+except NameError:
+ pass
diff --git a/src/textql_sdk/models/textql_rpc_auth_organization.py b/src/textql_sdk/models/textql_rpc_auth_organization.py
index 764a9fc..ab6feb4 100644
--- a/src/textql_sdk/models/textql_rpc_auth_organization.py
+++ b/src/textql_sdk/models/textql_rpc_auth_organization.py
@@ -300,12 +300,18 @@ class TextqlRPCAuthOrganizationTypedDict(TypedDict):
r"""Internal gate for the data apps feature (apps resource + html generative dashboards)."""
issues_enabled: NotRequired[Nullable[bool]]
config_objects_enabled: NotRequired[Nullable[bool]]
- r"""config_objects feature_flags row: umbrella switch for all config-managed-object behavior — Ana's
- authoring tools, the export RPC + capabilities, reconcile takeover. Supersedes config_migrations_enabled (field 74).
+ r"""config_objects feature_flags row: the umbrella half of the config-management predicate
+ (library.ConfigManagedOrg = this flag AND the org already having a Library — the flag
+ alone does not make an org config-managed). One switch for every object type and every
+ config-managed-object behavior — Ana's authoring tools, the export RPC + capabilities,
+ reconcile takeover, the lazy row-to-config migration. Supersedes
+ config_migrations_enabled (field 74).
"""
config_objects_playbooks_enabled: NotRequired[Nullable[bool]]
- r"""Per-type sub-toggles under config_objects: playbooks-as-files / dashboards-as-files.
- Effective only while config_objects_enabled is on; no feature_flags row means enabled.
+ r"""Deprecated: never populated. config_objects_enabled (field 80) is the umbrella for every
+ object type — config management is one-way, so a per-type switch that cannot
+ un-migrate an object is either inert or actively harmful (ADR-0040). Retained only
+ because proto/api is additive-only.
"""
config_objects_dashboards_enabled: NotRequired[Nullable[bool]]
config_autofix_enabled: NotRequired[Nullable[bool]]
@@ -831,19 +837,33 @@ class TextqlRPCAuthOrganization(BaseModel):
config_objects_enabled: Annotated[
OptionalNullable[bool], pydantic.Field(alias="configObjectsEnabled")
] = UNSET
- r"""config_objects feature_flags row: umbrella switch for all config-managed-object behavior — Ana's
- authoring tools, the export RPC + capabilities, reconcile takeover. Supersedes config_migrations_enabled (field 74).
+ r"""config_objects feature_flags row: the umbrella half of the config-management predicate
+ (library.ConfigManagedOrg = this flag AND the org already having a Library — the flag
+ alone does not make an org config-managed). One switch for every object type and every
+ config-managed-object behavior — Ana's authoring tools, the export RPC + capabilities,
+ reconcile takeover, the lazy row-to-config migration. Supersedes
+ config_migrations_enabled (field 74).
"""
config_objects_playbooks_enabled: Annotated[
- OptionalNullable[bool], pydantic.Field(alias="configObjectsPlaybooksEnabled")
+ OptionalNullable[bool],
+ pydantic.Field(
+ deprecated="warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible.",
+ alias="configObjectsPlaybooksEnabled",
+ ),
] = UNSET
- r"""Per-type sub-toggles under config_objects: playbooks-as-files / dashboards-as-files.
- Effective only while config_objects_enabled is on; no feature_flags row means enabled.
+ r"""Deprecated: never populated. config_objects_enabled (field 80) is the umbrella for every
+ object type — config management is one-way, so a per-type switch that cannot
+ un-migrate an object is either inert or actively harmful (ADR-0040). Retained only
+ because proto/api is additive-only.
"""
config_objects_dashboards_enabled: Annotated[
- OptionalNullable[bool], pydantic.Field(alias="configObjectsDashboardsEnabled")
+ OptionalNullable[bool],
+ pydantic.Field(
+ deprecated="warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible.",
+ alias="configObjectsDashboardsEnabled",
+ ),
] = UNSET
config_autofix_enabled: Annotated[
diff --git a/src/textql_sdk/models/textql_rpc_public_sandbox_query_sandboxexecutebashrequest.py b/src/textql_sdk/models/textql_rpc_public_sandbox_query_sandboxexecutebashrequest.py
new file mode 100644
index 0000000..f6ee680
--- /dev/null
+++ b/src/textql_sdk/models/textql_rpc_public_sandbox_query_sandboxexecutebashrequest.py
@@ -0,0 +1,34 @@
+"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
+
+from __future__ import annotations
+from pydantic import model_serializer
+from textql_sdk.types import BaseModel, UNSET_SENTINEL
+from typing import Dict, Optional
+from typing_extensions import NotRequired, TypedDict
+
+
+class TextqlRPCPublicSandboxQuerySandboxExecuteBashRequestTypedDict(TypedDict):
+ script: NotRequired[str]
+ env: NotRequired[Dict[str, str]]
+
+
+class TextqlRPCPublicSandboxQuerySandboxExecuteBashRequest(BaseModel):
+ script: Optional[str] = None
+
+ env: Optional[Dict[str, str]] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["script", "env"])
+ serialized = handler(self)
+ m = {}
+
+ for n, f in type(self).model_fields.items():
+ k = f.alias or n
+ val = serialized.get(k, serialized.get(n))
+
+ if val != UNSET_SENTINEL:
+ if val is not None or k not in optional_fields:
+ m[k] = val
+
+ return m
diff --git a/src/textql_sdk/models/textql_rpc_public_sandbox_query_sandboxexecutebashresponse.py b/src/textql_sdk/models/textql_rpc_public_sandbox_query_sandboxexecutebashresponse.py
new file mode 100644
index 0000000..5ce6a3c
--- /dev/null
+++ b/src/textql_sdk/models/textql_rpc_public_sandbox_query_sandboxexecutebashresponse.py
@@ -0,0 +1,71 @@
+"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
+
+from __future__ import annotations
+import pydantic
+from pydantic import model_serializer
+from textql_sdk.types import (
+ BaseModel,
+ Nullable,
+ OptionalNullable,
+ UNSET,
+ UNSET_SENTINEL,
+)
+from typing import Optional
+from typing_extensions import Annotated, NotRequired, TypedDict
+
+
+class TextqlRPCPublicSandboxQuerySandboxExecuteBashResponseTypedDict(TypedDict):
+ stdout: NotRequired[str]
+ stderr: NotRequired[str]
+ exit_code: NotRequired[int]
+ error: NotRequired[str]
+ r"""non-empty on execution-level failure (timeout, spawn error)"""
+ refreshed_token: NotRequired[Nullable[str]]
+
+
+class TextqlRPCPublicSandboxQuerySandboxExecuteBashResponse(BaseModel):
+ stdout: Optional[str] = None
+
+ stderr: Optional[str] = None
+
+ exit_code: Annotated[Optional[int], pydantic.Field(alias="exitCode")] = None
+
+ error: Optional[str] = None
+ r"""non-empty on execution-level failure (timeout, spawn error)"""
+
+ refreshed_token: Annotated[
+ OptionalNullable[str], pydantic.Field(alias="refreshedToken")
+ ] = UNSET
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["stdout", "stderr", "exitCode", "error", "refreshedToken"]
+ )
+ nullable_fields = set(["refreshedToken"])
+ serialized = handler(self)
+ m = {}
+
+ for n, f in type(self).model_fields.items():
+ k = f.alias or n
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
+
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
+
+ return m
+
+
+try:
+ TextqlRPCPublicSandboxQuerySandboxExecuteBashResponse.model_rebuild()
+except NameError:
+ pass
diff --git a/src/textql_sdk/sandbox.py b/src/textql_sdk/sandbox.py
index 4874b00..accb135 100644
--- a/src/textql_sdk/sandbox.py
+++ b/src/textql_sdk/sandbox.py
@@ -1146,6 +1146,224 @@ async def load_connector_data_async(
raise errors.TextqlDefaultError("Unexpected response received", http_res)
+ def execute_bash(
+ self,
+ *,
+ connect_timeout_ms: Optional[float] = None,
+ script: Optional[str] = None,
+ env: Optional[Mapping[str, str]] = None,
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
+ server_url: Optional[str] = None,
+ timeout_ms: Optional[int] = None,
+ http_headers: Optional[Mapping[str, str]] = None,
+ ) -> models.SandboxQueryServiceExecuteBashResponse:
+ r"""Runs in the caller's own worker; no connector/source scoping.
+
+ Runs in the caller's own worker; no connector/source scoping.
+
+ :param connect_timeout_ms:
+ :param script:
+ :param env:
+ :param retries: Override the default retry configuration for this method
+ :param server_url: Override the default server URL for this method
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
+ :param http_headers: Additional headers to set or replace on requests.
+ """
+ base_url = None
+ url_variables = None
+ if timeout_ms is None:
+ timeout_ms = self.sdk_configuration.timeout_ms
+
+ if server_url is not None:
+ base_url = server_url
+ else:
+ base_url = self._get_url(base_url, url_variables)
+
+ request = models.SandboxQueryServiceExecuteBashRequest(
+ connect_timeout_ms=connect_timeout_ms,
+ body=models.TextqlRPCPublicSandboxQuerySandboxExecuteBashRequest(
+ script=script,
+ env=utils.unmarshal(env, Optional[Dict[str, str]]),
+ ),
+ )
+
+ req = self._build_request(
+ method="POST",
+ path="/textql.rpc.public.sandbox_query.SandboxQueryService/ExecuteBash",
+ base_url=base_url,
+ url_variables=url_variables,
+ request=request,
+ request_body_required=True,
+ request_has_path_params=False,
+ request_has_query_params=True,
+ user_agent_header="user-agent",
+ accept_header_value="application/json",
+ http_headers=http_headers,
+ security=self.sdk_configuration.security,
+ get_serialized_body=lambda: utils.serialize_request_body(
+ request.body,
+ False,
+ False,
+ "json",
+ models.TextqlRPCPublicSandboxQuerySandboxExecuteBashRequest,
+ ),
+ allow_empty_value=None,
+ timeout_ms=timeout_ms,
+ )
+
+ if retries == UNSET:
+ if self.sdk_configuration.retry_config is not UNSET:
+ retries = self.sdk_configuration.retry_config
+
+ retry_config = None
+ if isinstance(retries, utils.RetryConfig):
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
+
+ http_res = self.do_request(
+ hook_ctx=HookContext(
+ config=self.sdk_configuration,
+ base_url=base_url or "",
+ operation_id="SandboxQueryService_ExecuteBash",
+ oauth2_scopes=None,
+ security_source=get_security_from_env(
+ self.sdk_configuration.security, models.Security
+ ),
+ tags=["SandboxQueryService"],
+ extensions=None,
+ ),
+ request=req,
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
+ retry_config=retry_config,
+ )
+
+ if utils.match_response(http_res, "200", "application/json"):
+ return unmarshal_json_response(
+ models.TextqlRPCPublicSandboxQuerySandboxExecuteBashResponse, http_res
+ )
+ if utils.match_response(http_res, "4XX", "*"):
+ http_res_text = utils.stream_to_text(http_res)
+ raise errors.TextqlDefaultError(
+ "API error occurred", http_res, http_res_text
+ )
+ if utils.match_response(http_res, "5XX", "*"):
+ http_res_text = utils.stream_to_text(http_res)
+ raise errors.TextqlDefaultError(
+ "API error occurred", http_res, http_res_text
+ )
+ if utils.match_response(http_res, "default", "application/json"):
+ return unmarshal_json_response(models.ConnectError, http_res)
+
+ raise errors.TextqlDefaultError("Unexpected response received", http_res)
+
+ async def execute_bash_async(
+ self,
+ *,
+ connect_timeout_ms: Optional[float] = None,
+ script: Optional[str] = None,
+ env: Optional[Mapping[str, str]] = None,
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
+ server_url: Optional[str] = None,
+ timeout_ms: Optional[int] = None,
+ http_headers: Optional[Mapping[str, str]] = None,
+ ) -> models.SandboxQueryServiceExecuteBashResponse:
+ r"""Runs in the caller's own worker; no connector/source scoping.
+
+ Runs in the caller's own worker; no connector/source scoping.
+
+ :param connect_timeout_ms:
+ :param script:
+ :param env:
+ :param retries: Override the default retry configuration for this method
+ :param server_url: Override the default server URL for this method
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
+ :param http_headers: Additional headers to set or replace on requests.
+ """
+ base_url = None
+ url_variables = None
+ if timeout_ms is None:
+ timeout_ms = self.sdk_configuration.timeout_ms
+
+ if server_url is not None:
+ base_url = server_url
+ else:
+ base_url = self._get_url(base_url, url_variables)
+
+ request = models.SandboxQueryServiceExecuteBashRequest(
+ connect_timeout_ms=connect_timeout_ms,
+ body=models.TextqlRPCPublicSandboxQuerySandboxExecuteBashRequest(
+ script=script,
+ env=utils.unmarshal(env, Optional[Dict[str, str]]),
+ ),
+ )
+
+ req = self._build_request_async(
+ method="POST",
+ path="/textql.rpc.public.sandbox_query.SandboxQueryService/ExecuteBash",
+ base_url=base_url,
+ url_variables=url_variables,
+ request=request,
+ request_body_required=True,
+ request_has_path_params=False,
+ request_has_query_params=True,
+ user_agent_header="user-agent",
+ accept_header_value="application/json",
+ http_headers=http_headers,
+ security=self.sdk_configuration.security,
+ get_serialized_body=lambda: utils.serialize_request_body(
+ request.body,
+ False,
+ False,
+ "json",
+ models.TextqlRPCPublicSandboxQuerySandboxExecuteBashRequest,
+ ),
+ allow_empty_value=None,
+ timeout_ms=timeout_ms,
+ )
+
+ if retries == UNSET:
+ if self.sdk_configuration.retry_config is not UNSET:
+ retries = self.sdk_configuration.retry_config
+
+ retry_config = None
+ if isinstance(retries, utils.RetryConfig):
+ retry_config = (retries, ["429", "500", "502", "503", "504"])
+
+ http_res = await self.do_request_async(
+ hook_ctx=HookContext(
+ config=self.sdk_configuration,
+ base_url=base_url or "",
+ operation_id="SandboxQueryService_ExecuteBash",
+ oauth2_scopes=None,
+ security_source=get_security_from_env(
+ self.sdk_configuration.security, models.Security
+ ),
+ tags=["SandboxQueryService"],
+ extensions=None,
+ ),
+ request=req,
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
+ retry_config=retry_config,
+ )
+
+ if utils.match_response(http_res, "200", "application/json"):
+ return unmarshal_json_response(
+ models.TextqlRPCPublicSandboxQuerySandboxExecuteBashResponse, http_res
+ )
+ if utils.match_response(http_res, "4XX", "*"):
+ http_res_text = await utils.stream_to_text_async(http_res)
+ raise errors.TextqlDefaultError(
+ "API error occurred", http_res, http_res_text
+ )
+ if utils.match_response(http_res, "5XX", "*"):
+ http_res_text = await utils.stream_to_text_async(http_res)
+ raise errors.TextqlDefaultError(
+ "API error occurred", http_res, http_res_text
+ )
+ if utils.match_response(http_res, "default", "application/json"):
+ return unmarshal_json_response(models.ConnectError, http_res)
+
+ raise errors.TextqlDefaultError("Unexpected response received", http_res)
+
def execute_query(
self,
*,
diff --git a/uv.lock b/uv.lock
index 507eca3..33064ff 100644
--- a/uv.lock
+++ b/uv.lock
@@ -470,7 +470,7 @@ wheels = [
[[package]]
name = "textql-sdk"
-version = "1.1.0"
+version = "1.1.1"
source = { editable = "." }
dependencies = [
{ name = "connect-python" },