Exemplo n.º 1
0
 def get_data_definition(self):
     # Get a cover all data definitions
     data_defs = [
         VoidDefinition(),
         IntegerDefinition(),
         DoubleDefinition(),
         StringDefinition(),
         SecretDefinition(),
         BooleanDefinition(),
         BlobDefinition(),
         OpaqueDefinition(),
         OptionalDefinition(IntegerDefinition()),
         ListDefinition(IntegerDefinition()),
         StructDefinition('struct',
             [ ('int', IntegerDefinition()),
               ('str', StringDefinition()),
               ('struct', StructDefinition('struct1',
                   [('double', DoubleDefinition()),
                    ('secret', SecretDefinition())])),
               ('list', ListDefinition(StructDefinition('struct1',
                   [('double', DoubleDefinition()),
                    ('secret', SecretDefinition())]))),
               ('optional', ListDefinition(StructDefinition('struct1',
                   [('double', DoubleDefinition()),
                    ('secret', SecretDefinition())]))) ]),
         ErrorDefinition('error',
             [ ('int', IntegerDefinition()),
               ('str', StringDefinition()) ]),
     ]
     return data_defs
Exemplo n.º 2
0
    def __init__(self, name, introspection_adapter):
        """
        Initialize OperationApiInterface

        :type  name: :class:`str`
        :param name: Name of the provider
        :type  introspection_adapter:
            :class:`vmware.vapi.provider.introspection.ApiProviderIntrospector`
        :param introspection_adapter: Adapter for fetching introspection information
        """
        self._adapter = introspection_adapter
        iface_id = InterfaceIdentifier(
            'com.vmware.vapi.std.introspection.operation')
        method_defs = {}
        methods = {}

        # list method
        list_method_id = MethodIdentifier(iface_id, 'list')
        output_def = ListDefinition(StringDefinition())
        method_defs[list_method_id] = MethodDefinition(
            list_method_id,
            StructDefinition(OPERATION_INPUT,
                             [('service_id', StringDefinition())]), output_def,
            [not_found_def])
        methods[list_method_id] = self._list

        # get method
        get_method_id = MethodIdentifier(iface_id, 'get')
        data_ref_def = StructRefDefinition(
            'com.vmware.vapi.std.introspection.operation.data_definition')
        field_def = StructDefinition(MAP_ENTRY, [('key', StringDefinition()),
                                                 ('value', data_ref_def)])
        data_def = StructDefinition(
            'com.vmware.vapi.std.introspection.operation.data_definition',
            [('type', StringDefinition()),
             ('element_definition', OptionalDefinition(data_ref_def)),
             ('name', OptionalDefinition(StringDefinition())),
             ('fields', OptionalDefinition(ListDefinition(field_def)))])
        data_ref_def.target = data_def
        output_def = StructDefinition(
            'com.vmware.vapi.std.introspection.operation.info',
            [('input_definition', data_def), ('output_definition', data_def),
             ('error_definitions', ListDefinition(data_def))])
        method_defs[get_method_id] = MethodDefinition(
            get_method_id,
            StructDefinition(OPERATION_INPUT,
                             [('service_id', StringDefinition()),
                              ('operation_id', StringDefinition())]),
            output_def, [not_found_def])
        methods[get_method_id] = self._get

        IntrospectionBaseApiInterface.__init__(self, iface_id, method_defs,
                                               methods)
Exemplo n.º 3
0
 def test_list_type(self):
     list_type = ListType(IntegerType())
     self.assertNotEqual(list_type, None)
     self.assertEqual(list_type.definition,
                      ListDefinition(IntegerDefinition()))
     self.assertEqual(list_type.element_type.definition,
                      IntegerDefinition())
Exemplo n.º 4
0
 def test_map_type(self):
     map_type = MapType(StringType(), StringType())
     self.assertNotEqual(map_type, None)
     self.assertEqual(
         map_type.definition,
         ListDefinition(
             StructDefinition(MAP_ENTRY, [('key', StringDefinition()),
                                          ('value', StringDefinition())])))
     self.assertRaises(TypeError, MapType, 'bogus', StringType())
     self.assertRaises(TypeError, MapType, StringType(), 'bogus')
Exemplo n.º 5
0
    def visit_set(self, typ):
        """
        Visit a set value

        :type  typ: :class:`SetType`
        :param typ: Binding type of the value
        """
        typ.element_type.accept(self)
        element_def = self._out_value
        self._out_value = ListDefinition(element_def)
Exemplo n.º 6
0
def make_map_def(key, value):
    """
    Internal function to create map definition from a key and value
    definitions. For use only by vAPI runtime.
    :type  key: :class:`vmware.vapi.data.type.DataDefinition`
    :param key: DataDefintion for the map key
    :type  value: :class:`vmware.vapi.data.type.DataDefinition`
    :param value: DataDefintion for the map value
    """
    return ListDefinition(
        StructDefinition(MAP_ENTRY, ((_MAP_KEY_FIELD_NAME, key),
                                     (_MAP_VALUE_FIELD_NAME, value))))
Exemplo n.º 7
0
    def __init__(self, name, introspection_adapter):
        """
        Initialize ServiceApiInterface

        :type  name: :class:`str`
        :param name: Name of the provider
        :type  introspection_adapter:
            :class:`vmware.vapi.provider.introspection.ApiProviderIntrospector`
        :param introspection_adapter: Adapter for fetching introspection information
        """
        self._adapter = introspection_adapter

        iface_id = InterfaceIdentifier(
            'com.vmware.vapi.std.introspection.service')
        method_defs = {}
        methods = {}

        # list method
        list_method_id = MethodIdentifier(iface_id, 'list')
        output_def = ListDefinition(StringDefinition())
        method_defs[list_method_id] = MethodDefinition(
            list_method_id, StructDefinition(OPERATION_INPUT, []), output_def,
            [])
        methods[list_method_id] = self._list

        # get method
        get_method_id = MethodIdentifier(iface_id, 'get')
        output_def = StructDefinition(
            'com.vmware.vapi.std.introspection.service.info',
            [('operations', ListDefinition(StringDefinition()))])
        method_defs[get_method_id] = MethodDefinition(
            get_method_id,
            StructDefinition(OPERATION_INPUT, [('id', StringDefinition())]),
            output_def, [not_found_def])
        methods[get_method_id] = self._get

        IntrospectionBaseApiInterface.__init__(self, iface_id, method_defs,
                                               methods)
Exemplo n.º 8
0
    def visit_map(self, typ):
        """
        Visit a map value

        :type  typ: :class:`MapType`
        :param typ: Binding type of the value
        """
        field_defs = []
        typ.key_type.accept(self)
        key_def = self._out_value
        field_defs.append((MAP_KEY_FIELD, key_def))
        typ.value_type.accept(self)
        value_def = self._out_value

        field_defs.append((MAP_VALUE_FIELD, value_def))
        element_def = StructDefinition(MAP_ENTRY, field_defs)
        self._out_value = ListDefinition(element_def)
Exemplo n.º 9
0
__copyright__ = 'Copyright 2015 VMware, Inc.  All rights reserved. -- VMware Confidential'  # pylint: disable=line-too-long

from vmware.vapi.data.definition import (
    DynamicStructDefinition, ErrorDefinition, ListDefinition,
    OptionalDefinition, StringDefinition, StructDefinition)
from vmware.vapi.l10n.runtime import message_factory


_ID_FIELD_NAME = 'id'
_DEFAULT_MESSAGE_FIELD_NAME = 'default_message'
_ARGS_FIELD_NAME = 'args'
localizable_message_def = StructDefinition(
    'com.vmware.vapi.std.localizable_message',
    ((_ID_FIELD_NAME, StringDefinition()),
     (_DEFAULT_MESSAGE_FIELD_NAME, StringDefinition()),
     (_ARGS_FIELD_NAME, ListDefinition(StringDefinition()))))


_MESSAGES_FIELD_NAME = 'messages'
messages_list_def = ListDefinition(localizable_message_def)
_DATA_FIELD_NAME = 'data'
data_optional_dynamicstructure_def = OptionalDefinition(
    DynamicStructDefinition())
_ERROR_DEF_FIELDS = [(_MESSAGES_FIELD_NAME, messages_list_def),
                     (_DATA_FIELD_NAME, data_optional_dynamicstructure_def)]


def make_std_error_def(name):
    """
    Internal function to create a "standard" ErrorDefinition for use only by
    the vAPI runtime.
Exemplo n.º 10
0
def build_data_value(py_value, data_def):
    """
    Converts a native python value to data value
    using the provided data definition

    :type  py_value: :class:`object`
    :param py_value: Python native value
    :type  data_def: :class:`vmware.vapi.data.definition.DataDefinition`
    :param data_def: Data definition
    :rtype: :class:`vmware.vapi.data.value.DataValue`
    :return: Data value
    """
    output_val = None
    if data_def.type == Type.OPTIONAL:
        output_val = data_def.new_value()
        if py_value is not None:
            output_val.value = build_data_value(py_value,
                                                data_def.element_type)
    elif data_def.type == Type.LIST:
        output_val = data_def.new_value()
        if py_value:
            for output in py_value:
                output_val.add(build_data_value(output, data_def.element_type))
    elif data_def.type in (Type.STRUCTURE, Type.ERROR):
        output_val = data_def.new_value()
        for field in data_def.get_field_names():
            field_def = data_def.get_field(field)

            if py_value is None:
                if field_def.type == Type.OPTIONAL:
                    output_val.set_field(field,
                                         OptionalValue())
                else:
                    msg = message_factory.get_message(
                        'vapi.data.structure.field.missing', data_def.name,
                        field)
                    raise CoreException(msg)
            else:
                if isinstance(py_value, dict):
                    value = py_value.get(field)
                elif isinstance(py_value, VapiStruct):
                    # If Class used in python bindings is the struct
                    value = py_value.get_field(field)
                else:
                    msg = message_factory.get_message(
                        'vapi.data.structure.field.invalid', field)
                    raise CoreException(msg)
                output_val.set_field(
                    field, build_data_value(value, data_def.get_field(field)))
    elif data_def.type == Type.DYNAMIC_STRUCTURE:
        output_val = StructValue(DYNAMIC_STRUCTURE)
        if isinstance(py_value, dict):
            for key, val in six.iteritems(py_value):
                if val is None:
                    field_data_def = OptionalDefinition(StringDefinition())
                elif isinstance(val, list):
                    if len(val) == 0:
                        # empty list
                        field_data_def = ListDefinition(StringDefinition())
                    else:
                        # at least one element
                        field_data_def = ListDefinition(
                            _py_to_data_def_map.get(type(val[0]))())
                elif isinstance(val, dict):
                    field_data_def = DynamicStructDefinition()
                else:
                    try:
                        # Field is probably a primitive/atomic type
                        field_data_def_type = _py_to_data_def_map[type(val)]
                        field_data_def = field_data_def_type()
                    except KeyError:
                        msg = message_factory.get_message(
                                'vapi.data.serializers.python.unsupported.'
                                'python.type',
                                type(val), key)
                        raise CoreException(msg)
                output_val.set_field(key, build_data_value(val, field_data_def))
    elif data_def.type == Type.VOID:
        output_val = data_def.new_value()
    elif data_def.type == Type.OPAQUE:
        output_val = py_value
    # Primitive type Integer/Double/String/Boolean/Secret
    else:
        output_val = data_def.new_value(py_value)
    return output_val
Exemplo n.º 11
0
 def test_set_type(self):
     set_type = SetType(StringType())
     self.assertNotEqual(set_type, None)
     self.assertEqual(set_type.definition,
                      ListDefinition(StringDefinition()))
     self.assertRaises(TypeError, SetType, 'bogus')