@@ -1803,6 +1803,25 @@ class ThisKind(model.Model):
18031803 assert ds_entity ._meanings ["foo" ][0 ] == model ._MEANING_COMPRESSED
18041804 assert ds_entity ._meanings ["foo" ][1 ] == compressed_value
18051805
1806+ @staticmethod
1807+ @pytest .mark .usefixtures ("in_context" )
1808+ def test__to_datastore_compressed_repeated ():
1809+ class ThisKind (model .Model ):
1810+ foo = model .BlobProperty (compressed = True , repeated = True )
1811+
1812+ uncompressed_value_one = b"abc" * 1000
1813+ compressed_value_one = zlib .compress (uncompressed_value_one )
1814+ uncompressed_value_two = b"xyz" * 1000
1815+ compressed_value_two = zlib .compress (uncompressed_value_two )
1816+ entity = ThisKind (foo = [uncompressed_value_one , uncompressed_value_two ])
1817+ ds_entity = model ._entity_to_ds_entity (entity )
1818+ assert "foo" in ds_entity ._meanings
1819+ assert ds_entity ._meanings ["foo" ][0 ] == model ._MEANING_COMPRESSED
1820+ assert ds_entity ._meanings ["foo" ][1 ] == [
1821+ compressed_value_one ,
1822+ compressed_value_two ,
1823+ ]
1824+
18061825 @staticmethod
18071826 @pytest .mark .usefixtures ("in_context" )
18081827 def test__to_datastore_compressed_uninitialized ():
@@ -1861,6 +1880,33 @@ class ThisKind(model.Model):
18611880 ds_entity = model ._entity_to_ds_entity (entity )
18621881 assert ds_entity ["foo" ] == compressed_value
18631882
1883+ @staticmethod
1884+ @pytest .mark .usefixtures ("in_context" )
1885+ def test__from_datastore_compressed_repeated_to_compressed ():
1886+ class ThisKind (model .Model ):
1887+ foo = model .BlobProperty (compressed = True , repeated = True )
1888+
1889+ key = datastore .Key ("ThisKind" , 123 , project = "testing" )
1890+ datastore_entity = datastore .Entity (key = key )
1891+ uncompressed_value_one = b"abc" * 1000
1892+ compressed_value_one = zlib .compress (uncompressed_value_one )
1893+ uncompressed_value_two = b"xyz" * 1000
1894+ compressed_value_two = zlib .compress (uncompressed_value_two )
1895+ datastore_entity .update (
1896+ {"foo" : [compressed_value_one , compressed_value_two ]}
1897+ )
1898+ meanings = {
1899+ "foo" : (
1900+ model ._MEANING_COMPRESSED ,
1901+ [compressed_value_one , compressed_value_two ],
1902+ )
1903+ }
1904+ datastore_entity ._meanings = meanings
1905+ protobuf = helpers .entity_to_protobuf (datastore_entity )
1906+ entity = model ._entity_from_protobuf (protobuf )
1907+ ds_entity = model ._entity_to_ds_entity (entity )
1908+ assert ds_entity ["foo" ] == [compressed_value_one , compressed_value_two ]
1909+
18641910 @staticmethod
18651911 @pytest .mark .usefixtures ("in_context" )
18661912 def test__from_datastore_uncompressed_to_uncompressed ():
@@ -1893,6 +1939,26 @@ class ThisKind(model.Model):
18931939 ds_entity = model ._entity_to_ds_entity (entity )
18941940 assert ds_entity ["foo" ] == compressed_value
18951941
1942+ @staticmethod
1943+ @pytest .mark .usefixtures ("in_context" )
1944+ def test__from_datastore_uncompressed_repeated_to_compressed ():
1945+ class ThisKind (model .Model ):
1946+ foo = model .BlobProperty (compressed = True , repeated = True )
1947+
1948+ key = datastore .Key ("ThisKind" , 123 , project = "testing" )
1949+ datastore_entity = datastore .Entity (key = key )
1950+ uncompressed_value_one = b"abc" * 1000
1951+ compressed_value_one = zlib .compress (uncompressed_value_one )
1952+ uncompressed_value_two = b"xyz" * 1000
1953+ compressed_value_two = zlib .compress (uncompressed_value_two )
1954+ datastore_entity .update (
1955+ {"foo" : [uncompressed_value_one , uncompressed_value_two ]}
1956+ )
1957+ protobuf = helpers .entity_to_protobuf (datastore_entity )
1958+ entity = model ._entity_from_protobuf (protobuf )
1959+ ds_entity = model ._entity_to_ds_entity (entity )
1960+ assert ds_entity ["foo" ] == [compressed_value_one , compressed_value_two ]
1961+
18961962
18971963class TestTextProperty :
18981964 @staticmethod
0 commit comments