Skip to main content

No project description provided

Project description

Übertyped

Convert dataclass to TypedDict for fun and (type) safety 🪄

uber- /ˈuːbə/ to a great or extreme degree

Requirements

  • python>=3.11
  • mypy>=1.0.1

Installation

pip install ubertyped

Mypy plugin

Add ubertyped.mypy_plugin to the list of plugins in your mypy config file (for example pyproject.toml)

[tool.mypy]
python_version = "3.11"
plugins = ["ubertyped.mypy_plugin"]

Features

  • AsTypedDict[T] generic type converting dataclasses to TypeDicts
  • as_typed_dict utility function wrapping dataclasses.asdict
  • ✅ Support for usage with TypeVars
  • ✅ Nested dataclasses
  • ✅ Compatibility with other typecheckers such as Pylance and Pyright
  • ✅ Zero dependencies

Usage

from dataclasses import asdict, dataclass
from typing import Self, reveal_type

from ubertyped import AsTypedDict, as_typed_dict


@dataclass
class Base:
    base: bool


@dataclass
class IntWraper:
    value: int


@dataclass
class Data(Base):
    version: IntWraper
    command: str

    def as_typed_dict(self) -> AsTypedDict[Self]:
        return as_typed_dict(self)


data = Data(version=IntWraper(1), command="c", base=False)

# 🎉 Type-safe conversion!
td = as_typed_dict(data)
reveal_type(td)
# Revealed type is "TypedDict({'version': TypedDict({'value': builtins.int}), 'command': builtins.str, 'base': builtins.bool})"

# 🎉 Works with nested dataclasses too!
reveal_type(td["version"]["value"])
# Revealed type is "builtins.int"


# 🎉 Binding `Self` in methods is resolved correctly!
reveal_type(data.as_typed_dict)
# Revealed type is "def () -> TypedDict({'version': TypedDict({'value': builtins.int}), 'command': builtins.str, 'base': builtins.bool})"

# 🎉 In runtime, `as_typed_dict` is just a wrapper around `asdict`!
if asdict(data) == data.as_typed_dict():
    print("✅")
else:
    print("❌")

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

ubertyped-0.0.1.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

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

ubertyped-0.0.1-py3-none-any.whl (5.1 kB view details)

Uploaded Python 3

File details

Details for the file ubertyped-0.0.1.tar.gz.

File metadata

  • Download URL: ubertyped-0.0.1.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.0 CPython/3.12.0 Darwin/23.1.0

File hashes

Hashes for ubertyped-0.0.1.tar.gz
Algorithm Hash digest
SHA256 273186c6b2dc0dca634ed2e45ef862fd1be09588a7fa8c651d898b585167e6d7
MD5 2c61f8617b51d7813e859923bf0e2581
BLAKE2b-256 053212124b173e162674043ebf7a58787072ad7eb66b1e587a007a03a3faf550

See more details on using hashes here.

File details

Details for the file ubertyped-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: ubertyped-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 5.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.0 CPython/3.12.0 Darwin/23.1.0

File hashes

Hashes for ubertyped-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c12499482a865fb3d3e9ac1a97e70ada876a2bfd6f4ec47d2b5e45b260d384fa
MD5 aab98966b785c5dae50a90fe88614498
BLAKE2b-256 2687de8b569e1e852b1e772293c88d960368b408654e62ee302d084788b085fc

See more details on using hashes here.

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