Skip to main content

DAN (Data Advanced Notation) Python Library

Python Version License

A Python implementation of the DAN (Data Advanced Notation) parser and encoder. DAN is a human-readable data format that combines the simplicity of key-value pairs with the power of nested structures and tables.

Features

  • Decode: Parse DAN text into Python dictionaries
  • Encode: Convert Python dictionaries into DAN text
  • Support for nested blocks, tables, arrays, and various data types
  • Comment support (# and //)
  • Type inference (strings, numbers, booleans, arrays)
  • Comprehensive test suite with 40+ test cases
  • Multiple real-world examples

See FEATURES.md for a complete feature list.

Installation

This repo uses uv for environments and lockfiles (uv.lock).

# Install uv: https://docs.astral.sh/uv/getting-started/installation/
uv sync

Editable install from a clone:

git clone https://github.com/marcuwynu23/dan-py.git
cd dan-py
uv sync

With dev tools (e.g. pytest):

uv sync --group dev
uv run pytest tests/

You can still install from PyPI with pip when a release is published:

pip install dan-annotation

Quick Start

Decoding DAN

from dan import decode

text = """
app {
  name: "MyApp"
  version: 1.0
  server {
    host: localhost
    port: 3000
  }
}
"""

data = decode(text)
print(data)
# {'app': {'name': 'MyApp', 'version': 1.0, 'server': {'host': 'localhost', 'port': 3000}}}

Encoding to DAN

from dan import encode

data = {
    "app": {
        "name": "MyApp",
        "version": 1.0,
        "server": {
            "host": "localhost",
            "port": 3000
        }
    }
}

text = encode(data)
print(text)

Working with Tables

text = """
users: table(id, username, email) [
  1, alice, "alice@example.com"
  2, bob, "bob@example.com"
]
"""

data = decode(text)
# {'users': [{'id': 1, 'username': 'alice', 'email': 'alice@example.com'}, ...]}

Reading from Files

from dan import decode

with open('config.dan', 'r') as f:
    config = decode(f.read())

Examples

Check out the examples/ directory for real-world usage scenarios:

  • Application configuration (config.dan)
  • Database schemas (database_schema.dan)
  • API routes (api_routes.dan)
  • Microservices configuration (microservices.dan)
  • Docker Compose (docker_compose.dan)
  • Kubernetes resources (kubernetes.dan)
  • And many more!

Running Tests

# Run all tests
python -m unittest discover tests -v

# Run specific test file
python -m unittest tests.test_dan -v

# Using pytest (if installed)
pytest tests/

Documentation

Contributing

Contributions are welcome! Please read CONTRIBUTING.md and CODE_OF_CONDUCT.md. Optional support: PayPal or the repository Sponsor button (.github/FUNDING.yml).

License

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

Security

Please report security vulnerabilities to the maintainers. See SECURITY.md for more information.

Support

Metadata

Release files for dan-annotation 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dan-annotation 1.0.0
File Size Uploaded
dan_annotation-1.0.0.tar.gz 10.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dan-annotation 1.0.0
File Interpreter ABI Platform
dan_annotation-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 16.1 kB

Release files / dan_annotation-1.0.0.tar.gz

Download URL dan_annotation-1.0.0.tar.gz
Size 10.0 kB
Tags Source
SHA-256 checksum
How to use checksums
3dd7ed043a798e906a0e75fe7ea8ed3528e83052d0ac840a3c90345ae5c7f1b0
BLAKE2b-256 checksum
How to use checksums
387badc3035394b99c532823dec80b762ece3f7e9e0e1f3586d854896cdd8d40
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dan_annotation-1.0.0-py3-none-any.whl

Download URL dan_annotation-1.0.0-py3-none-any.whl
Size 6.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ad87b09ff955e7eff383d76414f8b7d3d3f0f878e764139df00fe42fadd49c0a
BLAKE2b-256 checksum
How to use checksums
dcad292a3f0d4818603154bcfa39523ee96da458dc6144452cafa33eb4da38cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page