コード例 #1
0
ファイル: serializer.py プロジェクト: HarborOS/murano
def _pass12_serialize(value, parent, serialized_objects,
                      designer_attributes_getter):
    if isinstance(value, dsl.MuranoObjectInterface):
        value = value.object
    if isinstance(value, (six.string_types,
                          int, float, bool)) or value is None:
        return value, False
    if isinstance(value, dsl_types.MuranoObject):
        if value.owner is not parent or value.object_id in serialized_objects:
            return ObjRef(value), True
    elif isinstance(value, ObjRef):
        if (value.ref_obj.object_id not in serialized_objects and
                is_nested_in(value.ref_obj.owner, parent)):
            value = value.ref_obj
        else:
            return value, False
    if isinstance(value, dsl_types.MuranoObject):
        result = value.to_dictionary()
        if designer_attributes_getter is not None:
            result['?'].update(designer_attributes_getter(value.object_id))
            # deserialize and merge list of actions
            result['?']['_actions'] = _serialize_available_action(
                value, result['?'].get('_actions', {}))
        serialized_objects.add(value.object_id)
        return _pass12_serialize(
            result, value, serialized_objects, designer_attributes_getter)
    elif isinstance(value, utils.MappingType):
        result = {}
        need_another_pass = False

        for d_key, d_value in six.iteritems(value):
            result_key = str(d_key)
            result_value = _pass12_serialize(
                d_value, parent, serialized_objects,
                designer_attributes_getter)
            result[result_key] = result_value[0]
            if result_value[1]:
                need_another_pass = True
        return result, need_another_pass
    elif utils.is_sequence(value) or isinstance(value, utils.SetType):
        need_another_pass = False
        result = []
        for t in value:
            v, nmp = _pass12_serialize(
                t, parent, serialized_objects, designer_attributes_getter)
            if nmp:
                need_another_pass = True
            result.append(v)
        return result, need_another_pass
    else:
        raise ValueError()
コード例 #2
0
def _pass12_serialize(value, parent, serialized_objects,
                      designer_attributes_getter):
    if isinstance(value, dsl.MuranoObjectInterface):
        value = value.object
    if isinstance(value, (types.StringTypes, types.IntType, types.FloatType,
                          types.BooleanType, types.NoneType)):
        return value, False
    if isinstance(value, dsl_types.MuranoObject):
        if value.owner is not parent or value.object_id in serialized_objects:
            return ObjRef(value), True
    elif isinstance(value, ObjRef):
        if (value.ref_obj.object_id not in serialized_objects
                and is_nested_in(value.ref_obj.owner, parent)):
            value = value.ref_obj
        else:
            return value, False
    if isinstance(value, dsl_types.MuranoObject):
        result = value.to_dictionary()
        if designer_attributes_getter is not None:
            result['?'].update(designer_attributes_getter(value.object_id))
            # deserialize and merge list of actions
            result['?']['_actions'] = _serialize_available_action(
                value, result['?'].get('_actions', {}))
        serialized_objects.add(value.object_id)
        return _pass12_serialize(result, value, serialized_objects,
                                 designer_attributes_getter)
    elif isinstance(value, utils.MappingType):
        result = {}
        need_another_pass = False

        for d_key, d_value in value.iteritems():
            result_key = str(d_key)
            result_value = _pass12_serialize(d_value, parent,
                                             serialized_objects,
                                             designer_attributes_getter)
            result[result_key] = result_value[0]
            if result_value[1]:
                need_another_pass = True
        return result, need_another_pass
    elif utils.is_sequence(value) or isinstance(value, utils.SetType):
        need_another_pass = False
        result = []
        for t in value:
            v, nmp = _pass12_serialize(t, parent, serialized_objects,
                                       designer_attributes_getter)
            if nmp:
                need_another_pass = True
            result.append(v)
        return result, need_another_pass
    else:
        raise ValueError()
コード例 #3
0
 def rec(obj):
     if utils.is_sequence(obj) or isinstance(obj, utils.SetType):
         for value in obj:
             for t in rec(value):
                 yield t
     elif isinstance(obj, utils.MappingType):
         for value in obj.values():
             for t in rec(value):
                 yield t
     elif isinstance(obj, dsl_types.MuranoObjectInterface):
         for t in rec(obj.object):
             yield t
     elif isinstance(obj, dsl_types.MuranoObject) and obj not in visited:
         visited.add(obj)
         yield obj
         for t in rec(obj.to_dictionary()):
             yield t
コード例 #4
0
def _pass12_serialize(value, parent, serialized_objects,
                      designer_attributes_getter, executor, serialize_actions,
                      serialization_type, allow_refs,
                      with_destruction_dependencies):
    if isinstance(value, dsl.MuranoObjectInterface):
        value = value.object
    if isinstance(value,
                  (six.string_types, int, float, bool)) or value is None:
        return value, False
    if isinstance(value, dsl_types.MuranoObject):
        if value.owner is not parent or value.object_id in serialized_objects:
            return ObjRef(value), True
    elif isinstance(value, ObjRef):
        can_move = value.ref_obj.object_id not in serialized_objects
        if can_move and allow_refs and value.ref_obj.owner is not None:
            can_move = (is_nested_in(parent, value.ref_obj.owner) and
                        value.ref_obj.owner.object_id in serialized_objects)
        if can_move:
            value = value.ref_obj
        else:
            return value, False
    if isinstance(value,
                  (dsl_types.MuranoType, dsl_types.MuranoTypeReference)):
        return helpers.format_type_string(value), False
    if helpers.is_passkey(value):
        return value, False
    if isinstance(value, dsl_types.MuranoObject):
        result = value.to_dictionary(
            serialization_type=serialization_type,
            allow_refs=allow_refs,
            with_destruction_dependencies=with_destruction_dependencies)
        if designer_attributes_getter is not None:
            if serialization_type == dsl_types.DumpTypes.Inline:
                system_data = result
            else:
                system_data = result['?']
            system_data.update(designer_attributes_getter(value.object_id))
            if serialize_actions:
                # deserialize and merge list of actions
                system_data['_actions'] = _serialize_available_action(
                    value, system_data.get('_actions', {}), executor)
        serialized_objects.add(value.object_id)
        return _pass12_serialize(result, value, serialized_objects,
                                 designer_attributes_getter, executor,
                                 serialize_actions, serialization_type,
                                 allow_refs, with_destruction_dependencies)
    elif isinstance(value, utils.MappingType):
        result = {}
        need_another_pass = False

        for d_key, d_value in value.items():
            if (isinstance(d_key, dsl_types.MuranoType) and serialization_type
                    == dsl_types.DumpTypes.Serializable):
                result_key = str(d_key)
            else:
                result_key = d_key
            if (result_key == 'type'
                    and isinstance(d_value, dsl_types.MuranoType)
                    and serialization_type == dsl_types.DumpTypes.Mixed):
                result_value = d_value, False
            else:
                result_value = _pass12_serialize(
                    d_value, parent, serialized_objects,
                    designer_attributes_getter, executor, serialize_actions,
                    serialization_type, allow_refs,
                    with_destruction_dependencies)
            result[result_key] = result_value[0]
            if result_value[1]:
                need_another_pass = True
        return result, need_another_pass
    elif utils.is_sequence(value) or isinstance(value, utils.SetType):
        need_another_pass = False
        result = []
        for t in value:
            v, nmp = _pass12_serialize(t, parent, serialized_objects,
                                       designer_attributes_getter, executor,
                                       serialize_actions, serialization_type,
                                       allow_refs,
                                       with_destruction_dependencies)
            if nmp:
                need_another_pass = True
            result.append(v)
        return result, need_another_pass
    else:
        raise ValueError()
コード例 #5
0
ファイル: serializer.py プロジェクト: AleptNamrata/murano
def _pass12_serialize(value, parent, serialized_objects,
                      designer_attributes_getter, executor,
                      serialize_actions, serialization_type, allow_refs):
    if isinstance(value, dsl.MuranoObjectInterface):
        value = value.object
    if isinstance(value, (six.string_types,
                          int, float, bool)) or value is None:
        return value, False
    if isinstance(value, dsl_types.MuranoObject):
        if value.owner is not parent or value.object_id in serialized_objects:
            return ObjRef(value), True
    elif isinstance(value, ObjRef):
        if (value.ref_obj.object_id not in serialized_objects and
                is_nested_in(value.ref_obj.owner, parent)):
            value = value.ref_obj
        else:
            return value, False
    if isinstance(value, dsl_types.MuranoObject):

        result = value.to_dictionary(
            serialization_type=serialization_type, allow_refs=allow_refs)
        if designer_attributes_getter is not None:
            if serialization_type == DumpTypes.Inline:
                system_data = result
            else:
                system_data = result['?']
            system_data.update(designer_attributes_getter(value.object_id))
            if serialize_actions:
                # deserialize and merge list of actions
                system_data['_actions'] = _serialize_available_action(
                    value, system_data.get('_actions', {}), executor)
        serialized_objects.add(value.object_id)
        return _pass12_serialize(
            result, value, serialized_objects, designer_attributes_getter,
            executor, serialize_actions, serialization_type, allow_refs)
    elif isinstance(value, utils.MappingType):
        result = {}
        need_another_pass = False

        for d_key, d_value in six.iteritems(value):
            if (isinstance(d_key, dsl_types.MuranoType) and
                    serialization_type == DumpTypes.Serializable):
                result_key = str(d_key)
            else:
                result_key = d_key
            if (result_key == 'type' and
                    isinstance(d_value, dsl_types.MuranoType) and
                    serialization_type == DumpTypes.Mixed):
                result_value = d_value, False
            else:
                result_value = _pass12_serialize(
                    d_value, parent, serialized_objects,
                    designer_attributes_getter, executor, serialize_actions,
                    serialization_type, allow_refs)
            result[result_key] = result_value[0]
            if result_value[1]:
                need_another_pass = True
        return result, need_another_pass
    elif utils.is_sequence(value) or isinstance(value, utils.SetType):
        need_another_pass = False
        result = []
        for t in value:
            v, nmp = _pass12_serialize(
                t, parent, serialized_objects, designer_attributes_getter,
                executor, serialize_actions, serialization_type, allow_refs)
            if nmp:
                need_another_pass = True
            result.append(v)
        return result, need_another_pass
    else:
        raise ValueError()