Skip to content

Commit b206cdb

Browse files
committed
Block staging recursive normalized data
1 parent 1bb4e9e commit b206cdb

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

python/arcticdb/version_store/library.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1034,13 +1034,20 @@ def write(
10341034
>>> w = adb.WritePayload("symbol", df, metadata={'the': 'metadata'})
10351035
>>> lib.write(*w, staged=True)
10361036
"""
1037-
if not self._nvs._is_recursive_normalizers_enabled(
1037+
is_recursive_normalizers_enabled = self._nvs._is_recursive_normalizers_enabled(
10381038
**{"recursive_normalizers": recursive_normalizers}
1039-
) and not self._allowed_input_type(data):
1040-
raise ArcticUnsupportedDataTypeException(
1041-
"data is of a type that cannot be normalized. Consider using "
1042-
f"write_pickle instead. type(data)=[{type(data)}]"
1043-
)
1039+
)
1040+
if not self._allowed_input_type(data):
1041+
if is_recursive_normalizers_enabled:
1042+
if staged:
1043+
raise ArcticUnsupportedDataTypeException(
1044+
"Staged data must be of a type that can be natively normalized"
1045+
)
1046+
else:
1047+
raise ArcticUnsupportedDataTypeException(
1048+
"Data is of a type that cannot be normalized. Consider using "
1049+
f"write_pickle instead. type(data)=[{type(data)}]"
1050+
)
10441051

10451052
return self._nvs.write(
10461053
symbol=symbol,

python/tests/unit/arcticdb/version_store/test_recursive_normalizers.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,24 +58,29 @@ def assert_vit_equals_except_data(left, right):
5858
assert left.timestamp == right.timestamp
5959

6060

61+
@pytest.mark.parametrize("staged", (True, False, None))
6162
@pytest.mark.parametrize("lib_option", (True, False, None))
6263
@pytest.mark.parametrize("recursive_normalizers", (True, False, None))
63-
def test_v2_api(arctic_client_lmdb, sym, recursive_normalizers, clear_query_stats, lib_name, lib_option):
64+
def test_v2_api(
65+
arctic_client_lmdb_v1_only, sym, recursive_normalizers, clear_query_stats, lib_name, lib_option, staged
66+
):
6467
if lib_option is None:
65-
lib = arctic_client_lmdb.create_library(lib_name)
68+
lib = arctic_client_lmdb_v1_only.create_library(lib_name)
6669
else:
67-
lib = arctic_client_lmdb.create_library(lib_name, LibraryOptions(recursive_normalizers=lib_option))
70+
lib = arctic_client_lmdb_v1_only.create_library(lib_name, LibraryOptions(recursive_normalizers=lib_option))
6871
lt = lib._nvs.library_tool()
6972
data = {"a": np.arange(5), "b": pd.DataFrame({"col": [1, 2, 3]})}
70-
if (lib_option is True and recursive_normalizers is not False) or recursive_normalizers is True:
71-
lib.write(sym, data, recursive_normalizers=recursive_normalizers)
73+
if staged is not True and (
74+
(lib_option is True and recursive_normalizers is not False) or recursive_normalizers is True
75+
):
76+
lib.write(sym, data, recursive_normalizers=recursive_normalizers, staged=staged)
7277
assert len(lt.find_keys(KeyType.MULTI_KEY)) > 0
7378
else:
7479
with pytest.raises(ArcticUnsupportedDataTypeException) as e:
75-
lib.write(sym, data, recursive_normalizers=recursive_normalizers)
80+
lib.write(sym, data, recursive_normalizers=recursive_normalizers, staged=staged)
7681

7782
if lib_option is not True:
78-
arctic_client_lmdb.modify_library_option(lib, ModifiableLibraryOption.RECURSIVE_NORMALIZERS, True)
83+
arctic_client_lmdb_v1_only.modify_library_option(lib, ModifiableLibraryOption.RECURSIVE_NORMALIZERS, True)
7984
lib.write(sym, data)
8085

8186

0 commit comments

Comments
 (0)