def test_set_path_df_root_scream(root_df_paths): path = root_df_paths doc = pd.DataFrame({"A": [1, 2]}) with pytest.raises(ValueError, match="^Cannot modify given doc/root"): set_path_value(doc, path, _mutate_df(doc), concat_axis=0) with pytest.raises(ValueError, match="^Cannot modify given doc/root"): set_path_value(doc, path, _mutate_df(doc), concat_axis=1)
def test_set_path_sequence_insert_end(): doc = [0, 1] path = "/2" value = "value" set_path_value(doc, path, value) assert resolve_path(doc, path) == value assert resolve_path(doc, "/0") == 0 assert resolve_path(doc, "/1") == 1
def test_set_path_append_path_preserves_intermediate(): doc = {"foo": {"bar": 1}, 1: 2} path = "/foo/foo2" value = "value" set_path_value(doc, path, value) print(doc) assert resolve_path(doc, path) == value assert doc[1] == 2 assert resolve_path(doc, "/foo/bar") == 1
def test_set_path_root_nothing(path): """Changing root simply don't work.""" doc = {"a": 1} exp = doc.copy() set_path_value(doc, path, 1) assert doc == exp set_path_value(doc, path, {"b": 2}) assert doc == exp
def test_set_path_deepen_sequence_scalar_item(): doc = [1, 2] path = "/1" value = "value" set_path_value(doc, path, value) assert resolve_path(doc, path) == value doc = [1, 2] path = "/1/foo/bar" value = "value" set_path_value(doc, path, value) assert resolve_path(doc, path) == value
def test_set_path_empty_doc(): doc = {} path = "/foo" value = "value" set_path_value(doc, path, value) assert resolve_path(doc, path) == value assert doc == {"foo": "value"} doc = {} path = "/foo/bar" value = "value" set_path_value(doc, path, value) assert resolve_path(doc, path) == value
def test_set_path_deepen_map_int_value(): doc = {"foo": 1, 1: 2} path = "/foo/bar" value = "value" set_path_value(doc, path, value) assert resolve_path(doc, path) == value assert doc[1] == 2 doc = {"foo": 1, 1: 2} path = "/foo/bar/some/other" value = "value" set_path_value(doc, path, value) assert resolve_path(doc, path) == value assert doc[1] == 2
def test_set_path_df_concat_ok(): df = pd.DataFrame({"A": [1, 2]}) orig_doc = {"a": df} val = _mutate_df(df) doc = orig_doc.copy() path = "a/Hf" set_path_value(doc, path, val, concat_axis=1) got = doc["a"] exp = pd.concat((df, val), axis=1) check_dfs_eq(got, exp) doc = orig_doc.copy() path = "a/V" set_path_value(doc, path, val, concat_axis=0) got = doc["a"] exp = pd.concat((df, val), axis=0) check_dfs_eq(got, exp)
def test_set_path_df_root_nothing(path): """Changing root simply don't work.""" doc = pd.DataFrame({"A": [1, 2]}) exp = doc.copy() set_path_value(doc, path, 7, concat_axis=1) check_dfs_eq(doc, exp) set_path_value(doc, path, _mutate_df(doc), concat_axis=0) check_dfs_eq(doc, exp) set_path_value(doc, path, _mutate_df(doc), concat_axis=1) check_dfs_eq(doc, exp)
def test_set_path_replace_value(): doc = {"foo": "bar", 1: 2} path = "/foo" value = "value" set_path_value(doc, path, value) assert resolve_path(doc, path) == value assert doc[1] == 2 doc = {"foo": 1, 1: 2} path = "/foo" value = "value" set_path_value(doc, path, value) assert resolve_path(doc, path) == value assert doc[1] == 2 doc = {"foo": {"bar": 1}, 1: 2} path = "/foo" value = 2 set_path_value(doc, path, value) assert resolve_path(doc, path) == value assert doc[1] == 2
def test_set_path_sequence_with_str_screams(): doc = [0, 1] path = "/str" value = "value" with pytest.raises(ValueError): set_path_value(doc, path, value)
def test_set_path_sequence_out_of_bounds(): doc = [0, 1] path = "/3" value = "value" with pytest.raises(ValueError): set_path_value(doc, path, value)
def test_set_path_sequence_tail_dash(): doc = [0, 1] path = "/-" value = "value" set_path_value(doc, path, value) assert doc == [0, 1, "value"]