kiarina-lib-firebase-firestore
English | 日本語
[!NOTE] What is this? An asynchronous read-only package for retrieving documents from Cloud Firestore with a Firebase ID token.
Dependencies
| Package | Version | License |
|---|---|---|
| HTTPX | >=0.28.1 |
BSD-3-Clause |
| Pydantic | >=2.10.6 |
MIT |
| Pydantic Settings | >=2.10.1 |
MIT |
| pydantic-settings-manager | >=3.2.0 |
MIT |
Installation
pip install kiarina-lib-firebase-firestore
Features
- Retrieving a Document Retrieves the document at a path through the Firestore REST API.
- Listing Documents Lists documents in a collection with pagination.
- Decoding Firestore Values
Converts Firestore typed values (such as
integerValue) into Python values. - Read Only by Design Provides no write APIs. Writes are expected to go through the server side (such as an API server).
- Resolving the Token
Passes a token explicitly, or uses the token manager of the named
kiarina.lib.firebasesettings. - Configuring the Client Configures the endpoint and timeout through environment variables or pydantic-settings-manager.
Retrieving a Document
Pass a Firebase ID token obtained through TokenManager (kiarina-lib-firebase) or similar, and the document path.
from kiarina.lib.firebase import TokenManager, refresh_id_token
from kiarina.lib.firebase_firestore import get_document
token_data = await refresh_id_token(
refresh_token="firebase-refresh-token",
api_key="firebase-web-api-key",
)
token_manager = TokenManager(
api_key="firebase-web-api-key",
token_store=token_data,
)
snapshot = await get_document(
"your-project-id",
"users/user_1/posts/post_1",
id_token=await token_manager.get_id_token(),
)
if snapshot is not None:
print(snapshot.id, snapshot.fields)
Returns None when the document does not exist. Raises httpx.HTTPStatusError (403) when denied by security rules.
Listing Documents
list_documents lists documents in a collection. By default, documents are returned in document-name order.
from kiarina.lib.firebase_firestore import list_documents
result = await list_documents(
"your-project-id",
"users/user_1/posts",
page_size=100,
id_token=id_token,
)
for snapshot in result.documents:
print(snapshot.id, snapshot.fields)
if result.next_page_token is not None:
next_page = await list_documents(
"your-project-id",
"users/user_1/posts",
page_size=100,
page_token=result.next_page_token,
id_token=id_token,
)
Resolving the Token
Omitting id_token uses the TokenManager of the kiarina.lib.firebase settings named by firebase_settings_key.
kiarina.lib.firebase:
configs:
production:
project_id: production-project
api_key: production-api-key
token_data_file_path: ~/.config/your-app/token.json
kiarina.lib.firebase_firestore:
firebase_settings_key: production
snapshot = await get_document("your-project-id", "users/user_1/posts/post_1")
token_manager_registry builds the token manager from those settings. Register an instance under the same key to use a different TokenStore.
Omitting firebase_settings_key uses the default of token_manager_registry, which is the kiarina.lib.firebase settings that its settings_manager resolves.
Configuring the Client
Settings are managed by the single-configuration settings_manager.
kiarina.lib.firebase_firestore:
base_url: https://firestore.googleapis.com
timeout: 30.0
Load the settings at application startup.
import yaml
from pydantic_settings_manager import load_user_configs
from kiarina.lib.firebase_firestore import settings_manager
with open("config.yaml", encoding="utf-8") as file:
load_user_configs(yaml.safe_load(file) or {})
settings = settings_manager.get_settings()
To configure only this package directly, assign values to settings_manager.user_config.
from kiarina.lib.firebase_firestore import settings_manager
settings_manager.user_config = {
"base_url": "http://localhost:8080",
"timeout": 30.0,
}
Environment variables are also supported. Point base_url at a Firestore emulator for local testing.
export KIARINA_LIB_FIREBASE_FIRESTORE_BASE_URL=http://localhost:8080
export KIARINA_LIB_FIREBASE_FIRESTORE_TIMEOUT=30.0
API Reference
kiarina.lib.firebase_firestore
from kiarina.lib.firebase_firestore import (
DocumentList,
DocumentSnapshot,
FirestoreSettings,
get_document,
list_documents,
settings_manager,
)
get_document
async def get_document(
project_id: str,
path: str,
*,
database_id: str = "(default)",
id_token: str | None = None,
) -> DocumentSnapshot | None: ...
Retrieves the document at the specified path.
Parameters
project_id(str): Google Cloud project IDpath(str): Document path (e.g."users/user_1/posts/post_1")database_id(str): Database ID. Defaults to"(default)"id_token(str | None): Firebase ID token. Resolved fromtoken_manager_registrywhen omitted
Returns
DocumentSnapshot | None: The document, orNonewhen it does not exist
Raises
ValueError: Whenid_tokenis omitted andtoken_manager_registrycannot resolve aTokenManagerhttpx.HTTPStatusError: When the HTTP response indicates an error (except 404)httpx.HTTPError: When communication fails
list_documents
async def list_documents(
project_id: str,
collection_path: str,
*,
database_id: str = "(default)",
page_size: int | None = None,
page_token: str | None = None,
order_by: str | None = None,
id_token: str | None = None,
) -> DocumentList: ...
Lists documents in a collection.
Parameters
project_id(str): Google Cloud project IDcollection_path(str): Collection path (e.g."users/user_1/posts")database_id(str): Database ID. Defaults to"(default)"page_size(int | None): Maximum number of documents per pagepage_token(str | None): Thenext_page_tokenfrom the previous pageorder_by(str | None): Sort order (e.g."createTime desc")id_token(str | None): Firebase ID token. Resolved fromtoken_manager_registrywhen omitted
Returns
DocumentList: A page of documents
Raises
ValueError: Whenid_tokenis omitted andtoken_manager_registrycannot resolve aTokenManagerhttpx.HTTPStatusError: When the HTTP response indicates an errorhttpx.HTTPError: When communication fails
DocumentSnapshot
@dataclass
class DocumentSnapshot:
name: str
fields: dict[str, Any]
create_time: datetime
update_time: datetime
@property
def path(self) -> str: ...
@property
def id(self) -> str: ...
A document retrieved from Cloud Firestore.
Fields
name(str): Full resource name of the documentfields(dict[str, Any]): Fields converted into Python valuescreate_time(datetime): Creation timeupdate_time(datetime): Update time
Properties
path(str): Path relative to the database root (e.g."users/user_1/posts/post_1")id(str): Document ID (the last segment of the path)
Field values are converted as follows.
| Firestore | Python |
|---|---|
nullValue |
None |
booleanValue |
bool |
integerValue |
int |
doubleValue |
float |
timestampValue |
datetime |
stringValue |
str |
bytesValue |
bytes |
referenceValue |
str (resource name) |
geoPointValue |
dict (latitude / longitude) |
arrayValue |
list |
mapValue |
dict |
DocumentList
@dataclass
class DocumentList:
documents: list[DocumentSnapshot]
next_page_token: str | None
A page of documents listed from a collection.
Fields
documents(list[DocumentSnapshot]): Documents in this pagenext_page_token(str | None): Token for retrieving the next page.Noneon the last page
FirestoreSettings
class FirestoreSettings(BaseSettings):
firebase_settings_key: str | None = None
base_url: str = "https://firestore.googleapis.com"
timeout: float = 30.0
Settings for the Firestore REST client.
Fields
firebase_settings_key(str | None): Key of thekiarina.lib.firebasesettings whoseTokenManageris used when no token is passed. An alias ofkiarina.lib.firebaseis also accepted. The default oftoken_manager_registryis used when this is not setbase_url(str): Base URL of the Firestore REST API. Point this at a Firestore emulator for local testingtimeout(float): HTTP request timeout in seconds
settings_manager
settings_manager = SettingsManager(FirestoreSettings)
The SettingsManager for FirestoreSettings.
License
MIT License - See LICENSE for details.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kiarina_lib_firebase_firestore-2.25.0.tar.gz.
File metadata
- Download URL: kiarina_lib_firebase_firestore-2.25.0.tar.gz
- Upload date:
- Size: 13.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
52ac8dc1fddd2367ac00c713040b7dc371cebfe52df988cf36efb3c64c6c2121
|
|
| MD5 |
4eeb3e3fc0d5a8bfb870c22c17a3df28
|
|
| BLAKE2b-256 |
a63a2277c4126f211bc8b924ae08119f8510f2834729ee5de4eb998837654aca
|
Provenance
The following attestation bundles were made for kiarina_lib_firebase_firestore-2.25.0.tar.gz:
Publisher:
release-pypi.yml on kiarina/kiarina-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kiarina_lib_firebase_firestore-2.25.0.tar.gz -
Subject digest:
52ac8dc1fddd2367ac00c713040b7dc371cebfe52df988cf36efb3c64c6c2121 - Sigstore transparency entry: 2534524628
- Sigstore integration time:
-
Permalink:
kiarina/kiarina-python@32969ccc79e2be0900884e2356b94ec5dbab1cdc -
Branch / Tag:
refs/tags/v2.25.0 - Owner: https://github.com/kiarina
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@32969ccc79e2be0900884e2356b94ec5dbab1cdc -
Trigger Event:
push
-
Statement type:
File details
Details for the file kiarina_lib_firebase_firestore-2.25.0-py3-none-any.whl.
File metadata
- Download URL: kiarina_lib_firebase_firestore-2.25.0-py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7bb90cdb73e7e3a28bc44beb36a1819347255dd85fe895e4adfa7f73ddfe072f
|
|
| MD5 |
297bb054322a452fa1fe2d3a8400ada1
|
|
| BLAKE2b-256 |
fb26f67663d6a8b8beed84b754577ede3c4ebcd3dd5eeb568640f9dfce08358a
|
Provenance
The following attestation bundles were made for kiarina_lib_firebase_firestore-2.25.0-py3-none-any.whl:
Publisher:
release-pypi.yml on kiarina/kiarina-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kiarina_lib_firebase_firestore-2.25.0-py3-none-any.whl -
Subject digest:
7bb90cdb73e7e3a28bc44beb36a1819347255dd85fe895e4adfa7f73ddfe072f - Sigstore transparency entry: 2534524791
- Sigstore integration time:
-
Permalink:
kiarina/kiarina-python@32969ccc79e2be0900884e2356b94ec5dbab1cdc -
Branch / Tag:
refs/tags/v2.25.0 - Owner: https://github.com/kiarina
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@32969ccc79e2be0900884e2356b94ec5dbab1cdc -
Trigger Event:
push
-
Statement type: