Source code for vmware.vapi.stdlib.client.introspection

"""
Introspection services
"""

__author__ = 'VMware, Inc.'
__copyright__ = 'Copyright (c) 2015 VMware, Inc.  All rights reserved.'

import logging

from vmware.vapi.core import (
    InterfaceIdentifier, MethodIdentifier, MethodDefinition)
from vmware.vapi.data.serializers.introspection import (
    convert_data_value_to_data_def)
from com.vmware.vapi.std.introspection_client import Operation
from vmware.vapi.stdlib.client.factories import StubConfigurationFactory

logger = logging.getLogger(__name__)


localizable_message_def = Operation.DataDefinition(
    type=Operation.DataDefinition.DataType.STRUCTURE,
    name='com.vmware.vapi.std.localizable_message',
    fields={
        'default_message': Operation.DataDefinition(
            type=Operation.DataDefinition.DataType.STRING
        ),
        'args': Operation.DataDefinition(
            type=Operation.DataDefinition.DataType.LIST,
            element_definition=Operation.DataDefinition(
                type=Operation.DataDefinition.DataType.STRING
            )
        ),
        'id': Operation.DataDefinition(
            type=Operation.DataDefinition.DataType.STRING
        )
    }
)


[docs]def make_introspection_error_def(error_name): """ Create an instance of :class:`com.vmware.vapi.std.introspection_client.Operation.DataDefinition` that represents the standard error specified :type error_name: :class:`str` :param error_name: Fully qualified error name of one of the vAPI standard errors :rtype: :class:`com.vmware.vapi.std.introspection_client.Operation.DataDefinition` :return: Error definition instance for the given error name """ return Operation.DataDefinition( type=Operation.DataDefinition.DataType.ERROR, name=error_name, fields={ 'messages': Operation.DataDefinition( type=Operation.DataDefinition.DataType.LIST, element_definition=localizable_message_def ), 'data': Operation.DataDefinition( type=Operation.DataDefinition.DataType.OPTIONAL, element_definition=Operation.DataDefinition( type=Operation.DataDefinition.DataType.DYNAMIC_STRUCTURE) ) } )
[docs]class IntrospectableApiProvider(object): """ Helper class for invoking the 'get' operation in the service 'com.vmware.vapi.std.introspection.Operation' """ def __init__(self, connector): """ Initialize IntrospectableApiProvider :type connector: :class:`vmware.vapi.protocol.client.connector.Connector` :param Connector: Protocol connector to use for operation invocations """ stub_config = StubConfigurationFactory.new_std_configuration(connector) self._operation = Operation(stub_config)
[docs] def get_method(self, service_id, operation_id): """ Get method definition for the specified operation :type service_id: :class:`str` :param service_id: Service identifier :type operation_id: :class:`str` :param operation_id: Operation identifier :rtype: :class:`vmware.vapi.core.MethodDefinition` :return: Method definition of the specified operation """ info = self._operation.get(service_id=service_id, operation_id=operation_id) input_def = convert_data_value_to_data_def( info.input_definition.get_struct_value()) output_def = convert_data_value_to_data_def( info.output_definition.get_struct_value()) error_defs = [convert_data_value_to_data_def(error_def.get_struct_value()) for error_def in info.error_definitions] interface_id = InterfaceIdentifier(service_id) method_id = MethodIdentifier(interface_id, operation_id) method_definition = MethodDefinition(method_id, input_def, output_def, error_defs) return method_definition