docs: def process(self, tup):
          """Process steps:
  
          1. Stream in (term, timestamp).
          2. Perform :meth:`~birding.search.SearchManager.search` on term.
          3. Emit (term, timestamp, search_result).
          """
          term, timestamp = tup.values
          if term not in self.term_shelf:
              self.log(
                  'search: {term}, {timestamp}'
                  .format(term=term, timestamp=timestamp))
              search_result = self.manager.search(q=term)
              self.emit([term, timestamp, search_result])
              self.term_shelf[term] = timestamp