示例#1
0
 def test_format_type_string(self):
     inner_type_obj = mock.Mock(spec=dsl_types.MuranoType)
     inner_type_obj.configure_mock(**{'name': 'foo', 'version': 'foo_ver'})
     inner_type_obj_pkg = mock.Mock()
     inner_type_obj_pkg.configure_mock(name='foo_pkg')
     setattr(inner_type_obj, 'package', inner_type_obj_pkg)
     type_obj = mock.Mock(spec=dsl_types.MuranoTypeReference,
                          type=inner_type_obj)
     result = helpers.format_type_string(type_obj)
     self.assertEqual('foo/foo_ver@foo_pkg', result)
示例#2
0
 def to_dictionary(self,
                   include_hidden=False,
                   serialization_type=dsl_types.DumpTypes.Serializable,
                   allow_refs=False):
     context = helpers.get_context()
     result = {}
     for parent in self.__parents.values():
         result.update(
             parent.to_dictionary(include_hidden,
                                  dsl_types.DumpTypes.Serializable,
                                  allow_refs))
     skip_usages = (dsl_types.PropertyUsages.Runtime,
                    dsl_types.PropertyUsages.Config)
     for property_name in self.type.properties:
         if property_name in self.__properties:
             spec = self.type.properties[property_name]
             if spec.usage not in skip_usages or include_hidden:
                 prop_value = self.__properties[property_name]
                 if isinstance(prop_value, MuranoObject) and allow_refs:
                     meta = [
                         m for m in spec.get_meta(context)
                         if m.type.name == ('io.murano.metadata.'
                                            'engine.Serialize')
                     ]
                     if meta and meta[0].get_property(
                             'as', context) == 'reference':
                         prop_value = prop_value.object_id
                 result[property_name] = prop_value
     if serialization_type == dsl_types.DumpTypes.Inline:
         result.pop('?')
         result = {
             self.type: result,
             'id': self.object_id,
             'name': self.name
         }
     elif serialization_type == dsl_types.DumpTypes.Mixed:
         result.update({
             '?': {
                 'type': self.type,
                 'id': self.object_id,
                 'name': self.name,
             }
         })
     else:
         result.update({
             '?': {
                 'type': helpers.format_type_string(self.type),
                 'id': self.object_id,
                 'name': self.name
             }
         })
     return result
示例#3
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()
 def to_dictionary(self,
                   include_hidden=False,
                   serialization_type=dsl_types.DumpTypes.Serializable,
                   allow_refs=False,
                   with_destruction_dependencies=False):
     context = helpers.get_context()
     result = {}
     for parent in self._parents.values():
         result.update(
             parent.to_dictionary(include_hidden,
                                  dsl_types.DumpTypes.Serializable,
                                  allow_refs))
     skip_usages = (dsl_types.PropertyUsages.Runtime,
                    dsl_types.PropertyUsages.Config)
     for property_name in self.type.properties:
         if property_name in self.real_this._properties:
             spec = self.type.properties[property_name]
             if spec.usage not in skip_usages or include_hidden:
                 prop_value = self.real_this._properties[property_name]
                 if isinstance(prop_value, MuranoObject) and allow_refs:
                     meta = [
                         m for m in spec.get_meta(context)
                         if m.type.name == ('io.murano.metadata.'
                                            'engine.Serialize')
                     ]
                     if meta and meta[0].get_property(
                             'as', context) == 'reference':
                         prop_value = prop_value.object_id
                 result[property_name] = prop_value
     if serialization_type == dsl_types.DumpTypes.Inline:
         result.pop('?')
         result = {
             self.type: result,
             'id': self.object_id,
             'name': self.name,
             'metadata': self.metadata
         }
         header = result
     else:
         if serialization_type == dsl_types.DumpTypes.Mixed:
             result.update({
                 '?': {
                     'type': self.type,
                     'id': self.object_id,
                     'name': self.name,
                     'metadata': self.metadata
                 }
             })
         else:
             result.update({
                 '?': {
                     'type': helpers.format_type_string(self.type),
                     'id': self.object_id,
                     'name': self.name,
                     'metadata': self.metadata
                 }
             })
         header = result['?']
     if self.destroyed:
         header['destroyed'] = True
     if with_destruction_dependencies:
         dds = []
         for record in self.destruction_dependencies:
             subscriber = record['subscriber']()
             if not subscriber or self.executor.object_store.is_doomed(
                     subscriber):
                 continue
             dds.append({
                 'subscriber': subscriber.object_id,
                 'handler': record['handler']
             })
         if dds:
             header.setdefault('dependencies', {})['onDestruction'] = dds
     return result