Python3 Custom Data Class Helpers
Project description
pyderive
Python3 Custom Dataclass Helpers
Installation
pip install pyderive3
Features
Additional Features availalbe via Extensions.
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.6.tar.gz
(32.1 kB
view details)
File details
Details for the file pyderive3-0.0.6.tar.gz
.
File metadata
- Download URL: pyderive3-0.0.6.tar.gz
- Upload date:
- Size: 32.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.8.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4b138e991be812e491747c773f1cf8d71d72f088cc7e9be88152916f40a466d5 |
|
MD5 | 417f939585349328e21ecdf9c0502a55 |
|
BLAKE2b-256 | 3bdbb64b59b2ee548ab634f2166a64c4b5be99afcbb97ae48b22b9f49c263cf8 |