Skip to content

Releases: atlanhq/atlan-python

v7.1.6

07 Aug 11:33
3f7d250

Choose a tag to compare

🥗 QOL Improvements

  • Added support for adding DQ rules 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

01 Aug 17:23
c2fc76e

Choose a tag to compare

🧪 Experimental

  • Added creator() and updater() methods for alpha_DQRule (data quality rule) asset.

🥗 QOL Improvements

  • Generated latest typedef models.

Full Changelog: 7.1.4...7.1.5

v7.1.4

30 Jul 05:36
7a03f61

Choose a tag to compare

🎉 New Features

  • Added new connector types: AI, SAP_ECC.
  • Added new connector categories: AI, ERP.
  • Added creator() methods for AI-based assets.
  • Added support for applicable_ai_asset_types to custom metadata AttributeDef.Options.

🧪 Experimental

  • Added support for AtlanClient initialization via API token guid.

🐞 Bug Fixes

  • Fixed handling of source_tag when no attributes present.

🥗 QOL Improvements

  • Generated latest typedef models.
  • Updated Dockerfile to use python:3.13.5-slim-bookworm.
  • Removed unused requirements files (now using pyproject.toml).

Full Changelog: 7.1.3...7.1.4

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