Skip to content

Releases: atlanhq/atlan-python

v7.1.3

21 Jul 14:49
5a52a5b

Choose a tag to compare

🐞 Bug Fixes

  • Fixed multi-value select bug in the CM attribute setter.

Full Changelog: 7.1.2...7.1.3

v7.1.2

11 Jul 13:04
b995816

Choose a tag to compare

πŸ₯— QOL Improvements

  • Generated latest typedefs models.
  • Fixed suggestions_test integration test.
  • Updated Dockerfile to use python:3.11-slim.
  • Migrated SDK to use uv for development, building, and publishing the SDK.
  • Added delete_type:HARD optional parameter to AssetClient.purge_by_guid() method.
  • Made FluentSearch usage in get_by_*() methods consistent with GET API (return active and archived assets).

Full Changelog: 7.1.1...7.1.2

v7.1.1

30 Jun 11:11
ed1e0a9

Choose a tag to compare

πŸ₯— QOL Improvements

  • Regenerated latest typedef models.

Full Changelog: 7.1.0...7.1.1

v7.1.0

27 Jun 20:32
1a13914

Choose a tag to compare

πŸŽ‰ 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:

  1. AtlasGlossaryAntonym
  2. AtlasGlossarySynonym
  3. AtlasGlossaryReplacementTerm
  4. AtlasGlossarySemanticAssignment
  5. AtlasGlossaryPreferredTerm
  6. AtlasGlossaryRelatedTerm
  7. AtlasGlossaryTermCategorization
  8. AtlasGlossaryTranslation
  9. AtlasGlossaryValidValue
  10. AtlasGlossaryIsARelationship
  11. CustomParentEntityCustomChildEntities
  12. CustomRelatedFromEntitiesCustomRelatedToEntities
  13. UserDefRelationship

🐞 Bug Fixes

  • Fixed automatic 401 token refresh by using ContextVar for AtlanClient._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 typeName is present in the relationship attributes, the SDK will attempt to deserialize using the correct subclass of RelationshipAttributes.

  • If typeName is absent, it will fall back to a raw Dict[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

16 Jun 17:15
212ce28

Choose a tag to compare

🐞 Bug Fixes

  • Fixed FluentSearch criteria used for get_by_qualified_name/guid method to include asset type_name.

Full Changelog: 7.0.0...7.0.1

v7.0.0

12 Jun 16:43
238ae72

Choose a tag to compare

πŸŽ‰ New Features

  • Added long as a new primitive type in the AtlanCustomAttributePrimitiveType enum.
  • Support for Unmodeled Asset types: Introduced IndistinctAsset as a fallback model to handle asset types that are not explicitly modeled in the SDK. Previously, such assets would return None (e.g: for newly introduced typedefs). With this release, the SDK will now return an IndistinctAsset instance containing basic fields such as guid, qualifiedName, and typeName.

🐞 Bug Fixes

  • Fixed timestamp-based pagination in search log results when from + size exceeds the Elasticsearch window size (10,000 records) 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)
  • CustomMetadataProxy is no longer initialized in Referenceable.__init__() (as it now requires a client).
  • 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 AtlanRequest wrapper, 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 AtlanResponse wrapper.
  • 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 valid client). If skipped, tag names remain in hashed ID format or as plain strings.
  • Deleted tags (e.g AtlanTagName('(DELETED)')) will only appear when using AtlanResponse, as the lookup requires a client to determine tag validity.
  • The .id attribute on AtlanTagName has been deprecated. Use AtlanTag.tag_id to access the hashed ID instead.
  • Fixed typo in AtlanTag.source_tag_attachments field name.

Other Changes

  • AtlanClient._401_has_retried is now marked as a PrivateAttr.

  • IndexSearchRequest.Metadata has 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() and AssetClient.find_product_by_name() to return only active Domain and Product assets. Previously, these methods returned both active and archived assets, which caused issues when assets with the same name existed in both states - the first match (possibly archived) 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

30 May 16:28
92cce13

Choose a tag to compare

🐞 Bug Fixes

  • Extended the applicable_asset_types attribute definition to accept Union[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

27 May 11:22
f22db78

Choose a tag to compare

πŸŽ‰ New Features

  • Added support for append_atlan_tags in the AssetClient.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 /bulk endpoint 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 /bulk endpoint. As a result, these methods will now return an AssetMutationResponse instead of None, reflecting the updated API response structure.

🐞 Bug Fixes

  • Added default typeName=Referenceable to Bool(must) clauses when typeName is not explicitly provided in the search request. This ensures the SDK retrieves only assets that inherit from the Referenceable supertype.

πŸ₯— QOL Improvements

  • Regenerated the latest typedef models.

Full Changelog: 6.1.1...6.2.0

v6.1.1

21 May 10:56
6cbd422

Choose a tag to compare

πŸŽ‰ 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 typeName filter is not explicitly provided in the search request, the SDK now defaults to retrieving only assets with the Referenceable supertype. 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 401 response.

Full Changelog: 6.1.0...6.1.1

v6.1.0

14 May 19:41
a130816

Choose a tag to compare

πŸŽ‰ New Features

  • Implemented iterative pagination in WorkflowClient search methods.
  • Added support for dynamic extension of AtlanConnectorType to enable custom connectors.
  • Migrated from TLS to ContextVars to support both multithreaded and asynchronous environments.
  • Introduced PyAtlanThreadPoolExecutor in pyatlan.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 both AtlasGlossaryTerm and AtlasGlossaryCategory.

Full Changelog: 6.0.6...6.1.0