zarame
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')
])
])
])