code: def batch(self, methods):
          
          methods = list(methods) # methods can be iterator
          if not methods:
              #accepts also empty list (or generator) - it allows call batch directly with query result (eventually empty)
              return
          queries, callbacks = list(zip(*[m(batch=True) for m in methods]))
          # perform all the operations in one batch
          responses = self.execute("", "POST", requests=queries)
          # perform the callbacks with the response data (updating the existing
          # objets, etc)
  
          batched_errors = []
          for callback, response in zip(callbacks, responses):
              if "success" in response:
                  callback(response["success"])
              else:
                  batched_errors.append(response["error"])
  
          if batched_errors:
              raise core.ParseBatchError(batched_errors)
docs: Given a list of create, update or delete methods to call, call all
          of them in a single batch operation.