Exemplo n.º 1
0
def test_dddi():
    a = {'a': {'a': {'a': 1}}}
    z = ChainDB(a)
    assert isinstance(z['a'], ChainDB)
    assert isinstance(z['a']['a'], ChainDB)
    assert isinstance(z['a']['a']['a'], int)
    assert z['a']['a']['a'] + 1 == 2
Exemplo n.º 2
0
def test_dddi():
    a = {"a": {"a": {"a": 1}}}
    z = ChainDB(a)
    assert isinstance(z["a"], ChainDB)
    assert isinstance(z["a"]["a"], ChainDB)
    assert isinstance(z["a"]["a"]["a"], int)
    assert z["a"]["a"]["a"] + 1 == 2
Exemplo n.º 3
0
def test_second_mapping():
    m1 = {"a": {"m": {"x": 0}}}
    m2 = {"a": {"m": {"y": 1}}}
    z = ChainDB(m1)
    z.maps.append(m2)
    assert isinstance(z["a"], ChainDB)
    assert isinstance(z["a"]["m"].maps, list)
    assert z["a"]["m"]["y"] == 1
Exemplo n.º 4
0
def test_second_mapping():
    m1 = {'a': {'m': {'x': 0}}}
    m2 = {'a': {'m': {'y': 1}}}
    z = ChainDB(m1)
    z.maps.append(m2)
    assert isinstance(z['a'], ChainDB)
    assert isinstance(z['a']['m'].maps, list)
    assert z['a']['m']['y'] == 1
Exemplo n.º 5
0
def test_exactness():
    d = {'y': 1}
    m1 = {'a': {'m': d}}
    z = ChainDB(m1)
    assert isinstance(z['a'], ChainDB)
    assert isinstance(z['a']['m'], ChainDB)
    assert isinstance(z['a']['m'].maps[0], dict)
    assert d is z['a']['m'].maps[0]
Exemplo n.º 6
0
def test_mixed_mapping():
    m1 = {'a': {'m': {'y': 1}}}
    m2 = {'a': {'m': 1}}
    z = ChainDB(m1)
    z.maps.append(m2)
    assert isinstance(z['a'], ChainDB)
    assert isinstance(z['a']['m'], int)
    assert z['a']['m'] == 1
Exemplo n.º 7
0
def test_list_mapping():
    m1 = {'a': {'m': 'x'}}
    m2 = {'a': {'m': 'y'}}
    z = ChainDB(m1)
    z.maps.append(m2)
    assert isinstance(z['a'], ChainDB)
    assert isinstance(z['a']['m'], str)
    assert z['a']['m'] == 'y'
Exemplo n.º 8
0
def test_list_mapping():
    m1 = {"a": {"m": "x"}}
    m2 = {"a": {"m": "y"}}
    z = ChainDB(m1)
    z.maps.append(m2)
    assert isinstance(z["a"], ChainDB)
    assert isinstance(z["a"]["m"], str)
    assert z["a"]["m"] == "y"
Exemplo n.º 9
0
def test_mixed_mapping():
    m1 = {"a": {"m": {"y": 1}}}
    m2 = {"a": {"m": 1}}
    z = ChainDB(m1)
    z.maps.append(m2)
    assert isinstance(z["a"], ChainDB)
    assert isinstance(z["a"]["m"], int)
    assert z["a"]["m"] == 1
Exemplo n.º 10
0
def test_exactness():
    d = {"y": 1}
    m1 = {"a": {"m": d}}
    z = ChainDB(m1)
    assert isinstance(z["a"], ChainDB)
    assert isinstance(z["a"]["m"], ChainDB)
    assert isinstance(z["a"]["m"].maps[0], dict)
    assert d is z["a"]["m"].maps[0]
Exemplo n.º 11
0
def test_exactness_setting():
    d = {"y": 1}
    m1 = {"a": {"m": d}}
    z = ChainDB(m1)
    e = {"z": 2}
    z["a"]["m"] = e
    assert isinstance(z["a"], ChainDB)
    assert isinstance(z["a"]["m"], ChainDB)
    assert isinstance(z["a"]["m"].maps[0], dict)
    assert e is z["a"]["m"].maps[0]
Exemplo n.º 12
0
def test_exactness_setting():
    d = {'y': 1}
    m1 = {'a': {'m': d}}
    z = ChainDB(m1)
    e = {'z': 2}
    z['a']['m'] = e
    assert isinstance(z['a'], ChainDB)
    assert isinstance(z['a']['m'], ChainDB)
    assert isinstance(z['a']['m'].maps[0], dict)
    assert e is z['a']['m'].maps[0]
Exemplo n.º 13
0
def test_exactness_setting_multi_novel():
    d = [1, 2]
    e = [3, 4]
    m1 = {"a": {"m": d}}
    m2 = {"a": {"m": e}}
    z = ChainDB(m1)
    z.maps.append(m2)
    g = [-1, -2]
    z["a"]["mm"] = g
    assert isinstance(z["a"], ChainDB)
    assert isinstance(z["a"]["m"], list)
    assert isinstance(z["a"].maps[0], dict)
    assert g is z["a"].maps[0]["mm"]
    assert g is z["a"]["mm"]
Exemplo n.º 14
0
def test_exactness_setting_multi_novel():
    d = [1, 2]
    e = [3, 4]
    m1 = {'a': {'m': d}}
    m2 = {'a': {'m': e}}
    z = ChainDB(m1)
    z.maps.append(m2)
    g = [-1, -2]
    z['a']['mm'] = g
    assert isinstance(z['a'], ChainDB)
    assert isinstance(z['a']['m'], list)
    assert isinstance(z['a'].maps[0], dict)
    assert g is z['a'].maps[0]['mm']
    assert g is z['a']['mm']
Exemplo n.º 15
0
def test_exactness_setting_multi():
    d = 'a'
    e = 'b'
    m1 = {'a': {'m': d}}
    m2 = {'a': {'m': e}}
    z = ChainDB(m1)
    z.maps.append(m2)
    g = ('c', )
    z['a']['m'] = g
    assert isinstance(z['a'], ChainDB)
    assert isinstance(z['a']['m'], tuple)
    assert isinstance(z['a'].maps[0], dict)
    assert g is z['a'].maps[1]['m']
    # We sent this to the first map not the last
    assert z['a']['m'] is g
Exemplo n.º 16
0
def test_dicts_in_lists():
    c = [{'m': 1}, {'n': 2}]
    d = [{'o': 3}, {'p': 4}]
    t = c + d
    m1 = {'a': {'b': c}}
    m2 = {'a': {'b': d}}
    z = ChainDB(m1)
    z.maps.append(m2)
    assert isinstance(z['a'], ChainDB)
    assert isinstance(z['a']['b'], list)
    assert z['a']['b'] == t
    assert c[0] is z['a']['b'][0]
    assert c[1] is z['a']['b'][1]
    assert d[0] is z['a']['b'][2]
    assert d[1] is z['a']['b'][3]
Exemplo n.º 17
0
def test_dicts_in_lists():
    c = [{"m": 1}, {"n": 2}]
    d = [{"o": 3}, {"p": 4}]
    t = c + d
    m1 = {"a": {"b": c}}
    m2 = {"a": {"b": d}}
    z = ChainDB(m1)
    z.maps.append(m2)
    assert isinstance(z["a"], ChainDB)
    assert isinstance(z["a"]["b"], list)
    assert z["a"]["b"] == t
    assert c[0] is z["a"]["b"][0]
    assert c[1] is z["a"]["b"][1]
    assert d[0] is z["a"]["b"][2]
    assert d[1] is z["a"]["b"][3]
Exemplo n.º 18
0
def test_dicts_in_lists_mutation():
    c = [{'m': 1}, {'n': 2}]
    d = [{'o': 3}, {'p': 4}]
    m1 = {'a': {'b': c}}
    m2 = {'a': {'b': d}}
    z = ChainDB(m1)
    z.maps.append(m2)
    append_list = z['a']['b']
    append_list.append({'hi': 'world'})
    assert isinstance(append_list, list)
    assert z['a']['b'] != append_list

    extend_list = z['a']['b']
    extend_list.extend([{'hi': 'world'}, {'spam': 'eggs'}])
    assert z['a']['b'] != extend_list
Exemplo n.º 19
0
def test_dicts_in_lists_mutation():
    c = [{"m": 1}, {"n": 2}]
    d = [{"o": 3}, {"p": 4}]
    m1 = {"a": {"b": c}}
    m2 = {"a": {"b": d}}
    z = ChainDB(m1)
    z.maps.append(m2)
    append_list = z["a"]["b"]
    append_list.append({"hi": "world"})
    assert isinstance(append_list, list)
    assert z["a"]["b"] != append_list

    extend_list = z["a"]["b"]
    extend_list.extend([{"hi": "world"}, {"spam": "eggs"}])
    assert z["a"]["b"] != extend_list
Exemplo n.º 20
0
def test_exactness_setting_multi():
    d = "a"
    e = "b"
    m1 = {"a": {"m": d}}
    m2 = {"a": {"m": e}}
    z = ChainDB(m1)
    z.maps.append(m2)
    g = ("c",)
    z["a"]["m"] = g
    assert isinstance(z["a"], ChainDB)
    assert isinstance(z["a"]["m"], tuple)
    assert isinstance(z["a"].maps[0], dict)
    assert g is z["a"].maps[1]["m"]
    # We sent this to the first map not the last
    assert z["a"]["m"] is g
Exemplo n.º 21
0
def merge_collections(a, b, target_id):
    """
    merge two collections into a single merged collection

    for keys that are in both collections, the value in b will be kept

    Parameters
    ----------
    a  the inferior collection (will lose values of shared keys)
    b  the superior collection (will keep values of shared keys)
    target_id  str  the name of the key used in b to dereference ids in a

    Returns
    -------
    the combined collection.  Note that it returns a collection only containing
    merged items from a and b that are dereferenced in b, i.e., the merged
    intercept.  If you want the union you can update the returned collection
    with a.

    Examples
    --------
    >>>  grants = merge_collections(self.gtx["proposals"], self.gtx["grants"], "proposal_id")

    This would merge all entries in the proposals collection with entries in the
    grants collection for which "_id" in proposals has the value of
    "proposal_id" in grants.
    """
    adict = {}
    for k in a:
        adict[k.get("_id")] = k
    bdict = {}
    for k in b:
        bdict[k.get("_id")] = k
    b_for_a = {}
    for k in adict:
        for kk, v in bdict.items():
            if v.get(target_id, "") == k:
                b_for_a[k] = kk
    chained = {}
    for k, v in b_for_a.items():
        chained[k] = ChainDB(adict[k], bdict[v])
    return list(chained.values())