适用于Python的Google API客户端。批处理请求:如何访问回调中的特定请求

时间:2017-01-04 00:39:52

标签: python google-api google-api-python-client

根据官方doc,您可以通过适用于Python的Google API客户端库进行批量请求。这里有一个例子

from apiclient.http import BatchHttpRequest

def list_animals(request_id, response, exception):
  if exception is not None:
    # Do something with the exception
    pass
  else:
    # Do something with the response
    pass

def list_farmers(request_id, response):
  """Do something with the farmers list response."""
  pass

service = build('farm', 'v2')

batch = service.new_batch_http_request()

batch.add(service.animals().list(), callback=list_animals)
batch.add(service.farmers().list(), callback=list_farmers)
batch.execute(http=http)

有没有办法在回调中访问请求。例如,如果有异常,则打印请求(而不是request_id)?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,因为我需要使用compute.instances().aggregatedList_next()函数的原始请求。

我最终将一个唯一的request_id传递给batch.add(),并创建了一个字典来跟踪所做的原始请求。然后在回调中,我引用了该字典并使用唯一的request_id拉出了请求。

所以我做了以下事情:

requests = {}
project = 'example-project'
batch = service.new_batch_http_request(callback=callback_callable)
new_request = compute.instances().aggregatedList(project=project)
requests[project] = new_request
batch.add(new_request, request_id=project)

在可调用函数中:

def callback_callable(self, request_id, response, exception):
    original_request = requests[request_id]

请注意,传递给request_id的值必须是字符串。如果传递了一个int,它将引发一个TypeError quote_from_bytes()期望的字节。

希望这有助于某人!