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
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
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
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