docs: def get_objects(classpath, calling_classpath=""):
      """
      given a classpath like foo.bar.Baz return module foo.bar and class Baz
      objects
  
      .. seealso::
          https://docs.python.org/2.5/whatsnew/pep-328.html
          https://www.python.org/dev/peps/pep-0328/
  
      :param classpath: string, the full python class path (includes modules), a classpath
          is something like foo.bar.Che where Che is the class definied in the foo.bar
          module
      :param calling_classpath: string, if classpath is relative (eg, ..foo.Bar) then
          this is needed to resolve the relative classpath, it is usually the path of
          the module that is calling get_objects()
      :returns: tuple, (module, class)
      """
  #     if classpath.startswith("."):
  #         rel_count = len(re.match("^\.+", classpath).group(0))
  #         if calling_classpath:
  #             calling_count = calling_classpath.count(".")
  #             if rel_count > calling_count:
  #                 raise ValueError(
  #                     "Attempting relative import passed calling_classpath {}".format(
  #                         calling_classpath
  #                     )
  #                 )
  # 
  #             bits = calling_classpath.rsplit('.', rel_count)
  #             parent_classpath = bits[0]
  #             classpath = ".".join([parent_classpath, classpath[rel_count:]])
  # 
  #         else:
  #             raise ValueError("Attempting relative import without calling_classpath")
  # 
      module_name, class_name = classpath.rsplit('.', 1)
      module = importlib.import_module(module_name, calling_classpath)
      try:
          klass = getattr(module, class_name)
      except AttributeError:
          raise AttributeError("module {} has no attribute {} parsing {}".format(
              module.__name__,
              class_name,
              classpath
          ))
  
      return module, klass