code: def put_many(self, type: Type[T], items: Iterable[T]) -> None:
          
          LOGGER.info("Getting SinkHandlers for \"{type}\"".format(type=type.__name__))
          try:
              handlers = self._put_types[type]
          except KeyError:
              try:
                  LOGGER.info("Building new SinkHandlers for \"{type}\"".format(type=type.__name__))
                  handlers = self._put_handlers(type)
              except NoConversionError:
                  handlers = None
              self._get_types[type] = handlers
  
          LOGGER.info("Creating new PipelineContext")
          context = self._new_context()
  
          LOGGER.info("Sending items \"{items}\" to SourceHandlers".format(items=items))
          if handlers is not None:
              items = list(items)
              for handler in handlers:
                  handler.put_many(items, context)
docs: Puts multiple objects of the same type into the data sink. The objects may be transformed into a new type for insertion if necessary.
  
          Args:
              items: An iterable (e.g. list) of objects to be inserted into the data pipeline.