def test_advanced_fields(): coin = Coin() data = protobuf_to_dict(coin) assert data == dict( tags={}, names=[], categories=[], ) coin.tags['USD'] = 'TUSD' coin.tags['HKD'] = 'THKD' coin.names.append('alpha') coin.names.append('beta') cat1 = Category(name='foo', type='cool') cat2 = Category(name='bar', type='lame') coin.categories.extend([cat1, cat2]) data = protobuf_to_dict(coin) assert data == dict(tags=dict(USD='TUSD', HKD='THKD'), names=['alpha', 'beta'], categories=[ dict(name='foo', type='cool'), dict(name='bar', type='lame'), ])
def test_omit_keys_if_null(): # Test omit_keys_if_null option foo = Foo( id=123, name='val', ) data = protobuf_to_dict(foo, omit_keys_if_null=True) assert data == dict(id=123, name='val') foo.content.value = 'stuff' data = protobuf_to_dict(foo, omit_keys_if_null=True) assert data == dict(id=123, name='val', content='stuff')
def test_serialize_to_protobuf(mocker): build_serializer_cls_spy = mocker.spy( auto, '_build_serializer_cls_for_proto_cls') assert len(auto.serializer_registry) == 0 created_at = utcnow() source = dict(id=1, name='val', content='stuff', is_active=True, count=12, created_at=created_at) data = serialize_to_protobuf(source, Foo) assert len(auto.serializer_registry) == 1 assert 'example.Foo' in auto.serializer_registry assert isinstance(data, Foo) assert data.id == 1 assert data.name == 'val' assert data.content.value == 'stuff' assert data.is_active.value is True assert data.count.value == 12 assert proto_timestamp_to_datetime(data.created_at) == created_at # Cool little serialization -> deserialization check assert protobuf_to_dict(data) == source data2 = serialize_to_protobuf(source, Foo) assert data2 == data assert len(auto.serializer_registry) == 1 assert build_serializer_cls_spy.call_count == 1
def test_nested_deserialization(): child = Child(name='child', label=StringValue(value='small')) parent = Parent(name='parent', label=StringValue(value='big'), child=child) data = protobuf_to_dict(parent) assert data == dict(name='parent', label='big', child=dict( name='child', label='small', category=None, ))
def test_unset_wrapped_fields(): # Test that None is returned for Wrapped fields that are unset foo = Foo( id=123, name='val', ) data = protobuf_to_dict(foo) assert data == dict( id=123, name='val', content=None, is_active=None, count=None, created_at=None, )
def test_protobuf_to_dict_basic(): foo = Foo( id=123, name='val', ) foo.content.value = 'crypto' foo.is_active.value = True foo.count.value = 501 dt = datetime(2019, 1, 1, 12, 0, tzinfo=UTC) write_datetime_to_message(foo.created_at, dt) data = protobuf_to_dict(foo) assert data == dict( id=123, name='val', content='crypto', is_active=True, count=501, created_at=dt, )
def test_fields(foo): data = protobuf_to_dict(foo, fields=('id', 'content')) assert set(data.keys()) == {'id', 'content'}