Releases: atlanhq/atlan-python
v9.2.2
🥗 QOL Improvements
PackageHeadersmodel and backward-compatible header emission: Introduced a typedPackageHeadersmodel to manage package-related HTTP headers.set_package_headersnow accepts explicit header values, and the SDK emits bothpackage-nameandapp-nameheaders to maintain backward compatibility with older backends./releaseskill: 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
🧪 Experimental pyatlan_v9
- Restored
validate(),minimize(),relate()SDK methods: All generated asset types now includevalidate(for_creation=False)for dry-run field validation (checkstype_name,name,qualified_name, optional QN pattern matching, and hierarchy-specific fields whenfor_creation=True),minimize()to produce a minimal updater copy, andrelate()to create aRelated{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
🧪 Experimental pyatlan_v9
- IDE autocompletion: Replaced custom AST-based lazy loading with
lazy_loader+ Pkl-generated.pyistub file. All 860+ asset classes now have full IDE type hints and autocompletion while keeping lazy import performance. - Pkl-generated
__init__.pyand__init__.pyi: The Pkl renderer now aggregates all typedefs (viaimport*glob) to generate__init__.py(withlazy_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.pyare 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), QuickSightuseLocalTypeAsPrefix, fully Pkl-generatedDataQualityRule, and referenceable field descriptors via overlays. type_nameserialization fix:type_namefield default changed toUNSETsoomit_defaults=Truenever omitstypeNamefrom API requests.- Simplified
transform.py: Removed_normalize_camel_key()and related camelCase abbreviation handling — msgspec structs use explicitfield(name=...)mappings. Asset registration now usescls.__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
AuthPolicywith 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
🥗 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__.pygenerator (SQL → DbtTest,atlan_apppriority ordering). - Moved
AtlanApp,AtlanAppTool,AtlanAppWorkflow, andAppWorkflowRunintocore/. - Added Claude Code skill (
/upgrade-deps) for automated SDK dependency maintenance.
⛑️ Breaking Changes
DynamoDBTable.creator()now raisesNotImplementedError. DynamoDB tables have a fundamentally different creation model and cannot reuse the inheritedTable.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 thePYATLAN_UPLOAD_FILE_BLOCKED_PATHSenvironment 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
🎉 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.Structinstead of PydanticBaseModel - Explicit
UNSETsentinel replaces Pydantic's implicit unset tracking omit_defaults=Trueandrename="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_v9is experimental and ships alongside the stablepyatlanpackage. 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 forpyatlan_v9.
⛑️ Breaking Changes
SSOClient.update_group_mapping()now requiresgroup_map_nameas a mandatory parameter.- Atlan tag task response no longer returns
classification_id.
Full Changelog: 8.5.3...9.0.0
v8.5.3
🥗 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
🥗 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.lockscans on PRs and main branch. - Limited uv dependency resolution to CPython and bumped
urllib3to fix CVEs. - Used constraint-dependencies for
cryptography.
Full Changelog: 8.5.1...8.5.2
v8.5.1
🐞 Bug Fixes
- Fixed iterative pagination in User and Group caches that prevented all records from being properly populated during cache refresh operations.
🥗 QOL Improvements
- Enhanced SDK client retry mechanism to automatically retry HTTP
302redirect responses, improving reliability when handling temporary redirects. - Updated admin integration tests to align with latest backend API changes.
Full Changelog: 8.5.0...8.5.1
v8.5.0
🎉 New Features
- Added support for new DQ rule templates.
Docs: https://developer.atlan.com/patterns/create/dq_rules
⛑️ Breaking Changes
DataQualityRule.table_level_rule_creator()andDataQualityRule.column_level_rule_creator()now acceptrule_typeas aDataQualityRuleTemplateTypeenum instead ofstr.threshold_compare_operatoris now an optional parameter forDataQualityRule.table_level_rule_creator().
Full Changelog: 8.4.6...8.5.0
v8.4.6
🎉 New Features
-
Added support for OAuth client management (
create,get,get_by_id,update,purge).
Docs: https://developer.atlan.com/snippets/access/oauth-clients -
Added optional
field_typeparameter toSearchableField.has_any_value(), allowing users to handle cases when text exceeds 5K characters (the keyword field on an attribute can be empty while the text field on the same attribute is populated).
Docs: https://developer.atlan.com/snippets/common-examples/finding/examples/#assets-with-long-descriptions
🥗 QOL Improvements
- Regenerated models with latest typedef definitions.
- Published
pyatlanwith Chainguard golden image for each new release.
Full Changelog: 8.4.5...8.4.6