def test_basewritebatch_update(): from google.cloud.firestore_v1.types import common from google.cloud.firestore_v1.types import document from google.cloud.firestore_v1.types import write client = _make_client() batch = _make_derived_write_batch(client) assert batch._write_pbs == [] reference = client.document("cats", "cradle") field_path = "head.foot" value = u"knees toes shoulders" field_updates = {field_path: value} ret_val = batch.update(reference, field_updates) assert ret_val is None map_pb = document.MapValue(fields={"foot": _value_pb(string_value=value)}) new_write_pb = write.Write( update=document.Document( name=reference._document_path, fields={"head": _value_pb(map_value=map_pb)}, ), update_mask=common.DocumentMask(field_paths=[field_path]), current_document=common.Precondition(exists=True), ) assert batch._write_pbs == [new_write_pb]
def _write_pb_for_create(document_path, document_data): from google.cloud.firestore_v1.types import common from google.cloud.firestore_v1.types import document from google.cloud.firestore_v1.types import write from google.cloud.firestore_v1 import _helpers return write.Write( update=document.Document(name=document_path, fields=_helpers.encode_dict(document_data)), current_document=common.Precondition(exists=False), )
def get_transform_pb(self, document_path, exists=None) -> types.write.Write: field_transforms = self.get_field_transform_pbs(document_path) transform_pb = write.Write(transform=write.DocumentTransform( document=document_path, field_transforms=field_transforms)) if exists is not None: transform_pb._pb.current_document.CopyFrom( common.Precondition(exists=exists)._pb) return transform_pb
def _write_pb_for_update(document_path, update_values, field_paths): from google.cloud.firestore_v1.types import common from google.cloud.firestore_v1.types import document from google.cloud.firestore_v1.types import write from google.cloud.firestore_v1 import _helpers return write.Write( update=document.Document(name=document_path, fields=_helpers.encode_dict(update_values)), update_mask=common.DocumentMask(field_paths=field_paths), current_document=common.Precondition(exists=True), )
def get_transform_pb(self, document_path, exists=None) -> types.write.Write: def make_array_value(values): value_list = [encode_value(element) for element in values] return document.ArrayValue(values=value_list) path_field_transforms = ([( path, write.DocumentTransform.FieldTransform( field_path=path.to_api_repr(), set_to_server_value=REQUEST_TIME_ENUM, ), ) for path in self.server_timestamps] + [( path, write.DocumentTransform.FieldTransform( field_path=path.to_api_repr(), remove_all_from_array=make_array_value(values), ), ) for path, values in self.array_removes.items()] + [( path, write.DocumentTransform.FieldTransform( field_path=path.to_api_repr(), append_missing_elements=make_array_value(values), ), ) for path, values in self.array_unions.items()] + [( path, write.DocumentTransform.FieldTransform( field_path=path.to_api_repr(), increment=encode_value(value)), ) for path, value in self.increments.items()] + [( path, write.DocumentTransform.FieldTransform( field_path=path.to_api_repr(), maximum=encode_value(value)), ) for path, value in self.maximums.items()] + [( path, write.DocumentTransform.FieldTransform( field_path=path.to_api_repr(), minimum=encode_value(value)), ) for path, value in self.minimums.items()]) field_transforms = [ transform for path, transform in sorted(path_field_transforms) ] transform_pb = write.Write(transform=write.DocumentTransform( document=document_path, field_transforms=field_transforms)) if exists is not None: transform_pb._pb.current_document.CopyFrom( common.Precondition(exists=exists)._pb) return transform_pb
def get_update_pb( self, document_path, exists=None, allow_empty_mask=False ) -> types.write.Write: if exists is not None: current_document = common.Precondition(exists=exists) else: current_document = None update_pb = write.Write( update=document.Document( name=document_path, fields=encode_dict(self.set_fields) ), update_mask=self._get_update_mask(allow_empty_mask), current_document=current_document, ) return update_pb
def test_basewritebatch_create(): from google.cloud.firestore_v1.types import common from google.cloud.firestore_v1.types import document from google.cloud.firestore_v1.types import write client = _make_client() batch = _make_derived_write_batch(client) assert batch._write_pbs == [] reference = client.document("this", "one") document_data = {"a": 10, "b": 2.5} ret_val = batch.create(reference, document_data) assert ret_val is None new_write_pb = write.Write( update=document.Document( name=reference._document_path, fields={ "a": _value_pb(integer_value=document_data["a"]), "b": _value_pb(double_value=document_data["b"]), }, ), current_document=common.Precondition(exists=False), ) assert batch._write_pbs == [new_write_pb]
def test_create(self): from google.cloud.firestore_v1.types import common from google.cloud.firestore_v1.types import document from google.cloud.firestore_v1.types import write client = _make_client() batch = self._make_one(client) self.assertEqual(batch._write_pbs, []) reference = client.document("this", "one") document_data = {"a": 10, "b": 2.5} ret_val = batch.create(reference, document_data) self.assertIsNone(ret_val) new_write_pb = write.Write( update=document.Document( name=reference._document_path, fields={ "a": _value_pb(integer_value=document_data["a"]), "b": _value_pb(double_value=document_data["b"]), }, ), current_document=common.Precondition(exists=False), ) self.assertEqual(batch._write_pbs, [new_write_pb])