code: def describe(o):
      
      #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)
docs: 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.