Пример #1
0
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]
Пример #2
0
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),
    )
Пример #3
0
    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
Пример #4
0
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),
    )
Пример #5
0
    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
Пример #6
0
    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
Пример #7
0
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]
Пример #8
0
    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])