code: def reserve(
          self,
          session: Session,
          saving_classes: List[Type],
          item_counts: Optional[Dict[str, int]] = None,
          use_lock: bool = False,
      ) -> "PrimaryKeyGenerator":
          
          query_classes = {cls for cls in saving_classes if cls in self.QUERY_CLASSES}
          for cls in query_classes:
              if item_counts and cls.__name__ in item_counts:
                  count = item_counts[cls.__name__]
              else:
                  count = 1
              self._reserve_id_range(session, cls, count, use_lock)
  
          return self
docs: session - Session for DB operations.
          saving_classes - class objects that need to be saved e.g. Issue, Run
          item_counts - map from class name to the number of items, for preallocating
          id ranges