Skip to content

Tags: Unstructured-IO/unstructured-python-client

Tags

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) <[email protected]>

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) <[email protected]>

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 <[email protected]>

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 <[email protected]>

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 <[email protected]>

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 <[email protected]>

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 <[email protected]>
Co-authored-by: Jordan Homan <[email protected]>

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