>> NotImplementedError: Cannot load 'nullable_string' in the base class >> >> Is this the correct behavior? > > Yes, that's the expected behaviour.
Yes. >> Then what is the expected behavior if the field is also defaulted to >> None? >> >> fields = { >> 'nullable_string': fields.StringField(nullable=True, >> default=None), >> } >> >> The actual behavior is still the same exception above. Is it the >> correct behavior? > > Yes. So, what the default=None does is describe the behaviour of the > field when obj_set_defaults() is called. It does *not* describe what is > returned if the field *value* is accessed before being populated. > > What you're looking for is the obj_attr_is_set() method: > > > if MyObject.obj_attr_is_set('nullable_string'): > print my_obj.nullable_string I think you meant s/MyObject/my_obj/ above. However, in modern times, it's better to use: if 'nullable_string' in myobj On a per-object basis, it may also be reasonable to define obj_load_attr() to provide the default for a field if it's not set and attempted to be loaded. > In addition to the obj_attr_is_set() method, use the obj_set_defaults() > method to manually set all fields that have a default=XXX value to XXX > if those fields have not yet been manually set: There's another wrinkle here. The default=XXX stuff was actually introduced before we had obj_set_defaults(), and for a very different reason. That reason was confusing and obscure, and mostly supportive of the act of converting nova from dicts to objects. If you look in fields, there is an obscure handling of default, where if you _set_ a field to None that has a default and is not nullable, it will gain the default value. It's confusing and I wish we had never done it, but.. it's part of the contract now and I'd have to do a lot of digging to see if we can remove it (probably can from Nova, but...). Your use above is similar to this, so I just wanted to point it out in case you came across it and it led you to thinking your original example would work. --Dan __________________________________________________________________________ OpenStack Development Mailing List (not for usage questions) Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev