def describe(o):
    """Describes the object using developer-specified attributes specific to
    each main object type.

    Returns:
        dict: keys are specific attributes tailored to the specific object type,
        though `fqdn` is common to all descriptions; values are the corresponding
        attribute values which are *simple* types that can easily be serialized to
        JSON.
    """
    #First, we need to determine the fqdn, so that we can lookup the format for
    #this object in the config file for the package.
    from inspect import getmodule
    from acorn.logging.decoration import _fqdn
    fqdn = _fqdn(o, False)
    if fqdn is None:
        #This should not have happened; if the FQDN couldn't be determined, then
        #we should have never logged it.
        return json_describe(o, str(type(o)))
    package = fqdn.split('.')[0]

    global _package_desc
    if package not in _package_desc:
        from acorn.config import descriptors
        spack = descriptors(package)
        if spack is None:
            _package_desc[package] = None
            return json_describe(o, fqdn)
        else:
            _package_desc[package] = spack
    
    if _package_desc[package] is None:
        return json_describe(o, fqdn)
    elif fqdn in _package_desc[package]:
        return json_describe(o, fqdn, _package_desc[package][fqdn])
    else:
        return json_describe(o, fqdn)
def describe ( o ) : from inspect import getmodule from acorn . logging . decoration import _fqdn fqdn = _fqdn ( o , False ) if fqdn is None : return json_describe ( o , str ( type ( o ) ) ) package = fqdn . split ( '.' ) [ 0 ] global _package_desc if package not in _package_desc : from acorn . config import descriptors spack = descriptors ( package ) if spack is None : _package_desc [ package ] = None return json_describe ( o , fqdn ) else : _package_desc [ package ] = spack if _package_desc [ package ] is None : return json_describe ( o , fqdn ) elif fqdn in _package_desc [ package ] : return json_describe ( o , fqdn , _package_desc [ package ] [ fqdn ] ) else : return json_describe ( o , fqdn )
Describes the object using developer-specified attributes specific to
    each main object type.

    Returns:
        dict: keys are specific attributes tailored to the specific object type,
        though `fqdn` is common to all descriptions; values are the corresponding
        attribute values which are *simple* types that can easily be serialized to
        JSON.