Skip to content

Releases: atlanhq/atlan-python

v9.10.3

Choose a tag to compare

@Aryamanz29 Aryamanz29 released this 22 Jul 10:42
7ae54e1

๐ŸŽ‰ New Features

  • Metabase creator() factories: Added creator() factory methods for the Metabase asset family - MetabaseCollection, MetabaseDashboard, and MetabaseQuestion.

Full Changelog: 9.10.2...9.10.3

v9.10.2

Choose a tag to compare

@Aryamanz29 Aryamanz29 released this 21 Jul 16:39
ec429f6

๐ŸŽ‰ New Features

  • New INFORMATICA_POWERCENTER connector type: Added INFORMATICA_POWERCENTER to the supported connector types.

๐Ÿ“ฆ Packages

  • Dependencies refreshed while keeping Python 3.9 support: Runtime and dev dependencies were bumped to their current releases using python_version marker splits, so packages that have dropped Python 3.9 stay pinned to their last 3.9-compatible version on 3.9 and move forward on 3.10+.

  • msgspec cap lifted on Python 3.10+: msgspec now resolves to ~=0.21.1 on Python 3.10+ to avoid a known Python 3.13 concurrent-decode segfault, while Python 3.9 stays on ~=0.20.0.

Full Changelog: 9.10.1...9.10.2

v9.10.1

Choose a tag to compare

@Aryamanz29 Aryamanz29 released this 15 Jul 17:52
3be15f9

๐Ÿž Bug Fixes

  • Bulk audit search no longer fails on large result sets: Iterating a bulk audit search (client.audit.search(..., bulk=True)) over more than 10,000 matching events could fail partway with an Elasticsearch "Result window is too large" error and stop without returning the rest. Pagination now stays within the result-window limit no matter how many events match, so large audit scans complete and return every record.

Full Changelog: 9.10.0...9.10.1

v9.10.0

Choose a tag to compare

@Aryamanz29 Aryamanz29 released this 14 Jul 10:08
5881af3

๐Ÿž Bug Fixes

  • Clearer error when adding a tag that doesn't exist: Adding an Atlan tag by a name that isn't in your workspace now fails right away with a clear message that names the tag (Atlan tag with name <name> does not exist.), instead of a confusing server error that made it look like the tag had been deleted. Reading and re-saving assets that already carry a deleted tag continues to work as before.
  • Much faster imports: Importing asset models (for example, from pyatlan.model.assets import Column) is now about 3ร— faster โ€” a cold import drops from roughly 8 seconds to under 3. The improvement is largest on Windows, where imports could previously stall. Everything else behaves exactly the same.

๐Ÿ“ฆ Dependencies

  • cryptography upgraded to pick up an important security fix. Note: this now requires Python 3.9.1 or newer.

Full Changelog: 9.9.0...9.10.0

v9.9.0

Choose a tag to compare

@Aryamanz29 Aryamanz29 released this 30 Jun 08:45
8acb239

๐ŸŽ‰ New Features

  • Python 3.14 support: pyatlan now supports Python 3.14. The model layer's pydantic v1 compatibility shim was incompatible with Python 3.14's deferred-annotation semantics (PEP 649 / PEP 749) on pydantic 2.12.x โ€” AtlanClient failed to import with ConfigError: unable to infer type for attribute .... Bumping pydantic to 2.13.x restores the v1 compat layer on 3.14; no API changes. Verified across Python 3.9โ€“3.14.

  • New policy-action enums (PersonaAIAction, AdminAction, TypeDefAction): Added to pyatlan.model.enums, mirroring the Java SDK and matching the shape of the existing PersonaMetadataAction / DataAction. PersonaAIAction covers the 18 persona-ai-application-* / persona-ai-model-* Ranger slugs; AdminAction and TypeDefAction cover the admin-* and type-* / relationship slugs โ€” so tooling can convert raw Ranger policy-action slugs to their canonical enum names.

๐Ÿฅ— QOL Improvements

  • pydantic bumped from ~=2.12.5 to ~=2.13.4 (enables Python 3.14 support).

Full Changelog: 9.8.0...9.9.0

v9.8.0

Choose a tag to compare

@Aryamanz29 Aryamanz29 released this 26 Jun 13:50
dbe5bff

๐Ÿงช Experimental:

Native App workflows (client.app)

This release previews a brand-new way to create and manage connector workflows directly from pyatlan โ€” no hand-maintained package classes. It targets the native /v1/app* APIs and is experimental: the surface may change in a future release.

https://docs.atlan.com/product/capabilities/build-apps/sdks/python/apps

โœจ Highlights

AppClient โ€” full app-workflow lifecycle (sync + async). Create, run, schedule, list, update, and delete workflows over the /v1/app* APIs.

  • Resolve by name + idempotent create. get_all(name=...) filters by exact workflow name, and create(...) is idempotent on a duplicate name โ€” on the server's 409 it returns the existing workflow instead of erroring, so re-running a migration script is safe (create-or-reuse-by-name).

Typed app builders (pyatlan.model.apps) โ€” one per connector. A fluent, UI-equivalent builder (e.g. BigqueryCrawler, SnowflakeCrawler, AtlanTableau, PostgresCrawler, โ€ฆ) that mirrors the "new app" wizard โ€” Credential โ†’ Connection โ†’ Metadata.

from pyatlan.client.atlan import AtlanClient
from pyatlan.model.apps import BigqueryCrawler

client = AtlanClient()

response = (
    BigqueryCrawler(client)
    .service_account(email="...", service_account_json="...", project_id="...")
    .connection(name="bigquery-prod", admin_roles=[client.role_cache.get_id_for_name("$admin")])
    .include({"my_project": ["analytics", "sales"]})
    .run(name="bigquery-prod")
)
print(response.slug, response.run_id)  # persist `slug` for lifecycle ops

โš ๏ธ Deprecations

WorkflowClient (client.workflow) and model.packages.* are deprecated and now emit a DeprecationWarning. They target the legacy workflow surface, which no longer runs on the latest Atlan tenants - use client.app instead.

Full Changelog: 9.7.6...9.8.0

v9.7.6

Choose a tag to compare

@Aryamanz29 Aryamanz29 released this 16 Jun 10:35
48ad517

Bug Fixes ๐Ÿž

  • Batch/AsyncBatch tracked lists now carry real identity (both pyatlan and pyatlan_v9): the tracked lists (created / updated / partial_updated / restored) now carry each asset's real guid and qualified_name, so callers can match tracked items back to their inputs by either key. Previously non-glossary assets got a placeholder (negative) guid in pyatlan (or a missing/UNSET guid in pyatlan_v9) via trim_to_required(), and glossary terms got the guid in place of qualified_name in pyatlan (or a missing/UNSET qualified_name in pyatlan_v9) via ref_by_guid(), making the tracked items impossible to match back by guid or qualified_name. Tracking also now handles AtlasGlossaryCategory (and types it correctly as a category): previously a category in the tracked path crashed __track with ValueError("anchor.guid must be available"), because โ€” like AtlasGlossaryTerm โ€” its trim_to_required() requires the parent glossary anchor, which is absent in an AssetMutationResponse.

Full Changelog: 9.7.5...9.7.6

v9.7.5

Choose a tag to compare

@Aryamanz29 Aryamanz29 released this 16 Jun 06:49
355332d

Bug Fixes ๐Ÿž

  • Count partial updates in Batch/AsyncBatch: Successful partial updates โ€” primitive-only attribute changes (e.g. user_description alone) and any change touching a relationship (e.g. a glossary term's anchor) โ€” were never counted: they reported num_updated: 0 and were mislabeled as restored, causing retry storms for callers that retry on "nothing updated" (notably the common glossary-term path). They are now reconciled from both mutated_entities.PARTIAL_UPDATE and the top-level partial_updated_entities (de-duplicated by GUID) into new partial_updated / num_partial_updated trackers.

  • Fix MutatedEntities.PARTIAL_UPDATE alias collision: the field was mistakenly declared with alias="DELETE", colliding with the real DELETE field โ€” so wire PARTIAL_UPDATE payloads were dropped and deleted assets leaked into assets_partially_updated(). Corrected to alias="PARTIAL_UPDATE".

Full Changelog: 9.7.4...9.7.5

v9.7.4

Choose a tag to compare

@Aryamanz29 Aryamanz29 released this 02 Jun 08:12
3c621ab

Experimental: pyatlan_v9 ๐Ÿงช

  • Generated latest typedef models.

Full Changelog: 9.7.3...9.7.4

v9.7.3

Choose a tag to compare

@Aryamanz29 Aryamanz29 released this 25 May 10:56
77b86e7

๐ŸŽ‰ New Features

  • skillArtifactContent attribute on SkillArtifact: Adds the skill_artifact_content (skillArtifactContent) field to SkillArtifact in both pyatlan and pyatlan_v9. The Atlas API returns this attribute on SkillArtifact entities but PyAtlan was silently dropping it (Config.extra = ignore). This unblocks the Atlan MCP server from surfacing skill .md body content via get_asset / search_assets without needing a raw HTTP fallback. (#937)

๐Ÿž Bug Fixes

  • Connection.creator validates connector_type slug (BLDX-1294): Connection.creator and Connection.creator_async (both pyatlan and pyatlan_v9) now validate connector_type.value against ^[a-z0-9-]+$ โ€” the same pattern the Atlan platform's server-side asset-import (RAB) path enforces. Raises InvalidRequestError (ATLAN-PYTHON-400-079) on violation. Mirrors the Java SDK constraint. Root cause: a customer-created dev_cmdr connection (underscore in slug) caused RAB to reject every asset-import referencing it, leaving phantom Connection rows in Atlas. (#939)

Full Changelog: 9.7.2...9.7.3