Исключения в облачном хранилище, кроме блока - PullRequest
0 голосов
/ 30 апреля 2018
import datetime
from threading import Timer
import firebase_admin
from firebase_admin import firestore
import calendar

db = firestore.Client()
col_ref = db.collection(u'tblAssgin').get()
current_serving = [doc.id for doc in col_ref]
#print(current_serving)

def sit_time():

    for i in current_serving:
        try:
            doc_ref = db.collection(u'tblAssgin').document(i)
        except:
            current_serving.remove(doc_ref)
        else:
            doc = doc_ref.get()
            a = doc.get('assginTime')
            assign_time = datetime.datetime.fromtimestamp(calendar.timegm(a.timetuple()))
            now = datetime.datetime.now()
            sitting_time = now - assign_time
            hours,remainder = divmod(sitting_time.seconds, 3600)
            minutes, seconds = divmod(remainder, 60)
            print('minutes:',minutes)
            updates = {u'sitting_time':minutes}
            doc_ref.update(updates)

t = None

def refresh():
    global t
    sit_time()
    t = Timer(60, refresh)
    t.daemon = True
    t.start()

refresh()

Таким образом, в основном вышеприведенный код делает так, что он сначала выбирает все идентификаторы документа с именем коллекции 'tblAssgin' и сохраняет его в списке 'current_serving'. Затем зацикливается на каждом документе, вычисляет время и запускается снова через каждые 60 секунд. Теперь предположим, что я удалил один документ, тогда этот документ не будет найден. Поэтому я хочу сделать это, когда документ не найден, возникает исключение, и этот идентификатор документа удаляется из списка «current_serving». Но исключение не поймано.

Пожалуйста, помогите

Заранее спасибо .. !!

1 Ответ

0 голосов
/ 30 апреля 2018

Вы предполагаете, что CollectionReference.document() сгенерирует исключение, если документ не существует. Это не так.

>>> client.collection('non-existing').document('also-non-existing')
<google.cloud.firestore_v1beta1.document.DocumentReference object at 0x10feac208>

Но DocumentReference.get() выдаст исключение, если документ не существует.

>>> client.collection('non-existing').document('also-non-existing').get()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "~/gae/lib/python3.6/site-packages/google/cloud/firestore_v1beta1/document.py", line 432, in get
    raise exceptions.NotFound(self._document_path)
google.api_core.exceptions.NotFound: 404 ~/databases/(default)/documents/non-existing/also-non-existing
...