From 3fb26c876b11c1a9c71de2b0148884d30f4479b9 Mon Sep 17 00:00:00 2001 From: jkyle109 Date: Tue, 26 Jul 2022 11:31:33 -0400 Subject: [PATCH 1/3] Add code snippets for firestore modules. --- snippets/firestore/__init__.py | 0 snippets/firestore/firestore.py | 85 +++++++++++++++++ snippets/firestore/firestore_async.py | 132 ++++++++++++++++++++++++++ 3 files changed, 217 insertions(+) create mode 100644 snippets/firestore/__init__.py create mode 100644 snippets/firestore/firestore.py create mode 100644 snippets/firestore/firestore_async.py diff --git a/snippets/firestore/__init__.py b/snippets/firestore/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/snippets/firestore/firestore.py b/snippets/firestore/firestore.py new file mode 100644 index 000000000..c956ac0d8 --- /dev/null +++ b/snippets/firestore/firestore.py @@ -0,0 +1,85 @@ +# Copyright 2022 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from firebase_admin import firestore + +# pylint: disable=invalid-name +def init_firestore_client(): + # [START init_firestore_client] + import firebase_admin + from firebase_admin import firestore + + # Application Default credentials are automatically created. + app = firebase_admin.initialize_app() + db = firestore.client() + # [END init_firestore_client] + +def init_firestore_client_application_default(): + # [START init_firestore_client_application_default] + import firebase_admin + from firebase_admin import credentials + from firebase_admin import firestore + + # Use the application default credentials. + cred = credentials.ApplicationDefault() + + firebase_admin.initialize_app(cred) + db = firestore.client() + # [END init_firestore_client_application_default] + +def init_firestore_client_service_account(): + # [START init_firestore_client_service_account] + import firebase_admin + from firebase_admin import credentials + from firebase_admin import firestore + + # Use a service account. + cred = credentials.Certificate('path/to/serviceAccount.json') + + app = firebase_admin.initialize_app(cred) + + db = firestore.client() + # [END init_firestore_client_service_account] + +def read_data(): + import firebase_admin + from firebase_admin import firestore + + app = firebase_admin.initialize_app() + db = firestore.client() + + # [START read_data] + doc_ref = db.collection('users').document('alovelace') + doc = doc_ref.get() + if doc.exists: + return f'data: {doc.to_dict()}' + return "Document does not exist." + # [END read_data] + +def add_data(): + import firebase_admin + from firebase_admin import firestore + + app = firebase_admin.initialize_app() + db = firestore.client() + + # [START add_data] + doc_ref = db.collection("users").document("alovelace") + doc_ref.set({ + "first": "Ada", + "last": "Lovelace", + "born": 1815 + }) + # [END add_data] + \ No newline at end of file diff --git a/snippets/firestore/firestore_async.py b/snippets/firestore/firestore_async.py new file mode 100644 index 000000000..d6f1fe152 --- /dev/null +++ b/snippets/firestore/firestore_async.py @@ -0,0 +1,132 @@ +# Copyright 2022 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import asyncio + +from firebase_admin import firestore_async + +# pylint: disable=invalid-name +def init_firestore_client(): + # [START init_firestore_client] + import firebase_admin + from firebase_admin import firestore_async + + # Application Default credentials are automatically created. + app = firebase_admin.initialize_app() + db = firestore_async.client() + # [END init_firestore_client] + +def init_firestore_client_application_default(): + # [START init_firestore_client_application_default] + import firebase_admin + from firebase_admin import credentials + from firebase_admin import firestore_async + + # Use the application default credentials. + cred = credentials.ApplicationDefault() + + firebase_admin.initialize_app(cred) + db = firestore_async.client() + # [END init_firestore_client_application_default] + +def init_firestore_client_service_account(): + # [START init_firestore_client_service_account] + import firebase_admin + from firebase_admin import credentials + from firebase_admin import firestore_async + + # Use a service account. + cred = credentials.Certificate('path/to/serviceAccount.json') + + app = firebase_admin.initialize_app(cred) + + db = firestore_async.client() + # [END init_firestore_client_service_account] + +def close_async_sessions(): + import firebase_admin + from firebase_admin import firestore_async + + # [START close_async_sessions] + app = firebase_admin.initialize_app() + db = firestore_async.client() + + # Perform firestore tasks... + + # Delete app to ensure that all the async sessions are closed gracefully. + firebase_admin.delete_app(app) + # [END close_async_sessions] + +async def read_data(): + import firebase_admin + from firebase_admin import firestore_async + + app = firebase_admin.initialize_app() + db = firestore_async.client() + + # [START read_data] + doc_ref = db.collection('users').document('alovelace') + doc = await doc_ref.get() + if doc.exists: + return f'data: {doc.to_dict()}' + # [END read_data] + +async def add_data(): + import firebase_admin + from firebase_admin import firestore_async + + app = firebase_admin.initialize_app() + db = firestore_async.client() + + # [START add_data] + doc_ref = db.collection("users").document("alovelace") + await doc_ref.set({ + "first": "Ada", + "last": "Lovelace", + "born": 1815 + }) + # [END add_data] + +def firestore_with_asyncio_eventloop(): + # [START firestore_with_asyncio_eventloop] + import asyncio + import firebase_admin + from firebase_admin import firestore_async + + app = firebase_admin.initialize_app() + db = firestore_async.client() + + # Create coroutine to add user data. + async def add_data(): + doc_ref = db.collection("users").document("alovelace") + print("Start adding user...") + await doc_ref.set({ + "first": "Ada", + "last": "Lovelace", + "born": 1815 + }) + print("Done adding user!") + + # Another corutine with secondary tasks we want to complete. + async def while_waiting(): + print("Start other tasks...") + await asyncio.sleep(2) + print("Finished with other tasks!") + + # Initialize an eventloop to execute tasks until completion. + loop = asyncio.get_event_loop() + tasks = [add_data(), while_waiting()] + loop.run_until_complete(asyncio.gather(*tasks)) + firebase_admin.delete_app(app) + # [END firestore_with_asyncio_eventloop] From 5368a63a5172bece86bcb3dd2d539aefef057077 Mon Sep 17 00:00:00 2001 From: jkyle109 Date: Tue, 26 Jul 2022 16:16:58 -0400 Subject: [PATCH 2/3] fix: clarified snippet names and fixed newline. --- snippets/firestore/firestore.py | 1 - snippets/firestore/firestore_async.py | 24 ++++++++++++------------ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/snippets/firestore/firestore.py b/snippets/firestore/firestore.py index c956ac0d8..b43f840f1 100644 --- a/snippets/firestore/firestore.py +++ b/snippets/firestore/firestore.py @@ -82,4 +82,3 @@ def add_data(): "born": 1815 }) # [END add_data] - \ No newline at end of file diff --git a/snippets/firestore/firestore_async.py b/snippets/firestore/firestore_async.py index d6f1fe152..8f9d209f2 100644 --- a/snippets/firestore/firestore_async.py +++ b/snippets/firestore/firestore_async.py @@ -17,18 +17,18 @@ from firebase_admin import firestore_async # pylint: disable=invalid-name -def init_firestore_client(): - # [START init_firestore_client] +def init_firestore_async_client(): + # [START init_firestore_async_client] import firebase_admin from firebase_admin import firestore_async # Application Default credentials are automatically created. app = firebase_admin.initialize_app() db = firestore_async.client() - # [END init_firestore_client] + # [END init_firestore_async_client] -def init_firestore_client_application_default(): - # [START init_firestore_client_application_default] +def init_firestore_async_client_application_default(): + # [START init_firestore_async_client_application_default] import firebase_admin from firebase_admin import credentials from firebase_admin import firestore_async @@ -38,10 +38,10 @@ def init_firestore_client_application_default(): firebase_admin.initialize_app(cred) db = firestore_async.client() - # [END init_firestore_client_application_default] + # [END init_firestore_async_client_application_default] -def init_firestore_client_service_account(): - # [START init_firestore_client_service_account] +def init_firestore_async_client_service_account(): + # [START init_firestore_async_client_service_account] import firebase_admin from firebase_admin import credentials from firebase_admin import firestore_async @@ -52,7 +52,7 @@ def init_firestore_client_service_account(): app = firebase_admin.initialize_app(cred) db = firestore_async.client() - # [END init_firestore_client_service_account] + # [END init_firestore_async_client_service_account] def close_async_sessions(): import firebase_admin @@ -98,8 +98,8 @@ async def add_data(): }) # [END add_data] -def firestore_with_asyncio_eventloop(): - # [START firestore_with_asyncio_eventloop] +def firestore_async_client_with_asyncio_eventloop(): + # [START firestore_async_client_with_asyncio_eventloop] import asyncio import firebase_admin from firebase_admin import firestore_async @@ -129,4 +129,4 @@ async def while_waiting(): tasks = [add_data(), while_waiting()] loop.run_until_complete(asyncio.gather(*tasks)) firebase_admin.delete_app(app) - # [END firestore_with_asyncio_eventloop] + # [END firestore_async_client_with_asyncio_eventloop] From 163ea30f408959da6450de7e01471a7d7b3ba2c5 Mon Sep 17 00:00:00 2001 From: jkyle109 Date: Thu, 28 Jul 2022 13:50:04 -0400 Subject: [PATCH 3/3] fix: Removed var tags. These won't work as I intended it to since html is escaped when using includecode. --- snippets/firestore/firestore.py | 2 +- snippets/firestore/firestore_async.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/snippets/firestore/firestore.py b/snippets/firestore/firestore.py index b43f840f1..18040b742 100644 --- a/snippets/firestore/firestore.py +++ b/snippets/firestore/firestore.py @@ -45,7 +45,7 @@ def init_firestore_client_service_account(): from firebase_admin import firestore # Use a service account. - cred = credentials.Certificate('path/to/serviceAccount.json') + cred = credentials.Certificate('path/to/serviceAccount.json') app = firebase_admin.initialize_app(cred) diff --git a/snippets/firestore/firestore_async.py b/snippets/firestore/firestore_async.py index 8f9d209f2..cf815504e 100644 --- a/snippets/firestore/firestore_async.py +++ b/snippets/firestore/firestore_async.py @@ -47,7 +47,7 @@ def init_firestore_async_client_service_account(): from firebase_admin import firestore_async # Use a service account. - cred = credentials.Certificate('path/to/serviceAccount.json') + cred = credentials.Certificate('path/to/serviceAccount.json') app = firebase_admin.initialize_app(cred)