Skip to content

Releases: atlanhq/atlan-python

v9.4.1

20 Apr 12:50
dbbddb0

Choose a tag to compare

New Features 🎉

  • Agentic type hierarchy: Added Python SDK support for the new Agentic hierarchy (Agentic, Artifact, Skill, SkillArtifact, Context, ContextRepository, ContextArtifact) with NanoID-based qualifiedName patterns and auto-populated parent refs on creators. Includes ContextLifecycleStatus enum and FileType.YAML/FileType.SQL additions.
  • FileType.MD enum value: Added md file type to the FileType enum.

QOL Improvements 🥗

  • Generator --override flag: Added --override flag to the generator script to force re-download of typedefs, bypassing the daily cache check.
  • Generator template coverage: Added Jinja2 asset, attribute, and import templates for all Agentic types so the code generator can reproduce creator methods.
  • _CORE_ASSETS updates: Added Agentic types, Dremio, Cloud, Google, and GCPDataplex to the core assets list to stabilize code generation layout.
  • Regenerated models from latest typedefs.

Full Changelog: 9.4.0...9.4.1

v8.5.4

16 Apr 08:45

Choose a tag to compare

🎉 New Features

  • Added md file type to enums.

Full Changelog: 8.5.3...8.5.4

v9.4.0

10 Apr 08:11
9ee6ff0

Choose a tag to compare

Experimental: pyatlan_v9 🧪

  • BusinessPolicyException, BusinessPolicyIncident, BusinessPolicyLog standalone classes: Added full standalone flat asset classes for these three business policy types. Previously only Related* reference types existed, so users couldn't create, search, or deprecate these asset types via pyatlan_v9.

QOL Improvements 🥗

  • Generated latest typedef models.

Full Changelog: 9.3.2...9.4.0

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.pyRICH_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