From 71e19c4e39857dca5b2b3332c514d5875f6a16d4 Mon Sep 17 00:00:00 2001 From: Karen Meliksetian <87068954+KarenjanM@users.noreply.github.com> Date: Wed, 4 Oct 2023 15:49:07 +0200 Subject: [PATCH 1/4] Update firestore.py --- firebase_admin/firestore.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/firebase_admin/firestore.py b/firebase_admin/firestore.py index 32c9897d5..dbe1e6f82 100644 --- a/firebase_admin/firestore.py +++ b/firebase_admin/firestore.py @@ -34,15 +34,16 @@ _FIRESTORE_ATTRIBUTE = '_firestore' -def client(app=None): +def client(app=None, database_id=None): """Returns a client that can be used to interact with Google Cloud Firestore. Args: app: An App instance (optional). - + database_id: The ID of the Google Cloud Firestore database to use. If none provided, default database will be used (optional). + Returns: google.cloud.firestore.Firestore: A `Firestore Client`_. - + Raises: ValueError: If a project ID is not specified either via options, credentials or environment variables, or if the specified project ID is not a valid string. @@ -50,7 +51,9 @@ def client(app=None): .. _Firestore Client: https://googlecloudplatform.github.io/google-cloud-python/latest\ /firestore/client.html """ - fs_client = _utils.get_app_service(app, _FIRESTORE_ATTRIBUTE, _FirestoreClient.from_app) + options = {"database_id": database_id} + + fs_client = _utils.get_app_service(app, _FIRESTORE_ATTRIBUTE, _FirestoreClient.from_app, options) return fs_client.get() @@ -58,7 +61,10 @@ class _FirestoreClient: """Holds a Google Cloud Firestore client instance.""" def __init__(self, credentials, project): - self._client = firestore.Client(credentials=credentials, project=project) + if database_id: + self._client = firestore.Client(credentials=credentials, project=project, database=database_id) + else: + self._client = firestore.Client(credentials=credentials, project=project) def get(self): return self._client From 800f88599846d90e1fc796341d50ac9dd7e1bbd9 Mon Sep 17 00:00:00 2001 From: Karen Meliksetian <87068954+KarenjanM@users.noreply.github.com> Date: Wed, 4 Oct 2023 15:50:03 +0200 Subject: [PATCH 2/4] Update _utils.py --- firebase_admin/_utils.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/firebase_admin/_utils.py b/firebase_admin/_utils.py index dcfb520d2..6da57650e 100644 --- a/firebase_admin/_utils.py +++ b/firebase_admin/_utils.py @@ -93,8 +93,10 @@ def _get_initialized_app(app): -def get_app_service(app, name, initializer): +def get_app_service(app, name, initializer, options=None): app = _get_initialized_app(app) + if options: + app.options._options.update(options) return app._get_service(name, initializer) # pylint: disable=protected-access From 168cd759026f3dce8607a32978d42a537af0006e Mon Sep 17 00:00:00 2001 From: Karen Meliksetian <87068954+KarenjanM@users.noreply.github.com> Date: Wed, 4 Oct 2023 15:52:30 +0200 Subject: [PATCH 3/4] Update firestore.py --- firebase_admin/firestore.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/firebase_admin/firestore.py b/firebase_admin/firestore.py index dbe1e6f82..ea8c2b89d 100644 --- a/firebase_admin/firestore.py +++ b/firebase_admin/firestore.py @@ -74,9 +74,10 @@ def from_app(cls, app): """Creates a new _FirestoreClient for the specified app.""" credentials = app.credential.get_credential() project = app.project_id + database_id = app.options.get('database_id') if not project: raise ValueError( 'Project ID is required to access Firestore. Either set the projectId option, ' 'or use service account credentials. Alternatively, set the GOOGLE_CLOUD_PROJECT ' 'environment variable.') - return _FirestoreClient(credentials, project) + return _FirestoreClient(credentials, project, database_id) From 53f5e388f4288a511c66d7d71fc9845a35160170 Mon Sep 17 00:00:00 2001 From: Karen Meliksetian Date: Thu, 5 Oct 2023 09:54:07 +0200 Subject: [PATCH 4/4] Update firestore.py --- firebase_admin/firestore.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firebase_admin/firestore.py b/firebase_admin/firestore.py index ea8c2b89d..c8a54fea8 100644 --- a/firebase_admin/firestore.py +++ b/firebase_admin/firestore.py @@ -60,7 +60,7 @@ def client(app=None, database_id=None): class _FirestoreClient: """Holds a Google Cloud Firestore client instance.""" - def __init__(self, credentials, project): + def __init__(self, credentials, project, database_id=None): if database_id: self._client = firestore.Client(credentials=credentials, project=project, database=database_id) else: