Skip to main content

Python3 Custom Data Class Helpers

Project description

pyderive

Python3 Custom Dataclass Helpers

Installation

pip install pyderive3

Features

Expanded Reimplementation of Dataclasses
Default Standards Implemented

'slots' kwarg now supported in older versions of python such as 3.8

from pyderive import *

@dataclass
class Foo:
    bar: int

@dataclass(slots=True, order=True)
class Bar(Foo):
    foo: str

bar = Bar(foo='foo', bar=100)
print(asdict(bar))
Recursive Field Compilation
from pyderive import *
from typing import Optional

class Foo:
    bar: int

@dataclass(recurse=True)
class Bar(Foo):
    foo: Optional[str] = None

bar = Bar(foo='foo', bar=100)
print(bar)
Allow for Custom Field Definitions
from pyderive import *
from typing import Any

@dataclass
class NewField(BaseField):
    custom_attr: bool = False

def field(*_, **kwargs) -> Any:
    return NewField(**kwargs)

@dataclass(field=NewField)
class Foo:
    a: int
    b: str = field(default='b', repr=False, custom_attr=True)

foo = Foo(1, 'boo')
print(foo)

for f in fields(foo):
    print(f.name, f.custom_attr)
Backwards Compatibility
import pyderive
import dataclasses

@dataclasses.dataclass
class Foo:
    a: int
    b: int = dataclasses.field(repr=False)

@pyderive.dataclass
class Bar(Foo):
    c: int = pyderive.field(frozen=True)

f = Bar(1, 2, 3)
print(f)
Monkey Patching
from pyderive import compat
compat.monkey_patch()

from dataclasses import dataclass, field

@dataclass
class Foo:
    a: int
    b: int = field(frozen=True)

f = Foo(1, 2)
print(f)
Low Level Dataclass Compilation Tools
from pyderive import *

class Foo:
    foo: int

class Bar(Foo):
    bar: int = 100

# parse class-structure into raw unordered heigharhcy
struct = parse_fields(Bar, recurse=True)
print('struct', struct)

# order and structure fields into organized list following dataclass standard
fields = flatten_fields(struct)
print('final_fields', fields)

# build and assign `init` and `repr` functions to `Bar` class
assign_func(Bar, create_init(fields))
assign_func(Bar, create_repr(fields))

# assign slots for field definitions onto `Bar` class
Bar = add_slots(Bar, fields)
print(Bar.__slots__)

# initialize foo w/ compiled `init` func and print w/ added `repr`
bar = Bar(foo=1, bar=2)
print(bar)

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

pyderive3-0.0.3.tar.gz (13.0 kB view details)

Uploaded Source

File details

Details for the file pyderive3-0.0.3.tar.gz.

File metadata

  • Download URL: pyderive3-0.0.3.tar.gz
  • Upload date:
  • Size: 13.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.0

File hashes

Hashes for pyderive3-0.0.3.tar.gz
Algorithm Hash digest
SHA256 ec10946141a3fb6c7f32869d2d3e3d601dbe3fc6de6d9eb5cbef157474589d45
MD5 c8706ed6ef61ed6c155c2d0e60be4c75
BLAKE2b-256 b3ed0e6cbbc32fc1e73f1d1612cdd834cbeada9a8ccad85c5af7a4a60831e4a5

See more details on using hashes here.

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