Preserve keys in object's system area
Sub-keys in object's system area ('?') are no longer deleted after deployment Change-Id: Ieae7a472fa25df56d19fad6b1d604122ebd98aa5 Closes-Bug: #1308923
This commit is contained in:
parent
28bf301221
commit
33a374d181
@ -22,6 +22,7 @@ class ObjectStore(object):
|
||||
self._class_loader = class_loader
|
||||
self._parent_store = parent_store
|
||||
self._store = {}
|
||||
self._designer_attributes_store = {}
|
||||
self._initializing = False
|
||||
|
||||
@property
|
||||
@ -64,6 +65,8 @@ class ObjectStore(object):
|
||||
obj = class_obj.new(parent, self, context=context,
|
||||
object_id=object_id, defaults=defaults)
|
||||
self._store[object_id] = obj
|
||||
self._designer_attributes_store[object_id] = \
|
||||
ObjectStore._get_designer_attributes(system_key)
|
||||
|
||||
argspec = inspect.getargspec(obj.initialize).args
|
||||
if '_context' in argspec:
|
||||
@ -88,3 +91,11 @@ class ObjectStore(object):
|
||||
for cls, method in methods:
|
||||
cls.invoke(method, executor, obj, {})
|
||||
return obj
|
||||
|
||||
@staticmethod
|
||||
def _get_designer_attributes(header):
|
||||
return dict((k, v) for k, v in header.iteritems()
|
||||
if str(k).startswith('_'))
|
||||
|
||||
def designer_attributes(self, object_id):
|
||||
return self._designer_attributes_store.get(object_id, {})
|
||||
|
@ -22,19 +22,28 @@ class ObjRef(object):
|
||||
self.ref_obj = obj
|
||||
|
||||
|
||||
def _serialize_tree(root_object, designer_attributes):
|
||||
serialized_objects = set()
|
||||
tree = _pass1_serialize(
|
||||
root_object, None, serialized_objects, designer_attributes)
|
||||
_pass2_serialize(tree, serialized_objects)
|
||||
return tree, serialized_objects
|
||||
|
||||
|
||||
def serialize(root_object, executor):
|
||||
if root_object is None:
|
||||
tree = None
|
||||
tree_copy = None
|
||||
attributes = []
|
||||
else:
|
||||
serialized_objects = set()
|
||||
tree = _pass1_serialize(root_object, None, serialized_objects)
|
||||
_pass2_serialize(tree, serialized_objects)
|
||||
tree, serialized_objects = _serialize_tree(
|
||||
root_object, executor.object_store.designer_attributes)
|
||||
tree_copy, _ = _serialize_tree(root_object, None)
|
||||
attributes = executor.attribute_store.serialize(serialized_objects)
|
||||
|
||||
return {
|
||||
'Objects': tree,
|
||||
'ObjectsCopy': tree,
|
||||
'ObjectsCopy': tree_copy,
|
||||
'Attributes': attributes
|
||||
}
|
||||
|
||||
@ -47,7 +56,8 @@ def _cmp_objects(obj1, obj2):
|
||||
return obj1.object_id == obj2.object_id
|
||||
|
||||
|
||||
def _pass1_serialize(value, parent, serialized_objects):
|
||||
def _pass1_serialize(value, parent, serialized_objects,
|
||||
designer_attributes_getter):
|
||||
if isinstance(value, (types.StringTypes, types.IntType, types.FloatType,
|
||||
types.BooleanType, types.NoneType)):
|
||||
return value
|
||||
@ -57,20 +67,27 @@ def _pass1_serialize(value, parent, serialized_objects):
|
||||
return ObjRef(value)
|
||||
else:
|
||||
result = value.to_dictionary()
|
||||
if designer_attributes_getter is not None:
|
||||
result['?'].update(designer_attributes_getter(value.object_id))
|
||||
serialized_objects.add(value.object_id)
|
||||
return _pass1_serialize(result, value, serialized_objects)
|
||||
return _pass1_serialize(
|
||||
result, value, serialized_objects, designer_attributes_getter)
|
||||
|
||||
elif isinstance(value, types.DictionaryType):
|
||||
result = {}
|
||||
for d_key, d_value in value.iteritems():
|
||||
result_key = str(d_key)
|
||||
result[result_key] = _pass1_serialize(
|
||||
d_value, parent, serialized_objects)
|
||||
d_value, parent, serialized_objects,
|
||||
designer_attributes_getter)
|
||||
return result
|
||||
elif isinstance(value, types.ListType):
|
||||
return [_pass1_serialize(t, parent, serialized_objects) for t in value]
|
||||
return [_pass1_serialize(t, parent, serialized_objects,
|
||||
designer_attributes_getter) for t in value]
|
||||
elif isinstance(value, types.TupleType):
|
||||
return _pass1_serialize(list(value), parent, serialized_objects)
|
||||
return _pass1_serialize(
|
||||
list(value), parent, serialized_objects,
|
||||
designer_attributes_getter)
|
||||
else:
|
||||
raise ValueError()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user