Skip to content

Commit e85c459

Browse files
feat(firestore): add update() method
1 parent e7c093d commit e85c459

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

firebase/firestore/__init__.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,44 @@ def set(self, data, token=None):
295295

296296
raise_detailed_error(response)
297297

298+
def update(self, data, token=None):
299+
""" Update stored data inside a document in firestore.
300+
301+
302+
:type data: dict
303+
:param data: Data to be stored in firestore.
304+
305+
:type token: str
306+
:param token: (Optional) Firebase Auth User ID Token, defaults
307+
to :data:`None`.
308+
"""
309+
310+
path = self._path.copy()
311+
self._path.clear()
312+
313+
if self._credentials:
314+
db_ref = _build_db(self.__datastore, path)
315+
316+
db_ref.update(data)
317+
318+
else:
319+
req_ref = f"{self._base_url}:commit?key={self._api_key}"
320+
321+
body = {
322+
"writes": [
323+
Message.to_dict(pbs_for_update(f"{self._base_path}/{'/'.join(path)}", data, None)[0])
324+
]
325+
}
326+
327+
if token:
328+
headers = {"Authorization": "Firebase " + token}
329+
response = self._requests.post(req_ref, headers=headers, json=body)
330+
331+
else:
332+
response = self._requests.post(req_ref, json=body)
333+
334+
raise_detailed_error(response)
335+
298336

299337
def _build_db(db, path):
300338
""" Returns a reference to Collection/Document with admin

0 commit comments

Comments
 (0)