Skip to content

Releases: atlanhq/atlan-python

v9.3.2

25 Mar 06:45
b14863b

Choose a tag to compare

Bug Fixes 🐞

  • Policy duplicate detection - allow updates to proceed: Revised the duplicate-detection logic (introduced in 9.2.0) so that legitimate policy updates are no longer blocked. The duplication check now only intercepts retried creations, not update requests.
  • AtlanTag displayName field: The AtlanTag classification model now accepts a displayName field that was previously rejected during deserialization.

Experimental: pyatlan_v9 πŸ§ͺ

  • Sync get/set_custom_metadata on Asset: Added synchronous get_custom_metadata() and set_custom_metadata() methods to the v9 Asset class, and fixed related custom metadata integration tests.

Full Changelog: 9.3.1...9.3.2

v9.3.1

23 Mar 08:07
2b48e48

Choose a tag to compare

Experimental: pyatlan_v9 πŸ§ͺ

typedef typing corrections and serialization fixes:

  • Corrected field types in RelationshipDef and removed hardcoded defaults.
  • Optional typedef fields now use msgspec.UNSET so they are omitted from serialization rather than emitted as null. AttributeDef.default_value and index_type_es_fields relaxed to Any to accommodate varied server responses.
  • is_rich_text and custom_metadata_version now default to UNSET via __post_init__ and the category field is no longer silently dropped by omit_defaults.

QOL Improvements πŸ₯—

  • Trivy action updated to 0.35.0: Keeps the security scanning workflow on a stable release.

Full Changelog: 9.3.0...9.3.1

v9.3.0

16 Mar 11:59
896d3ac

Choose a tag to compare

New Features πŸŽ‰

  • ModeChart.to_atlas_dict() and mode_report field: Added to_atlas_dict() method and mode_report attribute to the ModeChart model.

Bug Fixes 🐞

  • DQCondition value type ordering: Reordered the Union type for DQCondition.value to prioritize int over str, preventing integer values from being incorrectly coerced to strings during deserialization.
  • RICH_TEXT / STRING enum aliasing fix: AtlanCustomAttributePrimitiveType.RICH_TEXT now has a distinct enum value ("rich_text") instead of sharing "string" with STRING. Previously Python's Enum treated them as aliases, causing STRING attributes to incorrectly receive is_rich_text=True and RICH_TEXT multi-value restrictions to bleed into STRING attribute creation. The API-level primitive type sent in requests remains "string" for both (fixes PART-548).

Experimental: pyatlan_v9 πŸ§ͺ

  • RICH_TEXT / STRING enum aliasing fix: Same fix applied to pyatlan_v9/model/typedef.py β€” RICH_TEXT and STRING custom metadata attributes are now correctly distinguished in the v9 code path.

QOL Improvements πŸ₯—

  • Security guidelines for agents: Added security guidelines documentation for agents interacting with the atlan-python SDK.

Full Changelog: 9.2.2...9.3.0

v9.2.2

11 Mar 08:07

Choose a tag to compare

πŸ₯— QOL Improvements

  • PackageHeaders model and backward-compatible header emission: Introduced a typed PackageHeaders model to manage package-related HTTP headers. set_package_headers now accepts explicit header values, and the SDK emits both package-name and app-name headers to maintain backward compatibility with older backends.
  • /release skill: Added a Claude Code skill to automate SDK releases β€” bumps version, drafts release notes, commits, and tags.

Full Changelog: 9.2.1...9.2.2

v9.2.1

10 Mar 08:26
70a085d

Choose a tag to compare

πŸ§ͺ Experimental pyatlan_v9

  • Restored validate(), minimize(), relate() SDK methods: All generated asset types now include validate(for_creation=False) for dry-run field validation (checks type_name, name, qualified_name, optional QN pattern matching, and hierarchy-specific fields when for_creation=True), minimize() to produce a minimal updater copy, and relate() to create a Related{Type} reference. These are purely opt-in β€” not called by any serde path. Overlay files can override any of these methods.

Full Changelog: 9.2.0...9.2.1

v9.2.0

09 Mar 14:25
a5bcbe7

Choose a tag to compare

πŸ§ͺ Experimental pyatlan_v9

  • IDE autocompletion: Replaced custom AST-based lazy loading with lazy_loader + Pkl-generated .pyi stub file. All 860+ asset classes now have full IDE type hints and autocompletion while keeping lazy import performance.
  • Pkl-generated __init__.py and __init__.pyi: The Pkl renderer now aggregates all typedefs (via import* glob) to generate __init__.py (with lazy_loader.attach() mapping) and __init__.pyi (with explicit re-exports for IDEs) directly β€” no post-sync Python script needed. Hand-written types from _init_manual.py are included by reading the file at generation time.
  • Model updates: Regenerated all v9 models β€” GTC anchor regularization, entity lineage fields (depth, immediate_upstream, immediate_downstream), QuickSight useLocalTypeAsPrefix, fully Pkl-generated DataQualityRule, and referenceable field descriptors via overlays.
  • type_name serialization fix: type_name field default changed to UNSET so omit_defaults=True never omits typeName from API requests.
  • Simplified transform.py: Removed _normalize_camel_key() and related camelCase abbreviation handling β€” msgspec structs use explicit field(name=...) mappings. Asset registration now uses cls.__name__ directly.

πŸ₯— QOL Improvements

  • Regenerated latest typedef models.
  • Improved Claude Code review skill and added auto-review trigger on PR open.

⛑️ Breaking Changes

  • Policy duplicate detection during retries: When a policy creation request times out but actually succeeds on the backend, the SDK now detects the existing policy instead of blindly retrying and creating a duplicate. On retry, the transport layer searches for an existing AuthPolicy with the same name and persona GUID β€” if found, it returns a mock response containing the existing policy. Code that relied on retries always creating new policies will now receive the existing policy instead.

Full Changelog: 9.1.0...9.2.0

v9.1.0

06 Mar 11:51
fae3714

Choose a tag to compare

πŸ₯— QOL Improvements

  • Regenerated latest typedef models.
  • Upgraded Python dependencies (pydantic, ruff, mypy, pytz, and others) and GitHub Actions to latest versions.
  • Replaced Sphinx with MkDocs + mkdocstrings for SDK documentation.
  • Fixed circular import chains in core/__init__.py generator (SQL β†’ DbtTest, atlan_app priority ordering).
  • Moved AtlanApp, AtlanAppTool, AtlanAppWorkflow, and AppWorkflowRun into core/.
  • Added Claude Code skill (/upgrade-deps) for automated SDK dependency maintenance.

⛑️ Breaking Changes

  • DynamoDBTable.creator() now raises NotImplementedError. DynamoDB tables have a fundamentally different creation model and cannot reuse the inherited Table.creator(). Submit an enhancement request if you need this implemented.
  • FileClient.upload_file() now blocks uploads of sensitive files (system paths, credential directories, hidden config files) to prevent accidental secret exposure. Users can extend the blocklist via the PYATLAN_UPLOAD_FILE_BLOCKED_PATHS environment variable (comma-separated substrings matched against the resolved path):
    # .env
    export PYATLAN_UPLOAD_FILE_BLOCKED_PATHS="/custom/secrets/,.vault,.credentials"

Full Changelog: 9.0.0...9.1.0

v9.0.0

05 Mar 14:09
192c20f

Choose a tag to compare

πŸŽ‰ New Features

  • Added DynamoDBAttribute.creator() methods.
  • Added support for new connector type AtlanConnectorType.ALLOYDB_POSTGRES.

πŸ§ͺ Experimental

pyatlan_v9 β€” Next-generation Pyatlan SDK powered bymsgspec πŸ’ͺ

Introduced pyatlan_v9, a ground-up rebuild of the SDK's data layer replacing Pydantic v1 with msgspec. Ships with full functional parity β€” models, clients, caches, and serde β€” while delivering 35-50x faster serialization performance. No implicit validators, fully typed, and extensible by design.

Key design changes:

  • All models use msgspec.Struct instead of Pydantic BaseModel
  • Explicit UNSET sentinel replaces Pydantic's implicit unset tracking
  • omit_defaults=True and rename="camel" handle JSON wire format natively
  • Zero runtime validation overhead β€” type safety enforced at decode time

Benchmark results (Python 3.11, msgspec 0.20.0, macOS):

Operation msgspec (v9) Pydantic v1 Speedup
Object creation 1.6–2.3 us 75–102 us ~40-50x
Serialization 0.37–0.42 us 14–17 us ~35-46x
Deserialization 1.7–1.8 us 59–65 us ~35-36x
Round-trip (ser + deser) 2.1–2.2 us 79–85 us ~37-41x

pyatlan_v9 is experimental and ships alongside the stable pyatlan package. APIs may change in future releases.

πŸ₯— QOL Improvements

  • Regenerated latest SDK models.
  • Switched Claude Code review model to Opus.
  • Fixed flaky integration test failures across PR runs.
  • Added Claude Code skill (/generate-v9-models) to generate and sync msgspec models for pyatlan_v9.

⛑️ Breaking Changes

  • SSOClient.update_group_mapping() now requires group_map_name as a mandatory parameter.
  • Atlan tag task response no longer returns classification_id.

Full Changelog: 8.5.3...9.0.0

v8.5.3

17 Feb 10:17
f0ca3e8

Choose a tag to compare

πŸ₯— QOL Improvements

  • Added scheduled Trivy scan with Linear ticket creation.
  • Added Claude Code workflow with /review skill for PR reviews.

Full Changelog: 8.5.2...8.5.3

v8.5.2

13 Feb 08:22
d4d4f1a

Choose a tag to compare

πŸ₯— QOL Improvements

  • Added Harbor as an additional container registry alongside GHCR and updated Docker docs to reference Harbor pulls.
  • Added Snyk dependency scanning via requirements.txt, pre-commit sync, and local scan instructions.
  • Added Trivy image and uv.lock scans on PRs and main branch.
  • Limited uv dependency resolution to CPython and bumped urllib3 to fix CVEs.
  • Used constraint-dependencies for cryptography.
    Full Changelog: 8.5.1...8.5.2