Я стараюсь инициализировать свое приложение Firebase в моем Python проекте. Я выполняю эту инициализацию только в одном месте, но продолжаю получать сообщения об ошибках в уже существующем приложении.
Чтобы исправить проблему, я изменил код инициализации, чтобы попытаться перехватить ошибки:
class Firestore(Datastore):
_app: firebase_admin.App
_db: firestore.client
def __init__(self):
try:
self._app = firebase_admin.get_app('TaskRatchet')
except ValueError:
is_dev = 'TR_ENV' in os.environ and os.environ['TR_ENV'] == 'development'
base_path = f'{pathlib.Path(__file__).parent.absolute()}/../../'
dev_cred = f'{base_path}/[file name].json'
prod_cred = f'{base_path}/[file name].json'
path = dev_cred if is_dev else prod_cred
cred = credentials.Certificate(path)
self._app = firebase_admin.initialize_app(credential=cred, name='TaskRatchet')
self._db = firestore.client(self._app)
Но теперь говорится, что приложение существует и не существует одновременно!
function_1 | ValueError: Приложение Firebase с именем «TaskRatchet» не существует. Обязательно инициализируйте SDK, вызвав initialize_app () с именем приложения в качестве второго аргумента.
function_1 |
function_1 | Во время обработки вышеупомянутого исключения произошло другое исключение:
function_1 | [...]
function_1 | ValueError: Приложение Firebase с именем «TaskRatchet» уже существует. Это означает, что вы вызывали initialize_app () более одного раза с тем же именем приложения, что и второй аргумент. Убедитесь, что вы предоставляете уникальное имя каждый раз, когда вызываете initialize_app ().
Как, черт возьми, я получаю ошибки, утверждая, что приложение не существует и существует одновременно, и в одном и том же исключении цепочка?
И как я могу изящно убедиться, что создано только одно приложение?
В случае, если это поможет, вот полная соответствующая часть цепочки исключений:
function_1 | ОШИБКА: tr_api.main: фатальная ошибка
function_1 | Traceback (последний вызов был последним):
function_1 | Файл "/usr/src/app/tr_api/datastores/firestore.py", строка 16, в init
function_1 | self._app = firebase_admin.get_app ('TaskRatchet')
function_1 | Файл "/usr/local/lib/python3.8/site-packages/firebase_admin/init.py", строка 139, в get_app
function_1 | поднять ValueError (
function_1 | ValueError: Приложение Firebase с именем «TaskRatchet» не существует. Убедитесь, что инициализировали SDK, вызвав initialize_app () с именем приложения в качестве второго аргумента.
function_1 |
function_1 | Во время обработки вышеупомянутого исключения произошло другое исключение:
function_1 |
function_1 | Traceback (последний последний вызов):
function_1 | Файл "/usr/src/app/tr_api/main.py", строка 46, в основном
function_1 | datastore = factory.secure (Firestore)
function_1 | File "/ usr / src / app / tr_api / factory.py ", строка 17, в защищенном виде
function_1 | obj = self.make (class_, ** kwargs)
function_1 | File" / usr /src/app/tr_api/factory.py ", строка 26, в make
function_1 | класс возврата _ (** deps)
function_1 | File" / usr / src / app / tr_api /datastores/firestore.py ", строка 25, в init
function_1 | self._app = firebase_admin.initialize_app (cred ential = cred, name = 'TaskRatchet')
function_1 | Файл "/usr/local/lib/python3.8/site-packages/firebase_admin/init.py", строка 79, в initialize_app
function_1 | поднять ValueError ((
function_1 | ValueError: приложение Firebase с именем «TaskRatchet» уже существует. Это означает, что вы вызывали initialize_app () более одного раза с тем же именем приложения, что и второй аргумент. Убедитесь, что вы указали уникальное имя каждый раз, когда вы вызываете initialize_app ().