Skip to main content

Auto dataclass

ci_badge Downloads PyPI version License: MIT

AutoDataclass is a simple package that helps easy to map data into DataTransferObject for transporting that data between system layers. The package uses specified Dataclass structure for retrieving data and creating DTO. Currently, supported Django model object to Dataclass object conversion.

Installation

pip install auto_dataclass

Quickstart

# Django models.py
from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=128)
    description = models.TextField(max_length=1000)
    
class Photo(models.Model):
    product = models.ForeignKey(Product, related_name="photos",
                                on_delete=models.CASCADE)
    image = models.ImageField(blank=True)

Define your Dataclasses that describe retrieved data structure from DB.

# dto.py
@dataclass(frozen=True)
class PhotoDataclass:
    id: int
    image: str

@dataclass(frozen=True)
class ProductDataclass:
    id: int
    name: str
    description: str
    photos: List[ProductDataclass] = field(default_factory=list)

Create Converter instance and call to_dto method with passed data from the query and previously defined Dataclass.

# repository.py
from auto_dataclass.dj_model_to_dataclass import FromOrmToDataclass

from dto import ProductDataclass
from models import Product

# Creating Converter instance
converter = FromOrmToDataclass()

def get_product(product_id: int) -> ProductDataclass:
    product_model_instance = Product.objects \
                    .prefetch_related('photos') \
                    .get(pk=product_id) 
    # Converting Django model object from the query to DTO.     
    retrun converter.to_dto(product_model_instance, ProductDataclass)

Recursive Django model relation

If your data has a recursive relation you can also map them with the same way.

# Django models.py
from django.db import models

class Category(models.Model):
    name = models.CharField(max_length=128)
    parent = models.ForeignKey(
        "Category", related_name="sub_categories", null=True, blank=True, on_delete=models.CASCADE
    )
# dto.py
@dataclass
class CategoriesDTO:
    id: int
    name: str
    sub_categories: List['CategoriesDTO'] = field(default_factory=list)
# repository.py
from itertools import repeat
from auto_dataclass.dj_model_to_dataclass import FromOrmToDataclass

from models import Category
from dto import CategoriesDTO

converter = FromOrmToDataclass()

def get_categories(self) -> Iterable[CategoriesDTO]:
    category_model_instances = Category.objects.filter(parent__isnull=True)
    return map(converter.to_dto, category_model_instances, repeat(CategoriesDTO))

Future Dataclass data types

Example of mapping future relation in Dataclasses structure.

# dto.py

@dataclass
class Dataclass:
    id: int
    dc: Optional['FutureDataclass']
    
@dataclass
class FutureDataclass:
    id: int
    name: str

To handle this you just need to pass a future Dataclasses as a next arguments.

from auto_dataclass.dj_model_to_dataclass import FromOrmToDataclass
from dto import Dataclass, FutureDataclass

converter = FromOrmToDataclass()

dataclass_with_future_relation = converter.to_dto(
    django_data_model,
    Dataclass,
    FutureDataclass
)

Metadata

Release files for auto_dataclass 0.1.7

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

Source distribution (sdist)

Source distribution for auto_dataclass 0.1.7
File Size Uploaded
auto_dataclass-0.1.7.tar.gz 9.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for auto_dataclass 0.1.7
File Interpreter ABI Platform
auto_dataclass-0.1.7-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 14.4 kB

Release files / auto_dataclass-0.1.7.tar.gz

Download URL auto_dataclass-0.1.7.tar.gz
Size 9.3 kB
Tags Source
SHA-256 checksum
How to use checksums
7e77afeb766a43477ca115123611ad0cf7590f7aaf614d8a76771a8cea5f1a70
BLAKE2b-256 checksum
How to use checksums
a1d44207c4b6773b9e3592f4fbfa76f0e8036b5ec5f8f8a613864066d2b38289
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-requests/2.31.0

Release files / auto_dataclass-0.1.7-py2.py3-none-any.whl

Download URL auto_dataclass-0.1.7-py2.py3-none-any.whl
Size 5.1 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
20d69252ce4ea929a3a3ae41ebe2d75b8ebf5d723327ad39c399c35d579cf3a2
BLAKE2b-256 checksum
How to use checksums
cc0ec5b9ac7c8020d683e84a62c01382550a1cff659895f5bf5ca8ab75da9861
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-requests/2.31.0

Release history Release notifications | RSS feed

This release

0.1.7 This release

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

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