Skip to content

Tags: Unstructured-IO/unstructured-python-client

Tags

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>

v0.42.4

Toggle v0.42.4's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: bump pypdf and other dependencies (#312)

- This is done by updating the version constraint in `gen.yaml` and then
running `make client-generate-sdk`
- I've removed other new changes in order to keep this pr small
- By manually touching `RELEASES.md` we'll trigger a package release in
this repo

v0.42.3

Toggle v0.42.3's commit message

Verified

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

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

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


```
└─┬Components
  ├─┬CreateDestinationConnector
  │ └─┬config
  │   └──[➕] anyOf (2768:15)
  ├─┬DestinationConnectorInformation
  │ └─┬config
  │   └──[➕] anyOf (3428:15)
  ├─┬UpdateSourceConnector
  │ └─┬config
  │   └──[➕] anyOf (6675:15)
  ├─┬UpdateDestinationConnector
  │ └─┬config
  │   └──[➕] anyOf (6597:15)
  ├─┬SourceConnectorInformation
  │ └─┬config
  │   └──[➕] anyOf (6467:15)
  └─┬CreateSourceConnector
    └─┬config
      └──[➕] anyOf (2855:15)
```

| Document Element | Total Changes | Breaking Changes |
|------------------|---------------|------------------|
| components       | 6             | 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: Austin Walker <austin@unstructured.io>

v0.42.2

Toggle v0.42.2's commit message

Verified

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

> [!IMPORTANT]
> Linting report available at:
<https://app.speakeasy.com/org/unstructured/unstructured5xr/linting-report/0a5f5e6fa72220658eebd2029258b3f1>
> OpenAPI Change report available at:
<https://app.speakeasy.com/org/unstructured/unstructured5xr/changes-report/ab67ee934e789814b24e905291d94612>
# SDK update
Based on:
- OpenAPI Doc  
- Speakeasy CLI 1.598.3 (2.674.3)
https://github.com/speakeasy-api/speakeasy
## Versioning

Version Bump Type: [patch] - 🤖 (automated)
## PYTHON CHANGELOG
## core: 5.19.7 - 2025-08-06
### 🐛 Bug Fixes
- add return type hint for methods returning None *(commit by
[@AshGodfrey](https://github.com/AshGodfrey))*

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