def _generate_property_info(self, prop_name, lom_object): try: real_prop = getattr(lom_object, prop_name) if not isinstance(real_prop, HIDDEN_TYPES) and not is_class(real_prop): prop_type = real_prop.__class__.__name__ if prop_name in TUPLE_TYPES: type_name = TUPLE_TYPES[prop_name].__name__ self._lists_of_children.append((prop_name, type_name)) elif prop_name in PROPERTY_TYPES.keys(): type_name = (real_prop.__class__ if real_prop != None else PROPERTY_TYPES[prop_name]).__name__ self._children.append((prop_name, type_name)) elif prop_name == 'canonical_parent': if real_prop != None: self._children.append((prop_name, prop_type)) elif callable(real_prop): if not prop_name.endswith('_listener'): self._functions.append((prop_name, )) elif prop_type not in ('type', 'Enum'): info_type = 'int' if isinstance(real_prop, ENUM_TYPES) else prop_type self._properties.append((prop_name, info_type)) except (AssertionError, RuntimeError): pass
def _generate_property_info(self, prop_name, lom_object, epii_version): try: real_prop = getattr(lom_object, prop_name) if not is_class(real_prop): prop_info = get_exposed_property_info(type(lom_object), prop_name, epii_version) prop_type = real_prop.__class__.__name__ if prop_info and prop_info.format == MFLPropertyFormats.JSON: self._properties.append((prop_name, 'dict')) elif prop_name in TUPLE_TYPES: self._add_list_of_children(prop_name) elif prop_name in PROPERTY_TYPES.keys(): self._add_child(real_prop, prop_name) elif prop_name == 'canonical_parent': if real_prop != None: self._children.append((prop_name, prop_type)) elif callable(real_prop): if not prop_name.endswith('_listener'): self._functions.append((prop_name, )) elif prop_type not in ('type', 'Enum'): info_type = 'int' if isinstance(real_prop, ENUM_TYPES) else prop_type self._properties.append((prop_name, info_type)) except (AssertionError, RuntimeError): pass return
def _create_introspection_for_dir(self, directory): for attr_name in list(dir(directory)): try: attribute = getattr(directory, attr_name) if attribute not in self._excluded: if self._process_module(attribute) or is_class(attribute): self._create_introspection_for_module_or_class(attribute) except: pass
def _generate_property_info(self, prop_name, lom_object): try: real_prop = getattr(lom_object, prop_name) if not is_class(real_prop): prop_type = real_prop.__class__.__name__ if prop_name in TUPLE_TYPES: self._add_list_of_children(prop_name) elif prop_name in PROPERTY_TYPES.keys(): self._add_child(real_prop, prop_name) elif prop_name == 'canonical_parent': if real_prop != None: self._children.append((prop_name, prop_type)) elif callable(real_prop): if not prop_name.endswith('_listener'): self._functions.append((prop_name,)) elif prop_type not in ('type', 'Enum'): info_type = 'int' if isinstance(real_prop, ENUM_TYPES) else prop_type self._properties.append((prop_name, info_type)) except (AssertionError, RuntimeError): pass
def _is_relevant_class(self, class_object): return is_class(class_object) and hasattr(class_object, '__module__') and sys.modules.get(class_object.__module__) in self._lom_modules and class_object not in self._lom_classes and class_object not in self._excluded