docs: def register_whoosheer(self, wh):
          """This will register the given whoosher on `whoosheers`, create the
          neccessary SQLAlchemy event listeners, replace the `query_class` with
          our own query class which will provide the search functionality
          and store the app on the whoosheer, so that we can always work
          with that.
          :param wh: The whoosher which should be registered.
          """
          self.whoosheers.append(wh)
          for model in wh.models:
              event.listen(model, 'after_{0}'.format(INSERT_KWD), self.after_insert)
              event.listen(model, 'after_{0}'.format(UPDATE_KWD), self.after_update)
              event.listen(model, 'after_{0}'.format(DELETE_KWD), self.after_delete)
              query_class = getattr(model, 'query_class', None)
  
              if query_class is not None and isclass(query_class):
                  # already a subclass, ignore it
                  if issubclass(query_class, self.query):
                      pass
  
                  # ensure there can be a stable MRO
                  elif query_class not in (BaseQuery, SQLAQuery, WhoosheeQuery):
                      query_class_name = query_class.__name__
                      model.query_class = type(
                          "Whooshee{}".format(query_class_name), (query_class, self.query), {}
                      )
                  else:
                      model.query_class = self.query
              else:
                  model.query_class = self.query
  
          if self.app:
              wh.app = self.app
          return wh