Skip to main content

dataclass_alias

Simple aliasing for dataclass working with orjson and ormsgpack

Usages

  1. Default
from dataclass_alias import AliasedDataclasses, asdict
from dataclasses import field, dataclass


@dataclass
class Data(metaclass=AliasedDataclasses, override_by_alias=True):
    my_field: str = field(metadata={"alias": "myField"})


instance = Data(my_field="field")
instance2 = Data(myField="field")  # or Data(**{"myField": "field"})
as_dict = asdict(instance2)
print(as_dict)
# Output: {"myField": "field"}
  1. override_by_alias with False
from dataclass_alias import AliasedDataclasses, asdict, alias
from dataclasses import field, dataclass


@dataclass
class Data(metaclass=AliasedDataclasses):
    my_field: str = field(metadata={"alias": "myField"})


instance2 = Data(myField="field")  # or Data(**{"myField": "field"})
as_dict = asdict(instance2)
print(as_dict)
# Output: {"my_field": "field"}
with alias(instance2):
    as_dict = asdict(instance2)
    print(as_dict)
    # Output: {"myField": "field"}
as_dict = asdict(instance2)
print(as_dict)
# Output: {"my_field": "field"}
  1. With override_factory

Remember that if you use alias in metadate this alias will override alias from alias_factory

from dataclass_alias import AliasedDataclasses, asdict
from dataclasses import field, dataclass


def to_lower_camel(string: str) -> str:
    if len(string) >= 1:
        pascal_string = ''.join(word.capitalize() for word in string.split('_'))
        return pascal_string[0].lower() + pascal_string[1:]
    return string.lower()


@dataclass
class Data(metaclass=AliasedDataclasses, alias_factory=to_lower_camel, override_by_alias=True):
    my_field: str = field(metadata={"alias": "MyField"})
    my_other_field: str

    
instance2 = Data(my_field="field", my_other_field="other_field")  # or Data(**{"MyField": "field"})
as_dict = asdict(instance2)
print(as_dict)
# Output: {"MyField": "field", "myOtherField": "other_field"}
  1. Working with other serialize libraries

This implementation will work with libraries as orjson, ormsgpack

import orjson
from dataclass_alias import AliasedDataclasses, asdict
from dataclasses import field, dataclass


@dataclass
class Data(metaclass=AliasedDataclasses, override_by_alias=True):
    my_field: str = field(metadata={"alias": "myField"})


instance = Data(my_field="field")
instance2 = Data(myField="field")  # or Data(**{"myField": "field"})
dump = orjson.dumps(instance2)
print(dump)
# Output: b'{"myField":"field"}'
  1. Inheritance
from dataclass_alias import AliasedDataclasses, asdict
from dataclasses import field, dataclass


@dataclass
class BaseAlias(metaclass=AliasedDataclasses, override_by_alias=True):
    ...


@dataclass
class Data(BaseAlias):
    my_field: str = field(metadata={"alias": "myField"})

    
@dataclass
class DataChild(Data):
    my_other_field: str = field(metadata={"alias": "myOtherField"})

    
instance = DataChild(my_field="field", my_other_field="other_field")
as_dict = asdict(instance)
print(as_dict)
# Output: {"myField": "field", "myOtherField": "other_field"}

Metadata

Release files for dataclass-alias 0.1.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 dataclass-alias 0.1.0
File Size Uploaded Provenance Actions
dataclass_alias-0.1.0.tar.gz 3.8 kB With provenance Details for dataclass_alias-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for dataclass-alias 0.1.0
File Interpreter ABI Platform Actions
dataclass_alias-0.1.0-py2.py3-none-any.whl Python 2, Python 3 none any Details for dataclass_alias-0.1.0-py2.py3-none-any.whl

Total release size: 8.3 kB

Release files / dataclass_alias-0.1.0.tar.gz

Download URL dataclass_alias-0.1.0.tar.gz
Size 3.8 kB
Tags Source
SHA-256 checksum
How to use checksums
9690efe576758379925ed8913f1de589b8bb28c5775725f4999495c44fa45cbd
BLAKE2b-256 checksum
How to use checksums
680fdde348c7469e7d94852b4ac0ee0faa4bdd89c48d0ac881d196b906192e75
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.1.1 CPython/3.12.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2024.

Transparency log

Release files / dataclass_alias-0.1.0-py2.py3-none-any.whl

Download URL dataclass_alias-0.1.0-py2.py3-none-any.whl
Size 4.5 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
ff5e999ca23ba4937ece7b96eb2c5294abf509e3a907de35272ec9a1864fc148
BLAKE2b-256 checksum
How to use checksums
eea511638f1bec9d2ab9541df3d7f2a92f7ff1c6e84eb062c1380430b8e0079b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.1.1 CPython/3.12.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2024.

Transparency log

Security for dataclass-alias 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for dataclass_alias-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2024.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

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