Releases: atlanhq/atlan-python
v7.1.3
π Bug Fixes
- Fixed multi-value select bug in the CM attribute setter.
Full Changelog: 7.1.2...7.1.3
v7.1.2
π₯ QOL Improvements
- Generated latest typedefs models.
- Fixed
suggestions_testintegration test. - Updated Dockerfile to use
python:3.11-slim. - Migrated SDK to use
uvfor development, building, and publishing the SDK. - Added
delete_type:HARDoptional parameter toAssetClient.purge_by_guid()method. - Made
FluentSearchusage inget_by_*()methods consistent withGETAPI (returnactiveandarchivedassets).
Full Changelog: 7.1.1...7.1.2
v7.1.1
v7.1.0
π New Features
- Added support for managing asset-to-asset relationships that include attributes. SDK now allows setting attributes on specific relationship types, providing richer metadata and contextual information for how assets are connected.
- These relationships can now carry attributes, similar to how assets themselves have attributes. The SDK has been enhanced to deserialize, access, and serialize these relationship-level attributes correctly.
Supported relationship types:
AtlasGlossaryAntonymAtlasGlossarySynonymAtlasGlossaryReplacementTermAtlasGlossarySemanticAssignmentAtlasGlossaryPreferredTermAtlasGlossaryRelatedTermAtlasGlossaryTermCategorizationAtlasGlossaryTranslationAtlasGlossaryValidValueAtlasGlossaryIsARelationshipCustomParentEntityCustomChildEntitiesCustomRelatedFromEntitiesCustomRelatedToEntitiesUserDefRelationship
π Bug Fixes
- Fixed automatic
401token refresh by usingContextVarforAtlanClient._401_has_retried(bool flag) to avoid race conditions when executing SDK code in multithreading environments.
βοΈ Breaking Changes
Referenceable.relationship_attributes field type updated:
This field NOW supports:
Optional[Union[RelationshipAttributes, Dict[str, Any]]]Before:
Optional[Dict[str, Any]]-
If
typeNameis present in the relationship attributes, the SDK will attempt to deserialize using the correct subclass ofRelationshipAttributes. -
If
typeNameis absent, it will fall back to a rawDict[str, Any]. -
This change improves structure and typing for known relationship models while maintaining backward compatibility via fallback.
Full Changelog: 7.0.1...7.1.0
v7.0.1
π Bug Fixes
- Fixed
FluentSearchcriteria used forget_by_qualified_name/guidmethod to include assettype_name.
Full Changelog: 7.0.0...7.0.1
v7.0.0
π New Features
- Added
longas a new primitive type in theAtlanCustomAttributePrimitiveTypeenum. - Support for
UnmodeledAsset types: IntroducedIndistinctAssetas a fallback model to handle asset types that are not explicitly modeled in the SDK. Previously, such assets would returnNone(e.g: for newly introduced typedefs). With this release, the SDK will now return anIndistinctAssetinstance containing basic fields such asguid,qualifiedName, andtypeName.
π Bug Fixes
- Fixed timestamp-based pagination in search log results when
from + sizeexceeds the Elasticsearch window size (10,000records) due to identical creation times for the first and last records in a retrieved page.
βοΈ Breaking Changes
This release includes a major refactor that eliminates all usage of AtlanClient.get_current_client() and set_current_client() (previously implemented using ContextVar / thread-local storage a.k.a TLS). Although the earlier design was thread-safe, it still required users to explicitly use PyAtlanThreadPoolExecutor in multi-threaded environments, resulting in unintuitive patterns and frequent client initialization errors.
The new design simplifies usage by requiring the client to be passed explicitly to SDK operations that interact with the Atlan platform.
Important
Affected Areas
All the following methods or constructors now require a client argument due to the removal of AtlanClient.get_current_client():
pyatlan.model.assets:
Referenceable.flush_custom_metadata(client)Referenceable.get_custom_metadata(client, name)Referenceable.set_custom_metadata(client, custom_metadata)CustomMetadataProxyis no longer initialized inReferenceable.__init__()(as it now requires aclient).Purpose.create_metadata_policy()Purpose.create_data_policy()DataProduct.get_assets()Badge.creator()Connection.creator()
Note
user_cache.validate_names, role_cache.validate_idstrs, and group_cache.validate_aliases are now invoked inside Connection.creator() instead of field validators.
pyatlan.model.custom_metadata:
CustomMetadataDict(client, name)CustomMetadataProxy(client, business_attributes)
pyatlan.model.structs:
SourceTagAttachment.by_name()SourceTagAttachment.by_qualified_name()SourceTagName()(constructor)
pyatlan.model.suggestions:
Suggestions.get()Suggestions.apply()
pyatlan.model.fluent_search
FluentSearch.tagged()FluentSearch.tagged_with_value()
pyatlan.client.typedef
EnumDef.update()AttributeDef.create()
pyatlan.model.search
Exists.with_custom_metadata()Term.with_custom_metadata()
pyatlan.client.atlan
client_connection()
pyatlan.model.open_lineage
OpenLineageEvent.emit()
pyatlan.model.fields.atlan_fields
CustomMetadataField()(constructor)
pyatlan.model.packages
- All crawler class constructors
Serialization & Deserialization
API Request Serialization:
- Now handled via the
AtlanRequestwrapper, which takes a Pydantic model instance and a client. - It automatically performs translation (e.g: converting human-readable Atlan tag names into hashed IDs using
AtlanTagRetranslator).
API Response Deserialization:
- Responses are processed using the
AtlanResponsewrapper. - It translates raw JSON into readable formats via registered translators like
AtlanTagTranslator(e.g: converting hashed tag IDs into human-readable names).
AtlanTag / AtlanTagName Changes
- Human-readable tag names are now only available when deserializing through
AtlanResponse(which requires a validclient). If skipped, tag names remain in hashed ID format or as plain strings. - Deleted tags (e.g
AtlanTagName('(DELETED)')) will only appear when usingAtlanResponse, as the lookup requires a client to determine tag validity. - The
.idattribute onAtlanTagNamehas been deprecated. UseAtlanTag.tag_idto access the hashed ID instead. - Fixed typo in
AtlanTag.source_tag_attachmentsfield name.
Other Changes
-
AtlanClient._401_has_retriedis now marked as aPrivateAttr. -
IndexSearchRequest.Metadatahas been moved to a separate class:IndexSearchRequestMetadata. -
Removed deprecated methods and utils:
AtlanClient.get_current_client()AtlanClient.set_current_client()PyAtlanThreadPoolExecutor(SDK is now fully thread-safe without it)
-
Updated
AssetClient.find_domain_by_name()andAssetClient.find_product_by_name()to return only activeDomainandProductassets. Previously, these methods returned bothactiveandarchivedassets, which caused issues when assets with the samenameexisted in both states - the first match (possiblyarchived) was returned.
π₯ QOL Improvements
- Regenerated latest typedef models.
- Refactored integration and unit tests to eliminate reliance on
AtlanClient.get_current_client()/set_current_client().
Full Changelog: 6.2.1...7.0.0
v6.2.1
π Bug Fixes
- Extended the
applicable_asset_typesattribute definition to acceptUnion[Set[str], AssetTypes]. - Fixed validation to ensure provided asset type names match existing SDK asset classes, replacing the previously hard-coded set of asset types.
π₯ QOL Improvements
- Regenerated the latest typedef models.
Full Changelog: 6.1.1...6.2.0
v6.2.0
π New Features
- Added support for
append_atlan_tagsin theAssetClient.save()method. - Introduced
AssetClient.remove_atlan_tags()to allow users to remove one or more Atlan tags from a given asset. - Enhanced the SDK to use the
/bulkendpoint for all tag mutation operations.
βοΈ Breaking Changes
- All tag mutation methods (
add_atlan_tags,update_atlan_tags,remove_atlan_tag,remove_atlan_tags) now use the/bulkendpoint. As a result, these methods will now return anAssetMutationResponseinstead ofNone, reflecting the updated API response structure.
π Bug Fixes
- Added default
typeName=ReferenceabletoBool(must) clauses whentypeNameis not explicitly provided in the search request. This ensures the SDK retrieves only assets that inherit from theReferenceablesupertype.
π₯ QOL Improvements
- Regenerated the latest typedef models.
Full Changelog: 6.1.1...6.2.0
v6.1.1
π New Features
- Added a utility method (
AssetClient.process_assets()) to simplify processing (e.g: updating) assets while iterating through search results.
π Bug Fixes
- Fixed an issue where the search pagination loop would break due to invalid assets.
- If
typeNamefilter is not explicitly provided in the search request, the SDK now defaults to retrieving only assets with theReferenceablesupertype. This avoids including non-asset records in the response.
π₯ QOL Improvements
- Regenerated the latest typedef models.
- Added a retry loop to ensure the token is fully active before retrying the original request after a
401response.
Full Changelog: 6.1.0...6.1.1
v6.1.0
π New Features
- Implemented iterative pagination in
WorkflowClientsearch methods. - Added support for dynamic extension of
AtlanConnectorTypeto enable custom connectors. - Migrated from
TLStoContextVarsto support both multithreaded and asynchronous environments. - Introduced
PyAtlanThreadPoolExecutorinpyatlan.utils, which preserves context variables across threads β useful for running SDK methods in multithreaded or asynchronous environments.
βοΈ Breaking Changes
We've fixed pagination issues in the existing UserClient and GroupClient search methods. As a result, the following methods are now affected:
UserClient
get_all()get_by_email()get_by_emails()get_by_usernames()
GroupClient
get_all()get_by_name()
Make sure to update your usage patterns accordingly to avoid missing results. These methods now return UserResponse and GroupResponse objects, which support pagination. If multiple results are expected, you'll need to iterate through pages β similar to how it's done in AssetClient.search() operations.
π₯ QOL Improvements
- Regenerated the latest typedef models.
- Simplified the
creator()methods in bothAtlasGlossaryTermandAtlasGlossaryCategory.
Full Changelog: 6.0.6...6.1.0