Skip to main content

The package, helps automatically transform data to DTO (DataClass) object

Project description

Auto dataclass

Package that helps easy data to DTO(Dataclass) object. Currently, the package supports conversion of Django model to dataclass object.

Installation

pip install auto_dataclass

Quickstart

# 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)
# 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)
# repository.py
from auto_dataclass.dj_model_to_dataclass import FromOrmToDataclass

from dto import ProductDataclass
from models import Product

converter = FromOrmToDataclass()

def get_product(product_id: int) -> ProductDataclass:
    product_instance = Product.objects \
                    .prefetch_related('photos') \
                    .get(pk=product_id)      
    retrun converter.to_dto(product_instance, ProductDataclass)

Recursive Django model relation

# 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 ProductDataclass

converter = FromOrmToDataclass()

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

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

auto_dataclass-0.1.1.tar.gz (8.0 kB view hashes)

Uploaded Source

Built Distribution

auto_dataclass-0.1.1-py2.py3-none-any.whl (4.3 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page