jeremyephron / simplegmail

A simple Gmail API client for applications in Python
MIT License
336 stars 73 forks source link

Exception: "Precondition check failed." #73

Open safo-bora opened 2 years ago

safo-bora commented 2 years ago

FOUND: The error appears occasionally (1-2 times from 10)

HERE IS SOURCE:

from simplegmail import Gmail
from simplegmail.query import construct_query

def get_verification_code_from_inbox():
    print(f"EMAILS RECIPIENT-> {EMAIL_RECIPIENT}")

    email = Gmail()
    query_params = {
      "newer_than": (1, "day"),
      "recipient": EMAIL_RECIPIENT
    }

    print(f"Start verify INBOX email folder! [Recipient: {EMAIL_RECIPIENT}]")

    messages = email.get_unread_messages(query=construct_query(query_params))
    print(f"EMAILS FOUND -> {len(messages)}")

    datetime_now = datetime.datetime.now()
    print(f"TIME NOW -> {datetime_now}")

    for message in messages:
        datetime_target = datetime.datetime.strptime(message.date.strip(), '%Y-%m-%d %H:%M:%S%z')
        time_elapsed = datetime_now.replace(tzinfo=None) - datetime_target.replace(tzinfo=None)

        if time_elapsed < datetime.timedelta(minutes=5):
            print("EMAIL WAS FOUND!")

            message.mark_as_read()

            print("=" * 100)
            print("To: " + message.recipient)
            print("From: " + message.sender)
            print("Subject: " + message.subject)
            print("Message Body: " + message.plain)
            print(f"Letter was received: {time_elapsed} seconds ago")
            print("=" * 100)

The Exception:

Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    self.run()
  File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/local/lib/python3.8/site-packages/simplegmail/gmail.py", line 627, in thread_download_batch
    message_lists[thread_num] = [
  File "/usr/local/lib/python3.8/site-packages/simplegmail/gmail.py", line 628, in <listcomp>
    gmail._build_message_from_ref(
  File "/usr/local/lib/python3.8/site-packages/simplegmail/gmail.py", line 690, in _build_message_from_ref
    user_labels = {x.id: x for x in self.list_labels(user_id=user_id)}
  File "/usr/local/lib/python3.8/site-packages/simplegmail/gmail.py", line 568, in list_labels
    raise error
  File "/usr/local/lib/python3.8/site-packages/simplegmail/gmail.py", line 562, in list_labels
    res = self.service.users().labels().list(
  File "/usr/local/lib/python3.8/site-packages/googleapiclient/_helpers.py", line 130, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/googleapiclient/http.py", line 938, in execute
    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://gmail.googleapis.com/gmail/v1/users/me/labels?alt=json returned "Precondition check failed.". Details: "[{'message': 'Precondition check failed.', 'domain': 'global', 'reason': 'failedPrecondition'}]">
Traceback (most recent call last):
  File "reading_email.py", line 105, in <module>
    code = get_verification_code_from_inbox()
  File "reading_email.py", line 62, in get_verification_code_from_inbox
    messages = email.get_unread_messages(query=construct_query(query_params))
  File "/usr/local/lib/python3.8/site-packages/simplegmail/gmail.py", line 316, in get_unread_messages
    return self.get_messages(user_id, labels, query, attachments,
  File "/usr/local/lib/python3.8/site-packages/simplegmail/gmail.py", line 534, in get_messages
    return self._get_messages_from_refs(user_id, message_refs,
  File "/usr/local/lib/python3.8/site-packages/simplegmail/gmail.py", line 645, in _get_messages_from_refs
    return sum(message_lists, [])
TypeError: can only concatenate list (not "NoneType") to list