docs: def __resolve_path(cls, obj, path):
          """Follow a kwargsql expression starting from a given object
          and return the deduced object.
  
          :param obj: the object to start from
          :param list path: list of operations to perform. It does not contain
                            the optional operation of a traditional kwargsql
                            expression.
          :return: the found object if any, `None` otherwise.
  
          For instance:
          >>> __resolve_path(dict(foo=dict(bar=42)), ['foo', 'bar'])
          >>> 42
  
          """
          path = filter(lambda s: s, path)
          if any(path):
              pathes = len(path)
              i = 0
              while i < pathes:
                  # _get_obj_attr can supersede `i` because it might
                  # evaluate the entire expression by itself.
                  obj, i = cls._get_obj_attr(obj, path, i)
                  i += 1
          else:
              raise Exception("Nothing to do")
          return obj