Skip to main content

Python ClassMapper

A simple class mapping (conversion) Python library.

Example

Imagine you have two classes, OriginCls and DestinationCls:

from dataclasses import dataclass

@dataclass
class OriginCls:
    id: str
    name: str
    age: int

@dataclass
class DestinationCls:
    _id: str
    data: dict

You want to be able to convert an object of OriginCls to DestinationCls and viceversa. ClassMapper allows you to define "mappers" - functions that explicitly convert an object of a class A to a new instance of a class B. Being explicit means that you have to explicitly define how the conversion between classes is performed.

from classmapper import ClassMapper

mapper = ClassMapper()

@mapper.register(OriginCls, DestinationCls)
def _mapper_origin_destination(_from: OriginCls) -> DestinationCls:
    return DestinationCls(
        _id=_from.id,
        data={
            "name": _from.name,
            "age": _from.age
        }
    )

@mapper.register(DestinationCls, OriginCls)
def _mapper_destination_origin(_from: DestinationCls) -> OriginCls:
    return OriginCls(
        id=_from._id,
        name=_from.data["name"],
        age=_from.data["age"]
    )

Now you can convert an object of OriginCls into DestinationCls, and viceversa:

source = OriginCls(id="1", name="foo", age=21)
# mapper.map(source object, target class)
#   returns object of target class, if a mapper between source object's class and target class is registered
result = mapper.map(source, DestinationCls)
print(result)

# convert back into the original
result = mapper.map(result, OriginCls)
print(result)

If you try to convert between classes not mapped, a NoClassMappingError is raised:

class OtherCls:
    pass

mapper.map(source, OtherCls)  # raises NoClassMappingError

More examples can be found on tests.

Metadata

Release files for classmapper 0.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for classmapper 0.0.1
File Size Uploaded
classmapper-0.0.1.tar.gz 3.3 kB Details

Release files / classmapper-0.0.1.tar.gz

Download URL classmapper-0.0.1.tar.gz
Size 3.3 kB
Tags Source
SHA-256 checksum
How to use checksums
a2e015007d6ffffa205cf8e0633d793037c4caecab922dd9967f6e60cc9ab9a5
BLAKE2b-256 checksum
How to use checksums
4fdfdab992885c87981e73766233c6fc8159983dbd6d8b5e27fe701f2d885f01
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.0.1 This release

1 release file

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