示例#1
0
def get_class_item_details(class_name, item, inst=None):
    """
    @param item can be one of {
        CIMProperty, CIMMethod, CIMParameter }
    @param inst provides some additional info (if given)
    """
    if not isinstance(class_name, str):
        raise TypeError('class_name must be a string')
    if not isinstance(item, (pywbem.CIMProperty, pywbem.CIMMethod,
            pywbem.CIMParameter)):
        raise TypeError('item must be either CIMProperty,'
                ' CIMParameter or CIMMethod')
    if (   inst is not None
       and not isinstance(inst, (pywbem.CIMInstanceName, pywbem.CIMInstance))):
        raise TypeError('inst must be one of CIMInstanceName'
            ', CIMInstance or None')

    res = _get_default_attributes_dict(item.name,
            is_deprecated = 'deprecated' in item.qualifiers,
            is_method     = isinstance(item, pywbem.CIMMethod),
            is_required   = 'required' in item.qualifiers,
            is_valuemap   = 'valuemap' in item.qualifiers)

    if isinstance(item, (pywbem.CIMProperty, pywbem.CIMParameter)):
        res.update(_get_property_details(item, inst))
    elif isinstance(item, pywbem.CIMMethod): # CIMMethod
        res['type'] = item.return_type
        args = res['args']
        for parameter in item.parameters.values():
            args.append(get_class_item_details(class_name, parameter))

    if hasattr(item, 'class_origin'):
        res['is_local'] = item.class_origin == class_name
        res['class_origin'] = item.class_origin
    if 'description' in item.qualifiers:
        res['description'] = item.qualifiers['description'].value
    else:
        res['description'] = None
    for qualifier in sorted(item.qualifiers.values(), key=lambda v: v.name):
        if qualifier.name.lower() in (
                'description', 'key', 'required'):
            continue
        res['qualifiers'].append(
                (qualifier.name, render.val2str(qualifier.value)))

    return res
示例#2
0
def get_class_item_details(class_name, item, inst=None):
    """
    @param item can be one of {
        CIMProperty, CIMMethod, CIMParameter }
    @param inst provides some additional info (if given)
    """
    if not isinstance(class_name, basestring):
        raise TypeError('class_name must be a string')
    if not isinstance(item, (pywbem.CIMProperty, pywbem.CIMMethod,
            pywbem.CIMParameter)):
        raise TypeError('item must be either CIMProperty,'
                ' CIMParameter or CIMMethod')
    if (   inst is not None
       and not isinstance(inst, (pywbem.CIMInstanceName, pywbem.CIMInstance))):
        raise TypeError('inst must be one of CIMInstanceName'
            ', CIMInstance or None')

    res = _get_default_attributes_dict(item.name,
            is_deprecated = item.qualifiers.has_key('deprecated'),
            is_method     = isinstance(item, pywbem.CIMMethod),
            is_required   = item.qualifiers.has_key('required'),
            is_valuemap   = item.qualifiers.has_key('valuemap'))

    if isinstance(item, (pywbem.CIMProperty, pywbem.CIMParameter)):
        res.update(_get_property_details(item, inst))
    elif isinstance(item, pywbem.CIMMethod): # CIMMethod
        res['type'] = item.return_type
        args = res['args']
        for parameter in item.parameters.values():
            args.append(get_class_item_details(class_name, parameter))

    if hasattr(item, 'class_origin'):
        res['is_local'] = item.class_origin == class_name
        res['class_origin'] = item.class_origin
    if item.qualifiers.has_key('description'):
        res['description'] = item.qualifiers['description'].value
    else:
        res['description'] = None
    for qualifier in sorted(item.qualifiers.values(), key=lambda v: v.name):
        if qualifier.name.lower() in (
                'description', 'key', 'required'):
            continue
        res['qualifiers'].append(
                (qualifier.name, render.val2str(qualifier.value)))

    return res
示例#3
0
def _get_property_details(prop, inst=None):
    """
    @param prop is either CIMProperty or CIMParameter
    @param inst is either CIMInstance or CIMInstanceName
    @return dictionary describing property
    """
    if not isinstance(prop, (pywbem.CIMProperty, pywbem.CIMParameter)):
        raise TypeError('prop must be either CIMProperty or CIMParameter')
    if (   inst is not None
       and not isinstance(inst, pywbem.CIMInstance)
       and not isinstance(inst, pywbem.CIMInstanceName)):
        raise TypeError('inst must be one of: CIMInstance,'
               ' CIMInstanceName, None')
    value = _get_prop_value(prop, inst)

    res = _get_default_attributes_dict(prop.name,
            is_deprecated = 'deprecated' in prop.qualifiers,
            is_required   = 'required' in prop.qualifiers,
            is_valuemap   = 'valuemap' in prop.qualifiers,
            is_key     = 'key' in prop.qualifiers,
            type       = _get_prop_type(prop, inst),
            value_orig = value)

    if prop.is_array:
        res['is_array'] = prop.is_array
        res['array_size'] = prop.array_size

    if value is not None:
        if (   'values' in prop.qualifiers
           and 'valuemap' in prop.qualifiers):
            res['value'] = render.mapped_value2str(value, prop.qualifiers)
        elif prop.reference_class is not None:
            res['value'] = value
        else:
            res['value'] = render.val2str(value)

    if 'valuemap' in prop.qualifiers:
        res['is_valuemap'] = True
        valmap_quals = prop.qualifiers['valuemap'].value
        values_quals = None
        if 'values' in prop.qualifiers:
            values_quals = prop.qualifiers['values'].value
        for ivq, val in enumerate(valmap_quals):
            try:
                pywbem.cimvalue(val, prop.type)
            except Exception:
                # skip valuemap items that aren't valid values
                # such as the numeric ranges for DMTF Reserved and whatnot
                continue
            res['valuemap'].append(val)
            if values_quals and ivq < len(values_quals):
                res['values'][val] = [values_quals[ivq]]
            else:
                res['values'][val] = None

    if isinstance(prop, pywbem.CIMParameter):
        res['out'] = (   'out' in prop.qualifiers
                     and prop.qualifiers['out'].value)
        # consider parameter as input if IN qualifier is missing and
        # it is not an output parameter
        res['in'] = (  (   'in' in prop.qualifiers
                       and prop.qualifiers['in'].value)
                    or (   'out' in prop.qualifiers
                       and not res['out']))
    return res
示例#4
0
def _get_property_details(prop, inst=None):
    """
    @param prop is either CIMProperty or CIMParameter
    @param inst is either CIMInstance or CIMInstanceName
    @return dictionary describing property
    """
    if not isinstance(prop, (pywbem.CIMProperty, pywbem.CIMParameter)):
        raise TypeError('prop must be either CIMProperty or CIMParameter')
    if (   inst is not None
       and not isinstance(inst, pywbem.CIMInstance)
       and not isinstance(inst, pywbem.CIMInstanceName)):
        raise TypeError('inst must be one of: CIMInstance,'
               ' CIMInstanceName, None')
    value = _get_prop_value(prop, inst)

    res = _get_default_attributes_dict(prop.name,
            is_deprecated = prop.qualifiers.has_key('deprecated'),
            is_required   = prop.qualifiers.has_key('required'),
            is_valuemap   = prop.qualifiers.has_key('valuemap'),
            is_key     = prop.qualifiers.has_key('key'),
            type       = _get_prop_type(prop, inst),
            value_orig = value)

    if prop.is_array:
        res['is_array'] = prop.is_array
        res['array_size'] = prop.array_size

    if value is not None:
        if (   prop.qualifiers.has_key('values')
           and prop.qualifiers.has_key('valuemap')):
            res['value'] = render.mapped_value2str(value, prop.qualifiers)
        elif prop.reference_class is not None:
            res['value'] = value
        else:
            res['value'] = render.val2str(value)

    if prop.qualifiers.has_key('valuemap'):
        res['is_valuemap'] = True
        valmap_quals = prop.qualifiers['valuemap'].value
        values_quals = None
        if prop.qualifiers.has_key('values'):
            values_quals = prop.qualifiers['values'].value
        for ivq, val in enumerate(valmap_quals):
            try:
                pywbem.tocimobj(prop.type, val)
            except Exception:
                # skip valuemap items that aren't valid values
                # such as the numeric ranges for DMTF Reserved and whatnot
                continue
            res['valuemap'].append(val)
            if values_quals and ivq < len(values_quals):
                res['values'][val] = [values_quals[ivq]]
            else:
                res['values'][val] = None

    if isinstance(prop, pywbem.CIMParameter):
        res['out'] = (   prop.qualifiers.has_key('out')
                     and prop.qualifiers['out'].value)
        # consider parameter as input if IN qualifier is missing and
        # it is not an output parameter
        res['in'] = (  (   prop.qualifiers.has_key('in')
                       and prop.qualifiers['in'].value)
                    or (   not prop.qualifiers.has_key
                       and not res['out']))
    return res