GitHub - atlanhq/atlan-python: Official Python SDK for the Atlan ๐Ÿ’™

-----------------------------------------------------

๐Ÿ“Š Project Stats

  • ๐Ÿ 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

๐Ÿ“ฆ Installation

Production Use

# 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

Development Setup

# 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

Dependency Groups

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

๐Ÿณ Docker

Pre-built Images (Harbor)

# 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

Usage

# 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

๐Ÿ”’ Security Scans

Run Snyk locally (dependencies)

uv export --all-extras --no-hashes > requirements.txt
snyk test --file=requirements.txt --severity-threshold=high --skip-unresolved
rm -f requirements.txt

๐Ÿงช Testing

Unit Tests

# Run all unit tests
uv run pytest tests/unit

# Run with coverage
uv run pytest tests/unit --cov=pyatlan --cov-report=html

Integration Tests

# Set up environment
cp .env.example .env
# Edit .env with your Atlan credentials

# Run integration tests
uv run pytest tests/integration

Quality Assurance

# 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

๐Ÿค Contributing

We welcome contributions! Here's how to get started:

Development Setup

# 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

Making Changes

# 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

Guidelines

  • โœ… Follow conventional commits
  • โœ… Add tests for new features
  • โœ… Update documentation as needed
  • โœ… Ensure all QA checks pass

๐Ÿ› ๏ธ SDK Generator

Generate asset models from your Atlan instance:

# Generate models automatically
uv run ./generator

# Use custom typedefs file
uv run ./generator ./my-typedefs.json

This will:

  • ๐Ÿ“ฅ Retrieve typedefs from your Atlan instance
  • ๐Ÿ—๏ธ Generate asset models, enums, and structures
  • ๐ŸŽจ Format code automatically
  • โšก Support incremental updates

๐Ÿ“ Project Structure

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

Key Components

๐ŸŒ Client Layer (pyatlan/client/)

  • 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.)

๐Ÿ“Š Model Layer (pyatlan/model/)

  • 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

๐Ÿ’พ Cache Layer (pyatlan/cache/)

  • 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

๐Ÿ—๏ธ Generation System (pyatlan/generator/)

  • Templates: Jinja2 templates for assets, enums, documentation
  • Generator: Retrieves typedefs and generates Python models
  • Incremental: Only regenerates changed models for efficiency

๐Ÿงช Testing Strategy

  • Unit Tests: Fast, isolated tests with mocks/fixtures
  • Integration Tests: Real API calls (requires credentials)
  • VCR Cassettes: Record/replay HTTP interactions for consistent testing

๐Ÿ“ฆ Package System (pyatlan/pkg/)

  • Custom Packages: Framework for building Atlan-deployable packages
  • Templates: Pre-built package structures and configurations
  • Utilities: Helper functions for package development

Development Workflow

  1. Models: Generated from your Atlan instance's typedefs
  2. Clients: Hand-crafted for optimal developer experience
  3. Tests: Mix of unit (fast iteration) and integration (real validation)
  4. Quality: Automated formatting, linting, and type checking
  5. Documentation: Auto-generated from docstrings and examples

๐Ÿ“„ License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

๐Ÿ™ Attribution

Portions of this SDK are based on original work from:

-----------------------------------------------------