docs: def get(self, type: Type[T], query: Mapping[str, Any]) -> T:
          """Gets a query from the data pipeline.
  
          1) Extracts the query the sequence of data sources.
          2) Inserts the result into the data sinks (if appropriate).
          3) Transforms the result into the requested type if it wasn't already.
          4) Inserts the transformed result into any data sinks.
  
          Args:
              query: The query being requested.
              context: The context for the extraction (mutable).
  
          Returns:
              The requested object.
          """
          LOGGER.info("Getting SourceHandlers for \"{type}\"".format(type=type.__name__))
          try:
              handlers = self._get_types[type]
          except KeyError:
              try:
                  LOGGER.info("Building new SourceHandlers for \"{type}\"".format(type=type.__name__))
                  handlers = self._get_handlers(type)
              except NoConversionError:
                  handlers = None
              self._get_types[type] = handlers
  
          if handlers is None:
              raise NoConversionError("No source can provide \"{type}\"".format(type=type.__name__))
  
          LOGGER.info("Creating new PipelineContext")
          context = self._new_context()
  
          LOGGER.info("Querying SourceHandlers for \"{type}\"".format(type=type.__name__))
          for handler in handlers:
              try:
                  return handler.get(query, context)
              except NotFoundError:
                  pass
  
          raise NotFoundError("No source returned a query result!")