在 firestore 中使用 firebase-admin 通过 python 请求时,程序会冻结

When requesting via python using firebase-admin in firestore, the program freezes

提问人:Vlad Sunny 提问时间:10/15/2023 最后编辑:Vlad Sunny 更新时间:10/21/2023 访问量:43

问:

我在 firebase 上创建了一个常规项目,在那里连接了 firestore,生成了一个私钥,编写了一个简单的代码来向集合中添加元素,但程序在请求行中冻结。此外,奇怪的是,在此之前,我制作了一个电报机器人,该机器人以相同的原理应用于 firestore,托管它,现在它工作正常。

法典:

import firebase_admin
from firebase_admin import credentials, firestore
import time

cred = credentials.Certificate("serviceAccountKey.json")
firebase_admin.initialize_app(cred)

db = firestore.client()

db.collection('persons').add({
    'name': 'vlad',
    'age': 40
})

print('done')

起初我以为可能无法同时在免费版的 firebase 上使用两个项目,但在我停止了我托管的机器人后,没有任何变化。然后我尝试创建一个新的Google帐户,通过该帐户进入firebase,在那里我还使用firestore创建了一个项目,但没有任何变化。

另一件有趣的事情是,如果我在我的计算机上运行我托管的这个机器人的代码,那么访问 firestore 也不起作用,但相同的代码在远程服务器上有效。我还需要注意,我的带有 svelte 的 javascript 网站可以很好地与 firestore 配合使用。

这是我的机器人的 Firebase 的一部分:

from copy import deepcopy
from typing import Union

import firebase_admin
from firebase_admin import credentials, firestore

user_dict_template = {
    'state': None,
    'lang': 'en'
}

cred = credentials.Certificate("serviceAccountKey.json")
app = firebase_admin.initialize_app(cred)

db = firestore.client()
users_db = db.collection('users_tg')


def get_users() -> list[int]:
    users = list(map(lambda x: int(x.id), users_db.stream()))
    return users


def add_user(uid: Union[int, str]) -> None:
    users_db.document(str(uid)).set(deepcopy(user_dict_template))


def get_user(uid: Union[int, str]) -> dict:
    user = users_db.document(str(uid)).get()
    return user.to_dict()


def is_user_updated(uid: Union[int, str]) -> bool:
    return set(get_user(uid).keys()) == set(user_dict_template.keys())


def update_user(uid: Union[int, str]) -> None:
    old_user = get_user(uid)
    new_user = deepcopy(user_dict_template)

    for key in old_user.keys():
        if new_user.get(key):
            new_user[key] = old_user[key]

    users_db.document(str(uid)).update(new_user)


def update_value(uid: Union[int, str], update: dict) -> None:
    user = users_db.document(str(uid))
    user.update(update)

实时数据库工作

蟒蛇 firebase google-cloud-firestore firebase-admin

评论


答: 暂无答案