def batch_upsert_catalog_objects(self, body, **kwargs):
all_params = ['<STR_LIT:body>']<EOL>all_params.append('<STR_LIT>')<EOL>params = locals()<EOL>for key, val in iteritems(params['<STR_LIT>']):<EOL><INDENT>if key not in all_params:<EOL><INDENT>raise TypeError(<EOL>"<STR_LIT>"<EOL>"<STR_LIT>" % key<EOL>)<EOL><DEDENT>params[key] = val<EOL><DEDENT>del params['<STR_LIT>']<EOL>if ('<STR_LIT:body>' not in params) or (params['<STR_LIT:body>'] is None):<EOL><INDENT>raise ValueError("<STR_LIT>")<EOL><DEDENT>resource_path = '<STR_LIT>'.replace('<STR_LIT>', '<STR_LIT>')<EOL>path_params = {}<EOL>query_params = {}<EOL>header_params = {}<EOL>header_params['<STR_LIT>'] = "<STR_LIT>"<EOL>form_params = []<EOL>local_var_files = {}<EOL>body_params = None<EOL>if '<STR_LIT:body>' in params:<EOL><INDENT>body_params = params['<STR_LIT:body>']<EOL><DEDENT>header_params['<STR_LIT>'] = self.api_client.select_header_accept(['<STR_LIT:application/json>'])<EOL>if not header_params['<STR_LIT>']:<EOL><INDENT>del header_params['<STR_LIT>']<EOL><DEDENT>header_params['<STR_LIT:Content-Type>'] = self.api_client.select_header_content_type(['<STR_LIT:application/json>'])<EOL>auth_settings = ['<STR_LIT>']<EOL>return self.api_client.call_api(resource_path, '<STR_LIT:POST>',<EOL>path_params,<EOL>query_params,<EOL>header_params,<EOL>body=body_params,<EOL>post_params=form_params,<EOL>files=local_var_files,<EOL>response_type='<STR_LIT>',<EOL>auth_settings=auth_settings,<EOL>callback=params.get('<STR_LIT>'))<EOL>
BatchUpsertCatalogObjects
Creates or updates up to 10,000 target objects based on the provided list of objects. The target objects are grouped into batches and each batch is inserted/updated in an all-or-nothing manner. If an object within a batch is malformed in some way, or violates a database constraint, the entire batch containing that item will be disregarded. However, other batches in the same request may still succeed. Each batch may contain up to 1,000 objects, and batches will be processed in order as long as the total object count for the request (items, variations, modifier lists, discounts, and taxes) is no more than 10,000.

This method makes a synchronous HTTP request by default. To make an
asynchronous HTTP request, please define a `callback` function
to be invoked when receiving the response.
>>> def callback_function(response):
>>>     pprint(response)
>>>
>>> thread = api.batch_upsert_catalog_objects(body, callback=callback_function)

:param callback function: The callback function
    for asynchronous request. (optional)
:param BatchUpsertCatalogObjectsRequest body: An object containing the fields to POST for the request.  See the corresponding object definition for field details. (required)
:return: BatchUpsertCatalogObjectsResponse
         If the method is called asynchronously,
         returns the request thread.