Beispiel #1
0
def test_resolve_path_empty_path():
    doc = {}
    path = ""
    assert resolve_path(doc, path) == doc

    doc = {"foo": 1}
    assert resolve_path(doc, path) == doc
Beispiel #2
0
def test_update_paths_df_concat(axis):
    df = pd.DataFrame({"A": [1, 2]})
    _orig_doc = {  # for when debugging
        "a": {
            "aa": df,
            "ab": 2,
            "ac": {"aca": df},
        },
    }
    doc = {
        "a": {
            "aa": df,
            "ab": 2,
            "ac": {"aca": df},
        },
    }
    val1 = _mutate_df(df)
    val2 = _mutate_df(val1)

    path_values = [
        ("a/aa/H", val1),
        ("a/ac/aca/.", val2),
        ("a/aa/H", val2),  #  double setting
        ("a/ab", val2),
    ]
    exp_aa = pd.concat((df, val1), axis=axis)
    exp_aa = pd.concat((exp_aa, val2), axis=axis)
    exp_aca = pd.concat((df, val2), axis=axis)

    update_paths(doc, path_values, concat_axis=axis)
    print(doc)
    check_dfs_eq(resolve_path(doc, "a/ab"), val2)
    check_dfs_eq(resolve_path(doc, "/a/ac/aca"), exp_aca)
    check_dfs_eq(resolve_path(doc, "a/aa"), exp_aa)
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
def test_resolve_root_path_only():
    doc = {}
    path = "/"
    assert resolve_path(doc, path) == doc

    doc = {"foo": 1}
    assert resolve_path(doc, path) == doc

    doc = {"": 1}
    assert resolve_path(doc, path) == doc
Beispiel #6
0
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
Beispiel #7
0
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
Beispiel #8
0
def test_resolve_path_sequence():
    doc = [1, [22, 33]]

    path = "/0"
    assert resolve_path(doc, path) == 1

    path = "/1"
    assert resolve_path(doc, path) == [22, 33]

    path = "/1/0"
    assert resolve_path(doc, path) == 22
    path = "/1/1"
    assert resolve_path(doc, path) == 33
Beispiel #9
0
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
Beispiel #10
0
def test_update_paths_df_concat(axis):
    df = pd.DataFrame({"A": [1, 2]})
    df_ax_named = df.copy()
    axis_names = ["l1"]
    df_ax_named.axes[axis].names = axis_names
    _orig_doc = {  # for when debugging
        "a": {
            "aa": df,
            "ab": 2,
            "ac": {"aca": df_ax_named},
        },
    }
    doc = {
        "a": {
            "aa": df,
            "ab": 2,
            "ac": {
                "aca": df_ax_named
            },
        },
    }
    val1 = _mutate_df(df)
    val2 = _mutate_df(val1)
    val1.axes[axis].names = axis_names

    path_values = [
        ("a/aa/H", val1),
        ("a/ac/aca/.", val2),
        ("a/aa/H", val2),  #  double setting
        ("a/ab", val2),
    ]
    exp_aa = pd.concat((df, val1, val2), axis=axis)
    exp_aa.axes[axis].names = axis_names
    exp_aca = pd.concat((df, val2), axis=axis)
    exp_aca.axes[axis].names = axis_names

    update_paths(doc, path_values, concat_axis=axis)
    print(doc)
    check_dfs_eq(resolve_path(doc, "a/ab"), val2)
    check_dfs_eq(resolve_path(doc, "/a/ac/aca"), exp_aca)
    check_dfs_eq(resolve_path(doc, "a/aa"), exp_aa)
Beispiel #11
0
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
Beispiel #12
0
def test_resolve_path_re_root(inp, exp):
    doc = {"foo": 1, "bar": [11, {"a": 222}]}
    assert resolve_path(doc, inp) == doc if exp is ... else exp
Beispiel #13
0
def test_resolve_path_examples_from_spec(std_doc, std_case):
    path, exp = std_case
    assert resolve_path(std_doc, path) == exp
Beispiel #14
0
def test_resolve_path_missing_screams():
    doc = {}

    path = "/foo"
    with pytest.raises(ResolveError):
        resolve_path(doc, path)
Beispiel #15
0
def test_resolve_simple(inp, exp):
    doc = {"foo": 1, "bar": [11, {"a": 222}]}
    assert resolve_path(doc, inp) == exp