Releases: atlanhq/atlan-python
Releases · atlanhq/atlan-python
v7.1.8
v8.1.1
🎉 New Features
- Added support for
Databrickssystem tables in theDatabricksCrawler. - Added support for rule conditions and incremental updates for
DQrules.
📝 Documentation
DatabricksCrawler(system tables): https://developer.atlan.com/snippets/workflows/packages/databricks-assets/#extraction-method-system-tables- Manage
DQrules: https://developer.atlan.com/patterns/create/dq_rules
Full Changelog: 8.1.0...8.1.1
v8.1.0
🎉 New Features
- Added support for sending OpenLineage raw events via
OpenLineageEvent.emit_raw().
⛑️ Breaking Changes
- Relationship removal is now idempotent, i.e removing a relationship that does not already exist using
SaveSemantic.REMOVEwill now simply succeed and do nothing, whereas it previously threw aNotFoundError.
📝 Documentation
- Send raw
OpenLineageevents: https://developer.atlan.com/snippets/common-examples/lineage/manage/#optional-send-raw-openlineage-events
🥗 QOL Improvements
- Added update
policytest topersona_test. - Fixed
glossary_test.test_remove_unrelated_relationship. - Updated
Atlasendpoint to enforce rate limiting within apps.
Full Changelog: 8.0.2...8.1.0
v8.0.2
🐞 Bug Fixes
- Fixed
AsyncWorkflowSearchResponseasync iterator.
🥗 QOL Improvements
pyatlan-wolfi-base.yml: Fixed transient network issues that cause download corruption.
Full Changelog: 8.0.1...8.0.2
v8.0.1
🎉 New Features
- Added
get_client_async()for initializingAsyncAtlanClientwhen using packages. - Added optional parameter
set_pkg_headers()to set package headers on the client (defaults toFalse).
🐞 Bug Fixes
- Fixed
httpcore.LocalProtocolErrorexception inget_client()that occurred whenATLAN_API_KEYenvironment variable was not configured (commonly encountered during package impersonation with emptyAPIkey strings).
🥗 QOL Improvements
- Added
pyatlan-wolfi-baseDocker image workflow with enhanced capabilities:- Automatic release builds: Workflow now triggers automatically on GitHub releases using latest Python (3.13) and SDK versions
- Git branch support: Added ability to install SDK from any git branch for development/testing purposes via
pyatlan_branchparameter - Smart installation logic: Automatically chooses between PyPI (stable) or git (development) installation methods
- Enhanced tagging: Branch builds tagged as
branch-{branchname}-{python}-{commit}for easy identification - Build metadata: Images include labels tracking installation source, version/branch, and Python version
- Conditional PyPI checks: Skips PyPI availability checks when installing from git branches
- Improved logging: Shows installation method, branch info, and trigger source in build outputs
Full Changelog: 8.0.0...8.0.1
v8.0.0
🎉 New Features
- Added optional parameters (
base_url,client_idandclient_secret) toAtlanClient.from_token_guid(). - Added
async/awaitsupport to the SDK. All existingclientsandcachesnow haveasyncvariants, plus new models (mainly search result models that requireasynciteration). Followingaiodirectory convention for allasynccomponents. - Implemented
AsyncAtlanClientfor allasyncoperations (extendsAtlanClientfor reusability). - For methods that accept client parameters, we've added corresponding
*_async()variants:
| sync | async |
|---|---|
Connection.creator() |
Connection.creator_async() |
Badge.creator() |
Badge.creator_async() |
FluentSearch.execute() |
FluentSearch.execute_async() |
AtlanTag.of() |
AtlanTag.of_async() |
SourceTagAttachment.by_name() |
SourceTagAttachment.by_name_async() |
CompoundQuery.tagged_with_value() |
CompoundQuery.tagged_with_value_async() |
Referenceable.json() |
Referenceable.json_async() |
Referenceable.get_custom_metadata() |
Referenceable.get_custom_metadata_async() |
Referenceable.set_custom_metadata() |
Referenceable.set_custom_metadata_async() |
Referenceable.flush_custom_metadata() |
Referenceable.flush_custom_metadata_async() |
New shared business logic architecture
- Extracted
commonfunctionality (requestpreparation andresponseprocessing) into a separatecommonsub-package. This enables reuse across bothsyncandasyncoperations - only the middle layer (APIcalling with respectiveclients) differs.
Example:
from pyatlan.client.common import GetLineageList
async def get_lineage_list(self, lineage_request) -> AsyncLineageListResults:
"""
Async lineage retrieval using shared business logic.
:param lineage_request: detailing the lineage query, parameters, and so on to run
:returns: the results of the lineage request
:raises InvalidRequestError: if the requested lineage direction is 'BOTH' (unsupported for this operation)
:raises AtlanError: on any API communication issue
"""
api_endpoint, request_obj = GetLineageList.prepare_request(lineage_request)
raw_json = await self._client._call_api(
api_endpoint, None, request_obj=request_obj
)
response = GetLineageList.process_response(raw_json, lineage_request)
return AsyncLineageListResults(
client=self._client,
criteria=lineage_request,
start=lineage_request.offset or 0,
size=lineage_request.size or 10,
has_more=response["has_more"],
assets=response["assets"],
)
def get_lineage_list(
self, lineage_request: LineageListRequest
) -> LineageListResults:
"""
Retrieve lineage using the higher-performance "list" API.
:param lineage_request: detailing the lineage query, parameters, and so on to run
:returns: the results of the lineage request
:raises InvalidRequestError: if the requested lineage direction is 'BOTH' (unsupported for this operation)
:raises AtlanError: on any API communication issue
"""
endpoint, request_obj = GetLineageList.prepare_request(lineage_request)
raw_json = self._client._call_api(endpoint, request_obj=request_obj)
response = GetLineageList.process_response(raw_json, lineage_request)
return LineageListResults(
client=self._client,
criteria=lineage_request,
start=lineage_request.offset or 0,
size=lineage_request.size or 10,
has_more=response["has_more"],
assets=response["assets"],
)📝 Documentation
- Asynchronous SDK operations: https://developer.atlan.com/sdks/python/#asynchronous-sdk-operations
⛑️ Breaking Changes
While these aren't direct breaking changes to the SDK API, they may affect your code if you depend on these libraries:
- Migrated from
requeststohttpx: Completely removed support forrequestslibrary and migrated tohttpx, which provides similar API forsyncoperations plusasyncclient support for async operations. - Replaced
urllib3withhttpx-retries: Removed support forurllib3retry mechanism and implemented retries usinghttpx-retrieslibrary (API remains similar).
🥗 QOL Improvements
- Added
unitandintegrationtests forasyncSDK. - Added
x-atlan-client-type: syncorx-atlan-client-type: asyncto SDK headers and logging for better observability. - Added
async-integration-testsjob topyatlan-pr.yamlworkflow. Triggers when there are changes to async SDK code or can be triggered manually viarun-async-testslabel on PR. - Async SDK unit tests run by default on every commit push as they have minimal time impact on test suite.
- Used
module-scopedasyncio test fixtures similar tosyncintegration tests:# pyproject.toml asyncio_mode = "auto" asyncio_default_test_loop_scope = "module" asyncio_default_fixture_loop_scope = "module"
- Used
token_clientfixtures when creating/deleting API tokens withretry=0to avoid token overpopulation in test tenants. - Fixed
condapackages publish GitHub workflow. - Updated GitHub workflows for Docker image builds to use
uv sync(without dev dependencies).
Full Changelog: 7.2.0...8.0.0
v7.2.0
🎉 New Features
- Added Python version info to SDK headers and API logger.
⛑️ Breaking Changes
- Dropped support for
Python 3.8.
🥗 QOL Improvements
- Bumped various
coreanddevdependencies to latest versions. - Fixed conda publish and pyatlan publish GitHub workflows.
- Fixed integration test failures due to Elasticsearch eventual consistency using custom retries (
glossary_test,test_client,persona/purpose_test)
Full Changelog: 7.1.6...7.2.0
v7.1.6
🥗 QOL Improvements
- Added support for adding
DQrules schedule to an asset (i.e:AssetClient.add_dq_rule_schedule()).
Documentation: https://developer.atlan.com/patterns/create/dq_rules/#schedule-data-quality-rules
Full Changelog: 7.1.5...7.1.6
v7.1.5
🧪 Experimental
- Added
creator()andupdater()methods foralpha_DQRule(data quality rule) asset.
🥗 QOL Improvements
- Generated latest typedef models.
Full Changelog: 7.1.4...7.1.5
v7.1.4
🎉 New Features
- Added new connector types:
AI,SAP_ECC. - Added new connector categories:
AI,ERP. - Added
creator()methods forAI-basedassets. - Added support for
applicable_ai_asset_typesto custom metadataAttributeDef.Options.
🧪 Experimental
- Added support for
AtlanClientinitialization via API tokenguid.
🐞 Bug Fixes
- Fixed handling of
source_tagwhen noattributespresent.
🥗 QOL Improvements
- Generated latest typedef models.
- Updated Dockerfile to use
python:3.13.5-slim-bookworm. - Removed unused
requirementsfiles (now usingpyproject.toml).
Full Changelog: 7.1.3...7.1.4