Skip to content

Tags: Unstructured-IO/unstructured-python-client

Tags

v0.44.0

Toggle v0.44.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
feat(PLU-354): remove connector config models from the SDK (#341)

## Summary
- Replace the typed unions in `CreateSourceConnectorConfig`,
`CreateDestinationConnectorConfig`, `UpdateSourceConnectorConfig`,
`UpdateDestinationConnectorConfig`, and the `*ConnectorInformation`
configs with `Dict[str, Any]`.
- Delete the per-connector config models and their docs (e.g.
`S3SourceConnectorConfig`, `AzureDestinationConnectorConfig`,
`OpenSearchConnectorConfig`, …).
- Bump version to 0.44.0 and add a breaking-change changelog entry.

This decouples the SDK from backend connector schemas — adding/removing
fields on a connector no longer requires an SDK release.

These were deprecated in our docs last year. None of our SDK snippets
use them.

## Test plan
- [ ] CI green
- [ ] Smoke: create a source connector with a plain dict config against
SND and confirm the request goes through

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> This is a breaking change to the SDK surface area: connector `config`
fields switch from typed models/unions to `Dict[str, Any]`, and many
generated connector config classes/docs are removed, which may break
downstream type checks and runtime imports.
> 
> **Overview**
> **Decouples connector configuration from generated SDK models.**
Connector `config` fields for create/update and `*ConnectorInformation`
responses now use `Dict[str, Any]` instead of per-connector typed
unions/models.
> 
> Removes the generated connector config model classes and their
documentation, updates contract tests to assert `config` is a `dict`,
and bumps the SDK version to `0.44.0` with a breaking-change entry in
`CHANGELOG.md` (plus release metadata in `RELEASES.md`).
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
eb0ae92. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v0.43.2

Toggle v0.43.2's commit message
Release v0.43.2

v0.43.1

Toggle v0.43.1's commit message
Release v0.43.1

v0.42.12

Toggle v0.42.12's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix: retry on all TransportError subclasses (ReadError, WriteError, e…

…tc.) (#334)

## Summary
- Replaces individual `except` blocks for `ConnectError`,
`RemoteProtocolError`, and `TimeoutException` with a single catch for
their parent class `httpx.TransportError`
- This covers `ReadError` (TCP connection reset mid-response with empty
message), `WriteError`, and all other transport-level failures
- Previously, `ReadError` fell through to the catch-all `Exception`
handler and was wrapped as `PermanentError`, failing immediately without
retry

## Context
Follow-up to #332. After deploying the `RemoteProtocolError` fix, we
observed `httpx.ReadError` (empty message) failures when api pods
crashed mid-response. The TCP connection was reset during the response
read phase, which httpx classifies as `ReadError` rather than
`RemoteProtocolError`.

The httpx exception hierarchy:
```
TransportError
├── ConnectError          (was retried)
├── RemoteProtocolError   (was retried since #332)
├── ReadError             (was NOT retried — now fixed)
├── WriteError            (was NOT retried — now fixed)
├── PoolTimeout           (was NOT retried — now fixed)
└── ...
TimeoutException          (was retried, subclass of TransportError)
├── ConnectTimeout
├── ReadTimeout
├── WriteTimeout
└── PoolTimeout
```

Catching `TransportError` is the correct level — all transport errors
are transient and should be retried when `retry_connection_errors=True`.

## Test plan
- [x] Parametrized tests for all TransportError subclasses (sync +
async)
- [ ] Each subclass retried when `retry_connection_errors=True`
- [ ] Each subclass raises immediately when
`retry_connection_errors=False`

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Expands which network failures are treated as retryable, which can
change error/latency behavior for callers and potentially mask
persistent transport issues until backoff is exhausted.
> 
> **Overview**
> **Broadened retry handling for transport failures.** The retry wrapper
now catches `httpx.TransportError` in both sync and async paths, so
additional transport-level errors (e.g. `ReadError`, `WriteError`, and
timeout subclasses) are retried when `retry_connection_errors=True`
instead of being treated as permanent.
> 
> Tests were updated to parameterize across multiple `TransportError`
subclasses for both sync and async retry behavior, and the package
version/release notes were bumped to `0.42.12`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
bdd403c. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

v0.42.11

Toggle v0.42.11's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix: correct RELEASES.md format for Speakeasy publish (#333)

## Summary
- Adds missing trailing spaces to `- OpenAPI Doc` line in the 0.42.11
RELEASES.md entry
- Adds missing trailing newline at end of file
- The Speakeasy publish action failed with `error parsing last release
info` because the format didn't match the expected pattern

This unblocks the 0.42.11 PyPI publish.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Low risk: documentation-only formatting tweaks (trailing
spaces/newline) to satisfy Speakeasy release parsing; no runtime code
changes.
> 
> **Overview**
> Fixes the `2026-03-25` (`v0.42.11`) entry in `RELEASES.md` to match
Speakeasy’s expected release format by restoring the trailing spaces on
`- OpenAPI Doc` and ensuring the file ends with a proper final newline
(so the last `PyPI v0.42.11` line is parsed correctly).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
39fd2ae. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

v0.42.10

Toggle v0.42.10's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: 🐝 Update SDK - Generate 0.42.10 (#329)

# SDK update
## Versioning

Version Bump Type: [patch] - 🤖 (automated)


[View full SDK
changelog](https://app.speakeasy.com/org/unstructured/unstructured5xr/changes-report/5a3cd247d1de374a010b2d312a09a5e4)
<details>
<summary>OpenAPI Change Summary</summary>



Based on [Speakeasy CLI](https://github.com/speakeasy-api/speakeasy)
1.601.0

Co-authored-by: Austin Walker <austin@unstructured.io>

v0.42.9

Toggle v0.42.9's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: 🐝 Update SDK - Generate 0.42.9 (#324)

> [!IMPORTANT]
> Linting report available at:
<https://app.speakeasy.com/org/unstructured/unstructured5xr/linting-report/acc9ed4ac70b9e127a4693cc52193c86>
> OpenAPI Change report available at:
<https://app.speakeasy.com/org/unstructured/unstructured5xr/changes-report/3ce57b3ff042c75da24df753a4e9de1f>
# SDK update
## Versioning

Version Bump Type: [patch] - 🤖 (automated)
<details>
<summary>OpenAPI Change Summary</summary>


```
└─┬Info
  └──[🔀] version (18:16)
```

| Document Element | Total Changes | Breaking Changes |
|------------------|---------------|------------------|
| info             | 1             | 0                |


</details>

## PYTHON CHANGELOG
No relevant generator changes


Based on [Speakeasy CLI](https://github.com/speakeasy-api/speakeasy)
1.601.0

Co-authored-by: speakeasybot <bot@speakeasyapi.dev>

v0.42.8

Toggle v0.42.8's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: 🐝 Update SDK - Generate 0.42.8 (#322)

> [!IMPORTANT]
> Linting report available at:
<https://app.speakeasy.com/org/unstructured/unstructured5xr/linting-report/3ed620997acae18a1e26ead1df0f8446>
> OpenAPI Change report available at:
<https://app.speakeasy.com/org/unstructured/unstructured5xr/changes-report/31f32cae2ab448877e4dff6f510a4fd1>
# SDK update
## Versioning

Version Bump Type: [patch] - 🤖 (automated)
<details open>
<summary>OpenAPI Change Summary</summary>
No specification changes
</details>

## PYTHON CHANGELOG
No relevant generator changes


Based on [Speakeasy CLI](https://github.com/speakeasy-api/speakeasy)
1.601.0

Co-authored-by: speakeasybot <bot@speakeasyapi.dev>

v0.42.6

Toggle v0.42.6's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: 🐝 Update SDK - Generate 0.42.6 (#318)

> [!IMPORTANT]
> Linting report available at:
<https://app.speakeasy.com/org/unstructured/unstructured5xr/linting-report/22e5ea0a87c022e301ddc0b9479c97bc>
> OpenAPI Change report available at:
<https://app.speakeasy.com/org/unstructured/unstructured5xr/changes-report/37746683fbc81629886ad5fa3bdcde18>
# SDK update
## Versioning

Version Bump Type: [patch] - 🤖 (automated)
## Python SDK Changes:
* `unstructured_client.destinations.create_destination()`: 
*
`request.create_destination_connector.config.[open_search_connector_config_input]`
**Added**
  *  `response.config.[open_search_connector_config]` **Added**
* `unstructured_client.destinations.get_destination()`:
`response.config.[open_search_connector_config]` **Added**
* `unstructured_client.destinations.list_destinations()`: 
  *  `request.destination_type` **Changed**
  *  `response.[].config.[open_search_connector_config]` **Added**
* `unstructured_client.destinations.update_destination()`: 
*
`request.update_destination_connector.config.[open_search_connector_config_input]`
**Added**
  *  `response.config.[open_search_connector_config]` **Added**
* `unstructured_client.sources.create_source()`: 
*
`request.create_source_connector.config.[open_search_connector_config_input]`
**Added**
  *  `response.config.[open_search_connector_config]` **Added**
* `unstructured_client.sources.get_source()`:
`response.config.[open_search_connector_config]` **Added**
* `unstructured_client.sources.list_sources()`: 
  *  `request.source_type` **Changed**
  *  `response.[].config.[open_search_connector_config]` **Added**
* `unstructured_client.sources.update_source()`: 
*
`request.update_source_connector.config.[open_search_connector_config_input]`
**Added**
  *  `response.config.[open_search_connector_config]` **Added**

<details>
<summary>OpenAPI Change Summary</summary>


```
└─┬Components
  ├──[➕] schemas (5420:36)
  ├──[➕] schemas (5518:41)
  ├─┬UpdateDestinationConnector
  │ └─┬config
  │   ├──[➕] anyOf (7295:15)
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (5519:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (5773:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (5845:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6135:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6040:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6266:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6724:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (7563:17)❌ 
  │   └─┬ANYOF
  │     └──[🔀] $ref (4249:17)❌ 
  ├─┬SourceConnectorType
  │ └──[➕] enum (7091:11)
  ├─┬UpdateSourceConnector
  │ └─┬config
  │   ├──[➕] anyOf (7376:15)
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (5519:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (5681:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (5950:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6396:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6495:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6597:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6875:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (4444:17)❌ 
  │   └─┬ANYOF
  │     └──[🔀] $ref (7831:17)❌ 
  ├─┬CreateSourceConnector
  │ └─┬config
  │   ├──[➕] anyOf (3195:15)
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (5519:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (5681:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (5950:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6396:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6495:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6597:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6875:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (4444:17)❌ 
  │   └─┬ANYOF
  │     └──[🔀] $ref (7831:17)❌ 
  ├─┬DestinationConnectorType
  │ └──[➕] enum (3840:11)
  ├─┬DestinationConnectorInformation
  │ └─┬config
  │   ├──[➕] anyOf (3787:15)
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (5421:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (5745:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (5802:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6069:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6012:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6204:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6652:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (7534:17)❌ 
  │   └─┬ANYOF
  │     └──[🔀] $ref (4181:17)❌ 
  ├─┬CreateDestinationConnector
  │ └─┬config
  │   ├──[➕] anyOf (3105:15)
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (5519:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (5773:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (5845:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6135:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6040:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6266:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (6724:17)❌ 
  │   ├─┬ANYOF
  │   │ └──[🔀] $ref (7563:17)❌ 
  │   └─┬ANYOF
  │     └──[🔀] $ref (4249:17)❌ 
  └─┬SourceConnectorInformation
    └─┬config
      ├──[➕] anyOf (7041:15)
      ├─┬ANYOF
      │ └──[🔀] $ref (5421:17)❌ 
      ├─┬ANYOF
      │ └──[🔀] $ref (5617:17)❌ 
      ├─┬ANYOF
      │ └──[🔀] $ref (5888:17)❌ 
      ├─┬ANYOF
      │ └──[🔀] $ref (6329:17)❌ 
      ├─┬ANYOF
      │ └──[🔀] $ref (6464:17)❌ 
      ├─┬ANYOF
      │ └──[🔀] $ref (6543:17)❌ 
      ├─┬ANYOF
      │ └──[🔀] $ref (6796:17)❌ 
      ├─┬ANYOF
      │ └──[🔀] $ref (4324:17)❌ 
      └─┬ANYOF
        └──[🔀] $ref (7784:17)❌ 
```

| Document Element | Total Changes | Breaking Changes |
|------------------|---------------|------------------|
| components       | 64            | 54               |


</details>

## PYTHON CHANGELOG
No relevant generator changes


Based on [Speakeasy CLI](https://github.com/speakeasy-api/speakeasy)
1.601.0

Co-authored-by: speakeasybot <bot@speakeasyapi.dev>

v0.42.5

Toggle v0.42.5's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: 🐝 Update SDK - Generate 0.42.5 (#317)

> [!IMPORTANT]
> Linting report available at:
<https://app.speakeasy.com/org/unstructured/unstructured5xr/linting-report/16e0c8159aa07f60f346209d2661d329>
> OpenAPI Change report available at:
<https://app.speakeasy.com/org/unstructured/unstructured5xr/changes-report/875f5043b32383cb8853d3dfa9fa5717>
# SDK update
## Versioning

Version Bump Type: [patch] - 🤖 (automated)
<details>
<summary>OpenAPI Change Summary</summary>


```
└─┬Info
  └──[🔀] version (18:16)
```

| Document Element | Total Changes | Breaking Changes |
|------------------|---------------|------------------|
| info             | 1             | 0                |


</details>

## PYTHON CHANGELOG
No relevant generator changes


Based on [Speakeasy CLI](https://github.com/speakeasy-api/speakeasy)
1.601.0

---------

Co-authored-by: speakeasybot <bot@speakeasyapi.dev>
Co-authored-by: Jordan Homan <jordan@unstructured.io>