Пакетирование API Python Gmail : Ошибка атрибута: объект «дикт» не имеет атрибута «возобновляемый»

#python #python-3.x #gmail #gmail-api

Вопрос:

Я сталкиваюсь со следующей ошибкой при выполнении batch.add() с запросом API Gmail.

Ошибка:

 if request.resumable is not None:
AttributeError: 'dict' object has no attribute 'resumable' 
 for searchResultPart in searchResultParts: 
    batch = BatchHttpRequest() 
    batch2 = BatchHttpRequest()
    for msgID in searchResultPart: #Loop through each messageID
        request1 = service.users().messages().get(userId=userID, id=msgID).execute()
        request1.update({"resumable" : None}) #TRIED THIS DOES NOT WORK
        request2 = service.users().messages().modify(userId=userID, id=msgID, body={'removeLabelIds': ['UNREAD']}).execute()
        batch.add(request=request1,request_id=msgID) #Fetch the message
        batch2.add(request=request2,request_id=msgID) #Mark the fetched messages as read
    batch.execute() 
    batch2.execute() 

Я попытался добавить ключ : request1[«возобновляемый»] = Нет
Я попытался добавить атрибут : request1.возобновляемый = Нет

Я пытался искать другие решения, но я застрял. Что я могу сделать, чтобы решить эту проблему?

Ошибка, которую я вижу, возникает во время batch.add(запрос=request1,request_id=msgID).

Насколько я понимаю, причина, по которой это происходит, заключается в том, что вы не можете извлекать полезные нагрузки с помощью пакетной обработки. Таким образом, пакетирование ожидает, что возобновляемое будет неназначено без назначения.

Комментарии:

1. Итак, проблема заключалась в .execute() в конце.

Ответ №1:

   for searchResultPart in searchResultParts: 
      batch = BatchHttpRequest() 
      batch2 = BatchHttpRequest()
      for msgID in searchResultPart: #Loop through each messageID
          request1 = service.users().messages().get(userId=userID,id=msgID)
          body = {'removeLabelIds': ['UNREAD']}
          request2 = service.users().messages().modify(userId=userID, id=msgID, body=body)
          batch.add(request=request1, callback=self.theEmailCallback,request_id=msgID) #Fetch the message
          batch2.add(request=request2,request_id=msgID) #Mark the fetched messages as read
      batch.execute() 
      batch2.execute() 

Обратите внимание, что это то же самое, за исключением того, что я удалил .execute() из запросов 1 и 2. Теперь я больше не получаю эту ошибку.