def METHOD_NAME(self, obj):
    """Get objects properties and components.
    """
    propertyNames = sorted(obj.inventory.propertyNames())
    facilityNames = obj.inventory.facilityNames()
    facilityNames.sort()
    propertiesOmit = [
        "help",
        "help-components",
        "help-persistence",
        "help-properties",
        "typos",
    ]
    properties = {}
    for name in propertyNames:
        if name in facilityNames or name in propertiesOmit:
            continue
        trait = obj.inventory.getTrait(name)
        descriptor = obj.inventory.getTraitDescriptor(name)
        try:
            description = trait.meta['tip']
        except KeyError:
            description = "No description available."
        properties[name] = {
            "value": str(descriptor.value),
            "type": trait.type,
            "description": description,
            "setFrom": str(descriptor.locator),
        }
    facilitiesOmit = [
        "weaver",
    ]
    facilities = {}
    for name in facilityNames:
        if name in facilitiesOmit:
            continue
        trait = obj.inventory.getTrait(name)
        descriptor = obj.inventory.getTraitDescriptor(name)
        try:
            description = trait.meta['tip']
        except KeyError:
            description = "No description available."
        facilityProperties, facilityComponents = self.METHOD_NAME(
            descriptor.value)
        facilities[name] = {
            "name": descriptor.value.name,
            "class": str(descriptor.value),
            "description": description,
            "setFrom": str(descriptor.locator),
            "aliases": descriptor.value.aliases,
            "properties": facilityProperties,
            "components": facilityComponents,
        }
    if isinstance(obj, PropertyList):
        for iname, descriptor in obj.items:
            properties[iname] = {
                "value": str(descriptor.value),
                "type": "str",
                "description": "N/A",
                "setFrom": str(descriptor.locator),
            }
    return (properties, facilities)