Fix problem with uninitialized unions in _from_dict
This commit is contained in:
@@ -741,7 +741,12 @@ cdef _to_dict(msg, bint verbose):
|
||||
cdef _from_dict(_DynamicStructBuilder msg, dict d):
|
||||
for key, val in d.iteritems():
|
||||
if key != 'which':
|
||||
msg._set(key, val)
|
||||
try:
|
||||
msg._set(key, val)
|
||||
except Exception as e:
|
||||
if 'expected isSetInUnion(field)' in str(e):
|
||||
msg.init(key)
|
||||
msg._set(key, val)
|
||||
|
||||
cdef _from_list(_DynamicListBuilder msg, list d):
|
||||
cdef size_t count = 0
|
||||
|
||||
@@ -21,13 +21,18 @@ struct Person {
|
||||
|
||||
employment :union {
|
||||
unemployed @4 :Void;
|
||||
employer @5 :Text;
|
||||
employer @5 :Employer;
|
||||
school @6 :Text;
|
||||
selfEmployed @7 :Void;
|
||||
# We assume that a person is only one of these.
|
||||
}
|
||||
}
|
||||
|
||||
struct Employer {
|
||||
name @0 :Text;
|
||||
boss @1 :Person;
|
||||
}
|
||||
|
||||
struct AddressBook {
|
||||
people @0 :List(Person);
|
||||
}
|
||||
|
||||
@@ -164,3 +164,9 @@ def test_set_dict(all_types):
|
||||
msg.structList[0] = {'int32Field': 102}
|
||||
|
||||
assert msg.structList[0].int32Field == 102
|
||||
|
||||
|
||||
def test_set_dict_union(addressbook):
|
||||
person = addressbook.Person.new_message(**{'employment': {'employer': {'name': 'foo'}}})
|
||||
|
||||
assert person.employment.employer.name == 'foo'
|
||||
|
||||
Reference in New Issue
Block a user