zarame

Simple structural transducer using NamedTuple


License
MIT
Install
pip install zarame==0.0.4

Documentation

zarame

PyPI version CircleCI

Simple structural converter using NamedTuple

Usage

Load from dict

from typing import NamedTuple, List, Optional
from enum import Enum

from zarame import load


class Status(Enum):
    ACTIVE = 'active'
    INACTIVE = 'inactive'
    DELETED = 'deleted'


class User(NamedTuple):
    id: int
    name: str
    email: Optional[str]


class Room(NamedTuple):
    status: Status
    users: List[User]


room = {
    'status': 'active',
    'users': [
        {'id': 1, 'name': 'Taro'},
        {'id': 2, 'name': 'Hanako', 'email': 'hanako@example.com'}
    ]
}

# Convert from dict to Room instance

instance = load(room, Room)

Result

Room(
        status=Status.Active,
        users=[
            User(id=1, name='Taro', email=None),
            User(id=2, name='Hanako', email='hanako@example.com')
        ]
)

You can use str, int, bool, float, Enum, List, Tuple(as List), NamedTuple to definition.

Dump to dict

from zarame import dump

room = Room(
        status=Status.ACTIVE,
        users=[
            User(id=1, name='Taro', email=None),
            User(id=2, name='Hanako', email='hanako@example.com')
        ]
)

d = dump(d)

Result

OrderedDict([
    ('status', 'active'), 
    ('users', [
        OrderedDict([
            ('id', 1), 
            ('name', 'Taro'), 
            ('email', None)
        ]), 
        OrderedDict([
            ('id', 2), 
            ('name', 'Hanako'), 
            ('email', 'hanako@example.com')
        ])
    ])
])