Skip to content

Commit 586a061

Browse files
committed
[release] Bump to release 8.0.0
1 parent c7287ed commit 586a061

2 files changed

Lines changed: 80 additions & 1 deletion

File tree

HISTORY.md

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,82 @@
1+
## 8.0.0 (August 20, 2025)
2+
3+
### New Features
4+
5+
#### Full `async/await` support
6+
7+
- Added async/await support to the SDK. All existing `clients` and `caches` now have async variants, plus new models (mainly search result models that require async iteration). Following `aio` directory convention for all async components.
8+
- Implemented `AsyncAtlanClient` for all async operations (extends `AtlanClient` for reusability).
9+
- For methods that accept client parameters, we've added corresponding `*_async()` variants:
10+
11+
| Sync Method | Async Method |
12+
|------------|--------------|
13+
| `Connection.creator()` | `Connection.creator_async()` |
14+
| `Badge.creator()` | `Badge.creator_async()` |
15+
| `FluentSearch.execute()` | `FluentSearch.execute_async()` |
16+
| `AtlanTag.of()` | `AtlanTag.of_async()` |
17+
| `SourceTagAttachment.by_name()` | `SourceTagAttachment.by_name_async()` |
18+
| `CompoundQuery.tagged_with_value()` | `CompoundQuery.tagged_with_value_async()` |
19+
| `Referenceable.json()` | `Referenceable.json_async()` |
20+
| `Referenceable.get_custom_metadata()` | `Referenceable.get_custom_metadata_async()` |
21+
| `Referenceable.set_custom_metadata()` | `Referenceable.set_custom_metadata_async()` |
22+
| `Referenceable.flush_custom_metadata()` | `Referenceable.flush_custom_metadata_async()` |
23+
24+
#### Shared business logic architecture
25+
- Extracted common functionality (request preparation and response processing) into a separate `common` sub-package. This enables reuse across both sync and async operations - only the middle layer (API calling with respective clients) differs.
26+
27+
Example:
28+
```python
29+
from pyatlan.client.common import FindPurposesByName
30+
31+
@validate_arguments
32+
async def find_purposes_by_name(
33+
self,
34+
name: str,
35+
attributes: Optional[List[str]] = None,
36+
) -> List[Purpose]:
37+
"""
38+
Async find purposes by name using shared business logic.
39+
:param name: of the purpose
40+
:param attributes: (optional) collection of attributes to retrieve for the purpose
41+
:returns: all purposes with that name, if found
42+
:raises NotFoundError: if no purpose with the provided name exists
43+
"""
44+
search_request = FindPurposesByName.prepare_request(name, attributes)
45+
search_results = await self.search(search_request)
46+
return FindPurposesByName.process_response(
47+
search_results, name, allow_multiple=True
48+
)
49+
```
50+
51+
### Documentation
52+
53+
- **Asynchronous SDK operations**: https://developer.atlan.com/sdks/python/#asynchronous-sdk-operations
54+
55+
### Breaking Changes
56+
57+
While these aren't direct breaking changes to the SDK API, they may affect your code if you depend on these libraries:
58+
59+
- **Migrated from [`requests`](https://requests.readthedocs.io/en/latest) to [`httpx`](https://www.python-httpx.org)**: Completely removed support for `requests` library and migrated to `httpx`, which provides similar API for `sync` operations plus `async` client support for async operations.
60+
- **Replaced [`urllib3`](https://urllib3.readthedocs.io/en/stable) with [`httpx-retries`](https://will-ockmore.github.io/httpx-retries)**: Removed support for `urllib3` retry mechanism and implemented retries using `httpx-retries` library (API remains similar).
61+
62+
### QOL Improvements
63+
64+
- Generated latest typedef models.
65+
- Removed redundant requirements files (no longer needed since migration to `uv` in previous releases).
66+
- Updated GitHub workflows for Docker image builds to use `uv sync` (without dev dependencies).
67+
- Added unit and integration tests for `async` SDK.
68+
- Added `x-atlan-client-type: sync` or `x-atlan-client-type: async` to SDK headers and logging for better observability.
69+
- Added `async-integration-tests` job to `pyatlan-pr.yaml` workflow. Triggers when there are changes to async SDK code or can be triggered manually via `run-async-tests` label on PR.
70+
- Async SDK unit tests run by default on every commit push as they have minimal time impact on test suite.
71+
- Used module-scoped asyncio test fixtures similar to sync integration tests:
72+
```toml
73+
# pyproject.toml
74+
asyncio_mode = "auto"
75+
asyncio_default_test_loop_scope = "module"
76+
asyncio_default_fixture_loop_scope = "module"
77+
```
78+
- Used `token_client` fixtures when creating/deleting API tokens with `retry=0` to avoid token overpopulation in test tenants.
79+
180
## 7.2.0 (August 13, 2025)
281

382
### New Features

pyatlan/version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
7.2.0
1+
8.0.0

0 commit comments

Comments
 (0)