Skip to content

Commit 7eec589

Browse files
committed
Merge Option True
1 parent 9a75d67 commit 7eec589

File tree

4 files changed

+34
-16
lines changed

4 files changed

+34
-16
lines changed

firestore/google/cloud/firestore_v1beta1/client.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ def write_option(**kwargs):
288288
elif name == 'exists':
289289
return ExistsOption(value)
290290
elif name == 'merge':
291-
return MergeOption()
291+
return MergeOption(value)
292292
else:
293293
extra = '{!r} was provided'.format(name)
294294
raise TypeError(_BAD_OPTION_ERR, extra)
@@ -429,7 +429,15 @@ class MergeOption(WriteOption):
429429
430430
This will typically be created by
431431
:meth:`~.firestore_v1beta1.client.Client.write_option`.
432+
433+
Args:
434+
merge (bool):
435+
The only valid option is True. Any other argument will make this
436+
option ignored.
432437
"""
438+
def __init__(self, merge):
439+
self._merge = merge
440+
433441
def modify_write(
434442
self, write_pb, field_paths=None, path=None, **unused_kwargs):
435443
"""Modify a ``Write`` protobuf based on the state of this write option.
@@ -445,9 +453,10 @@ def modify_write(
445453
unused_kwargs (Dict[str, Any]): Keyword arguments accepted by
446454
other subclasses that are unused here.
447455
"""
448-
field_paths = sorted(field_paths) # for testing purposes
449-
mask = common_pb2.DocumentMask(field_paths=field_paths)
450-
write_pb.update_mask.CopyFrom(mask)
456+
if self._merge is True:
457+
field_paths = sorted(field_paths) # for testing purposes
458+
mask = common_pb2.DocumentMask(field_paths=field_paths)
459+
write_pb.update_mask.CopyFrom(mask)
451460

452461

453462
class ExistsOption(WriteOption):

firestore/tests/unit/test_batch.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ def test_set_merge(self):
103103
field = 'zapzap'
104104
value = u'meadows and flowers'
105105
document_data = {field: value}
106-
option = MergeOption()
106+
option = MergeOption(True)
107107
ret_val = batch.set(reference, document_data, option)
108108
self.assertIsNone(ret_val)
109109
new_write_pb = write_pb2.Write(

firestore/tests/unit/test_client.py

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -489,21 +489,30 @@ def _get_target_class():
489489

490490
def _make_one(self, *args, **kwargs):
491491
klass = self._get_target_class()
492-
return klass()
492+
return klass(*args)
493493

494-
def test_modify_write(self):
494+
def test_modify_write_true(self):
495495
from google.cloud.firestore_v1beta1.proto import common_pb2
496496
from google.cloud.firestore_v1beta1.proto import write_pb2
497497

498-
for merge in (True, False):
499-
option = self._make_one(merge)
500-
write_pb = write_pb2.Write()
501-
field_paths = ['a', 'b', 'c']
502-
ret_val = option.modify_write(write_pb, field_paths=field_paths)
503-
mask = common_pb2.DocumentMask(field_paths=sorted(field_paths))
504-
self.assertIsNone(ret_val)
505-
self.assertEqual(write_pb.update_mask, mask)
498+
option = self._make_one(True)
499+
write_pb = write_pb2.Write()
500+
field_paths = ['a', 'b', 'c']
501+
ret_val = option.modify_write(write_pb, field_paths=field_paths)
502+
mask = common_pb2.DocumentMask(field_paths=sorted(field_paths))
503+
self.assertIsNone(ret_val)
504+
self.assertEqual(write_pb.update_mask, mask)
506505

506+
def test_modify_write_false(self):
507+
from google.cloud.firestore_v1beta1.proto import common_pb2
508+
from google.cloud.firestore_v1beta1.proto import write_pb2
509+
510+
option = self._make_one(False)
511+
write_pb = write_pb2.Write()
512+
field_paths = ['a', 'b', 'c']
513+
ret_val = option.modify_write(write_pb, field_paths=field_paths)
514+
mask = common_pb2.DocumentMask(field_paths=sorted(field_paths))
515+
self.assertIsNone(ret_val)
507516

508517
class Test__reference_info(unittest.TestCase):
509518

firestore/tests/unit/test_document.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ def test_set_exists(self):
297297
self._set_helper(exists=True)
298298

299299
def test_set_merge(self):
300-
self._set_helper(merge='abc')
300+
self._set_helper(merge=True)
301301

302302
@staticmethod
303303
def _write_pb_for_update(document_path, update_values, field_paths):

0 commit comments

Comments
 (0)