code: def submit_create_and_upload(self, halt_on_error=True):
          
          # check global setting for override
          if self.halt_on_batch_error is not None:
              halt_on_error = self.halt_on_batch_error
  
          content = self.data
          # store the length of the batch data to use for poll interval calculations
          self.tcex.log.info('Batch Group Size: {:,}.'.format(len(content.get('group'))))
          self.tcex.log.info('Batch Indicator Size {:,}.'.format(len(content.get('indicator'))))
          if self.debug:
              # special code for debugging App using batchV2.
              self.write_batch_json(content)
          if content.get('group') or content.get('indicator'):
              try:
                  files = (('config', json.dumps(self.settings)), ('content', json.dumps(content)))
                  params = {'includeAdditional': 'true'}
                  r = self.tcex.session.post('/v2/batch/createAndUpload', files=files, params=params)
                  self.tcex.log.debug('Batch Status Code: {}'.format(r.status_code))
                  if not r.ok or 'application/json' not in r.headers.get('content-type', ''):
                      self.tcex.handle_error(10510, [r.status_code, r.text], halt_on_error)
                  return r.json()
              except Exception as e:
                  self.tcex.handle_error(10505, [e], halt_on_error)
          return {}
docs: Submit Batch request to ThreatConnect API.
  
          Returns.
              dict: The Batch Status from the ThreatConnect API.