Skip to main content

Dataclass runtime machinery for declarative DSLs

Project description

dataclass-dsl

CI PyPI Version Python Version License: MIT

Build declarative Python DSLs where infrastructure and configuration look like this:

from . import *

class LogBucketEncryption:
    resource: s3.Bucket.BucketEncryption
    server_side_encryption_configuration = [LogBucketEncryptionRule]

class LogBucket:
    resource: s3.Bucket
    bucket_encryption = LogBucketEncryption
    public_access_block_configuration = LogBucketPublicAccessBlock
    versioning_configuration = LogBucketVersioning

No decorators. No function calls. No boilerplate.

The Pattern

Domain packages built on dataclass-dsl share three properties:

Property What it means
Single import from . import * — everything available, loaded in dependency order
Zero decorators Classes are plain declarations, machinery is invisible
Flat wrappers Each class wraps a resource type with simple attribute assignments

The result reads like configuration, but with full Python power: IDE autocomplete, type checking, refactoring, and the ability to use variables, loops, and conditionals when needed.

What This Enables

Reference other resources by class name:

class AppSubnet:
    resource: Subnet
    vpc = AppVPC                    # Reference to another resource
    cidr_block = "10.0.1.0/24"

Reference specific attributes:

class LambdaFunction:
    resource: Function
    role_arn = ExecutionRole.Arn    # Gets the Arn of ExecutionRole

Compose nested configurations:

class BucketEncryption:
    resource: s3.Bucket.BucketEncryption
    server_side_encryption_configuration = [EncryptionRule]

class MyBucket:
    resource: s3.Bucket
    bucket_encryption = BucketEncryption

Use lists and maps of references:

class LoadBalancer:
    resource: ALB
    subnets = [SubnetA, SubnetB, SubnetC]
    security_groups = [WebSecurityGroup]

How It Works

dataclass-dsl provides the runtime machinery that makes this pattern possible:

  • Automatic dependency detection — References between classes are detected at runtime
  • Topological ordering — Resources are serialized in dependency order
  • Multi-file supportsetup_resources() loads files in the right order, enabling from . import *
  • IDE stub generation — Full autocomplete and type checking despite dynamic imports

Domain packages use these primitives to create decorators and loaders that are invisible to end users.

Installation

uv add dataclass-dsl

Using a Domain Package

If you're using a domain package built on dataclass-dsl (like an AWS CDK alternative or Kubernetes manifest generator), follow that package's documentation. You'll write clean declarative classes without needing to understand the internals.

Building a Domain Package

If you're creating a domain package, see the Internals Guide for:

  • Creating a domain-specific decorator with create_decorator()
  • Setting up multi-file packages with setup_resources()
  • Implementing a Provider for your target format
  • Generating IDE stubs for from . import *

Also see the AWS S3 example to see what a domain package produces.

Documentation

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dataclass_dsl-1.1.0.tar.gz (61.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dataclass_dsl-1.1.0-py3-none-any.whl (54.3 kB view details)

Uploaded Python 3

File details

Details for the file dataclass_dsl-1.1.0.tar.gz.

File metadata

  • Download URL: dataclass_dsl-1.1.0.tar.gz
  • Upload date:
  • Size: 61.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for dataclass_dsl-1.1.0.tar.gz
Algorithm Hash digest
SHA256 8a9a75e55c4083e81663da220500b443823dd5780e35294265979b2f94a79499
MD5 646633341e1f10152c934f3caf8800c3
BLAKE2b-256 b16d05efb2e9fbe878f712a1787844be7ad474dcf0bff8f785f83ab5db0dd274

See more details on using hashes here.

Provenance

The following attestation bundles were made for dataclass_dsl-1.1.0.tar.gz:

Publisher: release.yml on lex00/dataclass-dsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dataclass_dsl-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: dataclass_dsl-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 54.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for dataclass_dsl-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5a459ae52069822bcbe9ac05f4ee2f90fd987a8e14e823602b4812c37b0ad29b
MD5 682aa17bc2ceb18b8cdd4ea38c9f679b
BLAKE2b-256 fd7af398d2a812c8a81a244e2321446485cf3b531ac1ea367b47430b69df0b7d

See more details on using hashes here.

Provenance

The following attestation bundles were made for dataclass_dsl-1.1.0-py3-none-any.whl:

Publisher: release.yml on lex00/dataclass-dsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page