Spaces:
Sleeping
Sleeping
File size: 1,386 Bytes
e66cfb4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | """
firebase_init.py
----------------
Firebase Admin SDK 初始化(單例模式)。
放在專案根目錄,其他模組 import 即可。
"""
from __future__ import annotations
import os, json
from pathlib import Path
_db = None # 全域單例
def get_db():
"""取得 Firestore client(延遲初始化)。"""
global _db
if _db is not None:
return _db
try:
import firebase_admin
from firebase_admin import credentials, firestore
except ImportError:
raise RuntimeError(
"請先安裝 firebase-admin:pip install firebase-admin --break-system-packages"
)
if firebase_admin._apps:
_db = firestore.client()
return _db
# 優先讀取 firebase_key.json(本機開發)
key_file = Path(__file__).resolve().parent / "firebase_key.json"
if key_file.exists():
cred = credentials.Certificate(str(key_file))
else:
# 從環境變數讀取(Hugging Face Secrets)
sa_json = os.getenv("FIREBASE_SERVICE_ACCOUNT")
if not sa_json:
raise RuntimeError(
"找不到 Firebase 憑證。請放置 firebase_key.json 或設定環境變數 FIREBASE_SERVICE_ACCOUNT。"
)
cred = credentials.Certificate(json.loads(sa_json))
firebase_admin.initialize_app(cred)
_db = firestore.client()
return _db
|