Skip to main content

Dataclass runtime machinery for declarative DSLs

Project description

dataclass-dsl

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.0.1.tar.gz (58.2 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.0.1-py3-none-any.whl (53.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: dataclass_dsl-1.0.1.tar.gz
  • Upload date:
  • Size: 58.2 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.0.1.tar.gz
Algorithm Hash digest
SHA256 ab52ad7d310780be9c35ef19a2975d34cb613c580c0e5aa1a12c7247d245ff7c
MD5 747115f14d527d89bc7ecf857d82b6de
BLAKE2b-256 85ff41bc1db334a4ff536ebbaa1adcc1f0ed5030b66b8673961619b19b19a39f

See more details on using hashes here.

Provenance

The following attestation bundles were made for dataclass_dsl-1.0.1.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.0.1-py3-none-any.whl.

File metadata

  • Download URL: dataclass_dsl-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 53.6 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.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ba4b1d00a8d206e28f9adba002ed59101c657621010be47f01694e8d77529781
MD5 b8a29d45ce7535c30d1ab4836d1b8d9d
BLAKE2b-256 325ee353cb6b015d8d1cd00f1866d78821c9470f0cec0582e546a6b2575bf636

See more details on using hashes here.

Provenance

The following attestation bundles were made for dataclass_dsl-1.0.1-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