def test_load_enum(): class Kind(Enum): SPAM = 'spam' HAM = 'ham' EGG = 'egg' class A(NamedTuple): kind: Kind assert load({'kind': 'spam'}, A) == A(kind=Kind.SPAM) assert load({'kind': 'ham'}, A) == A(kind=Kind.HAM) assert load({'kind': 'egg'}, A) == A(kind=Kind.EGG)
def test_load_structured(): room = { 'id': 1000, 'users': [{ 'id': 1, 'name': 'Taro', 'meta': { 'class': 'A' }, 'icon': { 'url': 'https://example.com/profile/taro/img.jpg' } }, { 'id': 2, 'name': 'Hanako', 'meta': {}, 'email': '*****@*****.**', 'icon': { 'url': 'https://example.com/profile/hanako/img.jpg' } }] } converted = load(room, Room) assert converted.id == 1000 assert len(converted.users) == 2 assert converted.users[0].id == 1 assert converted.users[0].email is None assert converted.users[ 0].icon.url == 'https://example.com/profile/taro/img.jpg' assert converted.users[1].id == 2 assert converted.users[1].email == '*****@*****.**' assert converted.users[ 1].icon.url == 'https://example.com/profile/hanako/img.jpg'
def test_load_structured_tuple(): icons = { 'icons': [ { 'url': 'https://example.com/profile/taro/img.jpg' }, { 'url': 'https://example.com/profile/hanako/img.jpg' }, ] } converted = load(icons, IconTuple) assert isinstance(converted.icons, tuple) assert converted.icons[0].url == 'https://example.com/profile/taro/img.jpg' assert converted.icons[ 1].url == 'https://example.com/profile/hanako/img.jpg'
def test_load_default_value(): class A(NamedTuple): a: int = 0 assert load({}, A) == A(a=0) assert load({'a': 1}, A) == A(a=1)
def test_load_simple(): icon = {'url': 'https://example.com/profile/taro/img.jpg'} converted = load(icon, Icon) assert converted.url == 'https://example.com/profile/taro/img.jpg'
def fetch_qiita_items(page: int = 1) -> Tuple[Item, ...]: res = requests.get(QIITA_API_ENDPOINT, {'page': page}) res.raise_for_status() return tuple(zarame.load(item, Item) for item in res.json())