- ๐ Python Versions: 3.9, 3.10, 3.11, 3.12, 3.13
- ๐ฆ Package Size: Optimized for fast installation
- ๐ Performance: Built with modern async/await support
- ๐ง Dependencies: Minimal, modern stack
- ๐ Stability: Production-ready
# Latest stable version pip install pyatlan # Specific version pip install pyatlan==7.1.3 # With uv (faster) - install uv first: curl -LsSf https://astral.sh/uv/install.sh | sh uv add pyatlan
# Clone the repository git clone https://github.com/atlanhq/atlan-python.git cd atlan-python # Install uv (if not already installed) curl -LsSf https://astral.sh/uv/install.sh | sh # Install with development dependencies uv sync --group dev # Run quality checks uv run ./qa-checks # Run tests uv run pytest tests/unit
This project uses uv dependency groups for better dependency management:
- Core dependencies: Always installed (
uv sync) - Development dependencies: Testing, linting, formatting (
uv sync --group dev) - Documentation dependencies: Sphinx docs (
uv sync --group docs)
You can install multiple groups:
# Install both dev and docs dependencies uv sync --group dev --group docs # Install all dependencies uv sync --all-groups
# Latest main image docker pull registry.atlan.com/public/pyatlan:main-latest # Version + Python tag docker pull registry.atlan.com/public/pyatlan:8.5.1-3.11 # Commit-specific image docker pull registry.atlan.com/public/pyatlan:sha-1a064032
# Interactive Python session docker run -it --rm registry.atlan.com/public/pyatlan:main-latest # Run a script docker run -it --rm \ -v $(pwd):/app \ -e ATLAN_API_KEY=your_key \ -e ATLAN_BASE_URL=https://your-tenant.atlan.com \ registry.atlan.com/public/pyatlan:main-latest \ python your_script.py
uv export --all-extras --no-hashes > requirements.txt snyk test --file=requirements.txt --severity-threshold=high --skip-unresolved rm -f requirements.txt
# Run all unit tests uv run pytest tests/unit # Run with coverage uv run pytest tests/unit --cov=pyatlan --cov-report=html
# Set up environment cp .env.example .env # Edit .env with your Atlan credentials # Run integration tests uv run pytest tests/integration
# Run all QA checks (formatting, linting, type checking) uv run ./qa-checks # Individual checks uv run ruff format . # Code formatting uv run ruff check . # Linting uv run mypy . # Type checking
We welcome contributions! Here's how to get started:
# Fork and clone the repository git clone https://github.com/your-username/atlan-python.git cd atlan-python # Install uv (if not already installed) curl -LsSf https://astral.sh/uv/install.sh | sh # Install development dependencies uv sync --group dev # Install pre-commit hooks uv run pre-commit install
# Create a feature branch git checkout -b feature/amazing-feature # Make your changes and test uv run ./formatter uv run ./qa-checks uv run pytest tests/unit # Commit with conventional commits git commit -m "feat: add amazing feature" # Push and create a pull request git push origin feature/amazing-feature
- โ Follow conventional commits
- โ Add tests for new features
- โ Update documentation as needed
- โ Ensure all QA checks pass
Generate asset models from your Atlan instance:
# Generate models automatically uv run ./generator # Force re-download typedefs (bypass cache) uv run ./generator --override # Use custom typedefs file uv run ./generator ./my-typedefs.json # Both flags can be combined uv run ./generator --override ./my-typedefs.json
This will:
- ๐ฅ Retrieve typedefs from your Atlan instance
- ๐๏ธ Generate asset models, enums, and structures
- ๐จ Format code automatically
- โก Support incremental updates
Generate the app builders in pyatlan.model.apps (one per connector
app) from your tenant's UI configmaps. Each app gets a typed *Inputs model and a
fluent, UI-equivalent builder (Credential โ Connection โ Metadata), plus a matching
unit-test module under tests/unit/apps/.
# Needs a tenant with the apps installed export ATLAN_BASE_URL=https://<your-tenant-host> export ATLAN_API_KEY=<your-api-key> # Regenerate all app builders + their tests uv run generate-apps
This will:
- ๐ Discover installed apps (live discovery โช the manifest in
generate_apps.py) - ๐งฉ Read each app's UI configmaps for fields, labels, enums, and the credential form
- ๐๏ธ Emit a
{App}Inputsmodel +{App}builder per app (hand-written builders are never overwritten) - ๐งช Generate a per-app config-assertion test module
- ๐จ Format code automatically
To cover an app that isn't currently running on the tenant, add its
(app_id, entrypoint)toMANIFESTinpyatlan/generator/generate_apps.py.
The pyatlan_v9 package uses msgspec Struct-based models generated from Pkl type definitions in the atlanhq/models repo.
The recommended way to regenerate models is via the Claude Code skill:
# From the atlan-python repo root: /generate-v9-models # Generate from models@master /generate-v9-models <branch> # Generate from a specific models branch /generate-v9-models test # Generate and run tests /generate-v9-models <branch> test
The skill will:
- Clone/update
atlanhq/modelsat../models - Run the Pkl code generator with SDK mode (
pkl eval typedefs/*.pkl -m . -p sdk=true) - Selectively sync generated files to
pyatlan_v9/model/assets/(excluding hand-written types) - Apply post-sync patches (e.g.,
set[str]fields inasset.py) - Optionally run
tests_v9/unit/tests
Custom methods (creator(), updater(), policy helpers, etc.) live in pyatlan_v9/model/assets/_overlays/. These are Python files read by the Pkl renderer and injected into generated classes. Each overlay file uses import directives:
# IMPORT:โ external imports (not remapped)# INTERNAL_IMPORT:โ internal imports (remapped topyatlan_v9.*)# STDLIB_IMPORT:โ standard library imports
Some types are not yet fully generated and are maintained by hand:
- Infrastructure:
__init__.py,entity.py,referenceable.py - GTC types:
atlas_glossary.py,atlas_glossary_term.py,atlas_glossary_category.py - Others:
persona.py,purpose.py,badge.py,access_control.py,auth_policy.py, etc.
Understanding the codebase layout will help you navigate and contribute effectively:
atlan-python/
โโโ pyatlan/ # ๐ Main Python package
โ โโโ __init__.py # Package initialization
โ โโโ cache/ # ๐พ Caching mechanisms
โ โ โโโ atlan_tag_cache.py # Tag name โ GUID mapping
โ โ โโโ custom_metadata_cache.py # Custom metadata definitions
โ โ โโโ enum_cache.py # Enum value caching
โ โ โโโ aio/ # Async versions of caches
โ โโโ client/ # ๐ HTTP client implementations
โ โ โโโ atlan.py # Main synchronous client
โ โ โโโ asset.py # Asset operations (CRUD, search)
โ โ โโโ admin.py # Administrative operations
โ โ โโโ audit.py # Audit log operations
โ โ โโโ common/ # Shared client logic
โ โ โโโ aio/ # Async client implementations
โ โโโ model/ # ๐ Data models and assets
โ โ โโโ assets/ # Asset type definitions
โ โ โ โโโ core/ # Core asset types (Table, Database, etc.)
โ โ โ โโโ relations/ # Relationship models
โ โ โโโ fields/ # Search field definitions
โ โ โโโ open_lineage/ # OpenLineage specification models
โ โ โโโ packages/ # Package/workflow models
โ โ โโโ aio/ # Async model variants
โ โโโ generator/ # ๐๏ธ Code generation tools
โ โ โโโ templates/ # Jinja2 templates for generation
โ โ โโโ class_generator.py # Main generation logic
โ โโโ pkg/ # ๐ฆ Package creation utilities
โ โโโ events/ # ๐ Event handling (webhooks, lambdas)
โ โโโ samples/ # ๐ก Example code and scripts
โ โโโ test_utils/ # ๐งช Testing utilities
โโโ tests/ # ๐งช Test suite
โ โโโ unit/ # Unit tests (fast, no external deps)
โ โโโ integration/ # Integration tests (require Atlan instance)
โ โโโ data/ # Test fixtures and mock data
โโโ docs/ # ๐ Sphinx documentation
โ โโโ conf.py # Sphinx configuration
โ โโโ *.rst # Documentation source files
โโโ pyproject.toml # ๐ Project configuration (deps, tools)
โโโ uv.lock # ๐ Locked dependencies
โโโ qa-checks # โ
Quality assurance script
โโโ formatter # ๐จ Code formatting script
โโโ generator # ๐๏ธ Model generation script
- Synchronous: Direct HTTP operations using
httpx - Asynchronous: Async/await operations using
httpx.AsyncClient - Common: Shared business logic between sync/async clients
- Specialized: Domain-specific clients (admin, audit, lineage, etc.)
- Assets: 400+ asset types (tables, dashboards, pipelines, etc.)
- Core Models: Base classes, requests, responses
- Fields: Search and filtering field definitions
- OpenLineage: Data lineage specification compliance
- Tag Cache: Maps human-readable tag names to internal GUIDs
- Custom Metadata: Caches custom attribute definitions
- Connection Cache: Stores connector and connection metadata
- Async Variants: Full async implementations for all caches
- Templates: Jinja2 templates for assets, enums, documentation
- Generator: Retrieves typedefs and generates Python models
- Incremental: Only regenerates changed models for efficiency
- Unit Tests: Fast, isolated tests with mocks/fixtures
- Integration Tests: Real API calls (requires credentials)
- VCR Cassettes: Record/replay HTTP interactions for consistent testing
- Custom Packages: Framework for building Atlan-deployable packages
- Templates: Pre-built package structures and configurations
- Utilities: Helper functions for package development
- Models: Generated from your Atlan instance's typedefs
- Clients: Hand-crafted for optimal developer experience
- Tests: Mix of unit (fast iteration) and integration (real validation)
- Quality: Automated formatting, linting, and type checking
- Documentation: Auto-generated from docstrings and examples
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Portions of this SDK are based on original work from:
- Apache Atlas (Apache-2.0 license)
- Elasticsearch DSL (Apache-2.0 license)
Built with ๐ by Atlan
Website โข Documentation โข Support

