Skip to main content

Simple aliasing for dataclass working with orjson and ormsgpack

Project description

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"}

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_alias-0.1.0.tar.gz (3.8 kB view details)

Uploaded Source

Built Distribution

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

dataclass_alias-0.1.0-py2.py3-none-any.whl (4.5 kB view details)

Uploaded Python 2Python 3

File details

Details for the file dataclass_alias-0.1.0.tar.gz.

File metadata

  • Download URL: dataclass_alias-0.1.0.tar.gz
  • Upload date:
  • Size: 3.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for dataclass_alias-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9690efe576758379925ed8913f1de589b8bb28c5775725f4999495c44fa45cbd
MD5 44ba964fee45ffc222ecd524bcb2db29
BLAKE2b-256 680fdde348c7469e7d94852b4ac0ee0faa4bdd89c48d0ac881d196b906192e75

See more details on using hashes here.

Provenance

The following attestation bundles were made for dataclass_alias-0.1.0.tar.gz:

Publisher: publish.yml on KenKi0/dataclass_alias

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_alias-0.1.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for dataclass_alias-0.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 ff5e999ca23ba4937ece7b96eb2c5294abf509e3a907de35272ec9a1864fc148
MD5 28fb3deca908655246f669e1256ae023
BLAKE2b-256 eea511638f1bec9d2ab9541df3d7f2a92f7ff1c6e84eb062c1380430b8e0079b

See more details on using hashes here.

Provenance

The following attestation bundles were made for dataclass_alias-0.1.0-py2.py3-none-any.whl:

Publisher: publish.yml on KenKi0/dataclass_alias

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