예제 #1
0
def test_pop_t(session):
    session2 = get_session()
    expected = set('abc')
    keyid = key('test_set_pop_t')
    set_ = session.set(keyid, expected, Set)
    setx = session2.get(keyid, Set)
    with Transaction(session, [keyid]):
        card = len(set_)
        assert card == 3
        popped = set_.pop()
        assert setx == expected
    assert popped in expected
    expected.remove(popped)
    assert set_ == set(setx) == expected
    with Transaction(session, [keyid]):
        card = len(set_)
        assert card == 2
        popped = set_.pop()
        assert setx == expected
    assert popped in expected
    expected.remove(popped)
    assert set_ == set(setx) == expected
    with Transaction(session, [keyid]):
        card = len(set_)
        assert card == 1
        popped = set_.pop()
        assert setx == expected
    assert popped in expected
    assert len(set_) == len(setx) == 0
    expected.remove(popped)
    assert len(expected) == 0
    with Transaction(session, [keyid]):
        with raises(KeyError):
            set_.pop()
예제 #2
0
def test_setdefault_t(session):
    session2 = get_session()
    keyid = key('test_sortedset_setdefault_t')
    set_ = session.set(keyid, {'h': 1, 'o': 2, 'n': 3, 'g': 4}, SortedSet)
    set2 = session2.get(keyid, SortedSet)
    with Transaction(session, [keyid]):
        len(set_)
        val = set_.setdefault('h')
        assert 1 == val
        assert {'h': 1, 'o': 2, 'n': 3, 'g': 4} == dict(set2)
    assert {'h': 1, 'o': 2, 'n': 3, 'g': 4} == dict(set_) == dict(set2)
    with Transaction(session, [keyid]):
        len(set_)
        val = set_.setdefault('h', 123)
        assert 1 == val
        assert {'h': 1, 'o': 2, 'n': 3, 'g': 4} == dict(set2)
    assert {'h': 1, 'o': 2, 'n': 3, 'g': 4} == dict(set_) == dict(set2)
    with Transaction(session, [keyid]):
        len(set_)
        val = set_.setdefault('m')
        assert 1 == val
        assert {'h': 1, 'o': 2, 'n': 3, 'g': 4} == dict(set2)
        with raises(CommitError):
            len(set_)
    assert {'h': 1, 'o': 2, 'n': 3, 'g': 4, 'm': 1} == dict(set_) == dict(set2)
    with Transaction(session, [keyid]):
        len(set_)
        val = set_.setdefault('i', 123)
        assert 123 == val
        assert {'h': 1, 'o': 2, 'n': 3, 'g': 4, 'm': 1} == dict(set2)
        with raises(CommitError):
            len(set_)
    assert ({'h': 1, 'o': 2, 'n': 3, 'g': 4, 'm': 1, 'i': 123}
            == dict(set_) == dict(set2))
예제 #3
0
def test_update_t(session):
    session2 = get_session()
    keyid = key('test_set_update_t')
    keyid2 = key('test_set_update_t2')
    def reset():
        return session.set(keyid, S('abc'), Set)
    set_ = reset()
    set2 = session.set(keyid2, S('cde'), Set)
    setx = session2.get(keyid, Set)
    with Transaction(session, [keyid]):
        card = len(set_)
        assert card == 3
        set_.update('cde')
        assert setx == S('abc')
        with raises(CommitError):
            len(set_)
    assert set_ == S(setx) == S('abcde')
    set_ = reset()
    with Transaction(session, [keyid]):
        card = len(set_)
        assert card == 3
        set_.update(set2)
        assert setx == S('abc')
        with raises(CommitError):
            len(set_)
    assert set_ == S(setx) == S('abcde')
    set_ = reset()
    with Transaction(session, [keyid]):
        card = len(set_)
        assert card == 3
        set_.update(set2, 'adfg')
        assert setx == S('abc')
        with raises(CommitError):
            len(set_)
    assert set_ == S(setx) == S('abcdefg')
예제 #4
0
def test_discard_t(session):
    session2 = get_session()
    keyid = key('test_sortedset_discard_t')
    set_ = session.set(keyid, S('abc'), SortedSet)
    set2 = session2.get(keyid, SortedSet)
    with Transaction(session, [keyid]):
        len(set_)
        set_.discard('a')
        assert dict(set2) == {'a': 1, 'b': 1, 'c': 1}
        with raises(CommitError):
            len(set_)
    assert dict(set_) == dict(set2) == {'b': 1, 'c': 1}
    with Transaction(session, [keyid]):
        len(set_)
        set_.discard('d')
        assert dict(set2) == {'b': 1, 'c': 1}
    assert dict(set_) == dict(set2) == {'b': 1, 'c': 1}
    with Transaction(session, [keyid]):
        len(set_)
        set_.discard('b', score=0.5)
        assert dict(set2) == {'b': 1, 'c': 1}
        with raises(CommitError):
            len(set_)
    assert dict(set_) == dict(set2) == {'b': 0.5, 'c': 1}
    with Transaction(session, [keyid]):
        len(set_)
        set_.discard('b', score=0.5, remove=-1)
        assert dict(set2) == {'b': 0.5, 'c': 1}
        with raises(CommitError):
            len(set_)
    assert dict(set_) == dict(set2) == {'b': 0, 'c': 1}
예제 #5
0
def test_double_transaction_error():
    session = get_session()
    keyid = key('test_transaction_double_error')
    with Transaction(session, [keyid]):
        with raises(DoubleTransactionError):
            with Transaction(session, [keyid]):
                pass
예제 #6
0
파일: test_list.py 프로젝트: pmuston/sider
def test_set_t(session):
    session2 = get_session()
    keyid = key('test_list_set_t')
    list_ = session.set(keyid, 'abc', List)
    list2 = session2.get(keyid, List)
    with Transaction(session, [keyid]):
        size = len(list_)
        assert size == 3
        list_[1] = 'B'
        assert list2[:] == list('abc')
    assert list_[:] == list2[:] == list('aBc')
    with Transaction(session, [keyid]):
        with raises(IndexError):
            list_[3] = 'D'
예제 #7
0
파일: test_list.py 프로젝트: pmuston/sider
def test_delete_slice_t(session):
    session2 = get_session()
    keyid = key('test_list_delete_slice_t')
    list_ = session.set(keyid, 'abcdefg', List)
    list2 = session2.get(keyid, List)
    with Transaction(session, [keyid]):
        size = len(list_)
        assert size == 7
        del list_[:2]
        assert list2[:] == list('abcdefg')
    assert list_[:] == list2[:] == list('cdefg')
    with Transaction(session, [keyid]):
        size = len(list_)
        assert size == 5
        del list_[3:]
        assert list2[:] == list('cdefg')
    assert list_[:] == list2[:] == list('cde')
    with Transaction(session, [keyid]):
        size = len(list_)
        assert size == 3
        del list_[:]
        assert list2[:] == list('cde')
    assert len(list_) == len(list2) == 0
    keyid = key('test_list_delete_slice_t')
    list_ = session.set(keyid, 'abcdefg', List)
    list2 = session2.get(keyid, List)
    with Transaction(session, [keyid]):
        size = len(list_)
        assert size == 7
        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter('always')
            del list_[2:5]
            assert len(w) == 1
            assert issubclass(w[0].category, PerformanceWarning)
        assert list2[:] == list('abcdefg')
    assert list_[:] == list2[:] == list('abfg')
    try:
        with Transaction(session, [keyid]):
            del list_[:]
            try:
                len(list_)
            except CommitError:
                raise
            else:
                assert False, 'expected CommitError'
    except CommitError:
        pass
    assert list_[:] == list2[:] == list('abfg')
예제 #8
0
def test_symmetric_difference_update_t(session):
    session2 = get_session()
    keyid = key('test_set_symmdiff_t')
    keyid2 = key('test_set_symmdiff_t2')
    set_ = session.set(keyid, S('abcd'), Set)
    set2 = session.set(keyid2, S('bde1'), Set)
    setx = session2.get(keyid, Set)
    with Transaction(session, [keyid, keyid2]):
        card = len(set_)
        assert card == 4
        set_.symmetric_difference_update(set2)
        assert setx == S('abcd')
    assert set_ == S(setx) == S('ace1')
    with Transaction(session, [keyid, keyid2]):
        set_.symmetric_difference_update(set2)
        with raises(CommitError):
            len(set_)
예제 #9
0
def test_intersection_update_t(session):
    session2 = get_session()
    keyid = key('test_set_intersection_update_t')
    keyid2 = key('test_set_intersection_update_t2')
    set_ = session.set(keyid, S('abc'), Set)
    set2 = session.set(keyid2, S('bcd'), Set)
    setx = session2.get(keyid, Set)
    with Transaction(session, [keyid, keyid2]):
        card = len(set_)
        assert card == 3
        set_.intersection_update(set2)
        assert setx == S('abc')
    assert set_ == S(setx) == S('bc')
    with Transaction(session, [keyid, keyid2]):
        set_.intersection_update(set2)
        with raises(CommitError):
            len(set_)
예제 #10
0
def test_conflict_error():
    session = get_session()
    session2 = get_session()
    keyid = key('test_transaction_conflict_error')
    list_ = session.set(keyid, 'abc', List)
    list2 = session2.get(keyid, List)
    with raises(ConflictError):
        with Transaction(session, [keyid]):
            list_.append('d')
            list2.append('e')
예제 #11
0
파일: test_list.py 프로젝트: pmuston/sider
def test_set_slice_t(session):
    session2 = get_session()
    keyid = key('test_list_set_slice_t')
    list_ = session.set(keyid, 'abc', List)
    list2 = session2.get(keyid, List)
    with Transaction(session, [keyid]):
        size = len(list_)
        assert size == 3
        list_[:0] = ['-2', '-1']
        assert list2[:] == list('abc')
    assert list_[:] == list2[:] == ['-2', '-1', 'a', 'b', 'c']
    with Transaction(session, [keyid]):
        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter('always')
            list_[3:] = list('BC')
            assert len(w) == 1, 'no warning'
            assert issubclass(w[0].category, PerformanceWarning)
        assert list2[:] == ['-2', '-1', 'a', 'b', 'c']
    assert list_[:] == ['-2', '-1', 'a', 'B', 'C']
예제 #12
0
파일: test_hash.py 프로젝트: pmuston/sider
def test_setdefault_t(session):
    session2 = get_session()
    keyid = key('test_hash_setdefault_t')
    hash_ = session.set(keyid, fixture_a, Hash)
    hashx = session2.get(keyid, Hash)
    with Transaction(session, [keyid]):
        curval = hash_.setdefault('a', 'would not get changed')
        assert curval == hashx['a'] == 'b'
    assert curval == hash_['a'] == hashx['a'] == 'b'
    assert len(hash_) == len(hashx) == 2
    with Transaction(session, [keyid]):
        curval = hash_.setdefault('added', 'default value')
        assert curval == 'default value'
        assert 'added' not in hashx
        with raises(CommitError):
            len(hash_)
    assert len(hash_) == len(hashx) == 3
    assert 'added' in hash_
    assert 'added' in hashx
    assert curval == hash_['added'] == hashx['added'] == 'default value'
예제 #13
0
def test_transaction_iterate():
    session = get_session()
    session2 = get_session()
    keyid = key('test_transaction_iterate')
    list1 = session.set(keyid, 'abc', List)
    list2 = session2.get(keyid, List)
    for trial in Transaction(session, [keyid]):
        up = list1[0].upper()
        if trial < 3:
            list2.append('x')
        list1[0] = up
    assert list1[:] == list2[:] == list('Abcxxx')
    assert trial == 3
예제 #14
0
파일: test_list.py 프로젝트: pmuston/sider
def test_insert_t(session):
    keyid = key('test_list_insert_t')
    list_ = session.set(keyid, 'abcdefg', List)
    with Transaction(session, [keyid]):
        first = list_[0]
        assert first == 'a'
        list_.insert(0, 'Z')
    assert list_[:] == list('Zabcdefg')
    with Transaction(session, [keyid]):
        first = list_[0]
        assert first == 'Z'
        list_.insert(-1, 'G')
    assert list_[:] == list('ZabcdefGg')
    with Transaction(session, [keyid]):
        first = list_[0]
        assert first == 'Z'
        list_.insert(2, 'A')
    assert list_[:] == list('ZaAbcdefGg')
    with Transaction(session, [keyid]):
        first = list_[0]
        assert first == 'Z'
        list_.insert(-3, 'F')
    assert list_[:] == list('ZaAbcdeFfGg')
예제 #15
0
def test_raw_transaction():
    session1 = get_session()
    session2 = get_session()
    keyid = key('test_transaction_raw')
    list1 = session1.set(keyid, 'abc', List)
    list2 = session2.get(keyid, List)
    with Transaction(session1, [keyid]) as t:
        assert isinstance(t, Transaction)
        assert list1[:] == ['a', 'b', 'c']
        assert list2[:] == ['a', 'b', 'c']
        t.begin_commit()
        list1.append('d')
        assert list2[:] == ['a', 'b', 'c']
    assert list1[:] == list2[:] == ['a', 'b', 'c', 'd']
예제 #16
0
파일: test_hash.py 프로젝트: pmuston/sider
def test_delitem_t(session):
    session2 = get_session()
    keyid = key('test_hash_delitem_t')
    hash_ = session.set(keyid, fixture_a, Hash)
    hashx = session2.get(keyid, Hash)
    with Transaction(session, [keyid]):
        len(hash_)
        del hash_['a']
        assert 'a' in hashx
        with raises(CommitError):
            len(hash_)
    assert len(hash_) == 1
    assert 'a' not in hash_
    assert 'a' not in hashx
예제 #17
0
파일: test_list.py 프로젝트: pmuston/sider
def test_pop_t(session):
    keyid = key('test_list_pop_t')
    list_ = session.set(keyid, 'abcdefg', List)
    with Transaction(session, [keyid]):
        first = list_[0]
        assert first == 'a'
        popped = list_.pop()
        assert popped == 'g'
        list_.append('h')
    assert list_[:] == list('abcdefh')
    with Transaction(session, [keyid]):
        last = list_[-1]
        assert last == 'h'
        popped = list_.pop(0)
        assert popped == 'a'
        list_.append('i')
    assert list_[:] == list('bcdefhi')
    with Transaction(session, [keyid]):
        last = list_[-1]
        assert last == 'i'
        popped = list_.pop(2)
        assert popped == 'd'
        list_.append('j')
    assert list_[:] == list('bcefhij')
    with Transaction(session, [keyid]):
        last = list_[-1]
        assert last == 'j'
        popped = list_.pop(-3)
        assert popped == 'h'
        list_.append('k')
    assert list_[:] == list('bcefijk')
    with Transaction(session, [keyid]):
        list_.pop()
        with raises(CommitError):
            len(list_)
    with Transaction(session, [keyid]):
        list_.pop(-1)
        with raises(CommitError):
            len(list_)
    with Transaction(session, [keyid]):
        list_.pop(2)
        with raises(CommitError):
            len(list_)
    with Transaction(session, [keyid]):
        list_.pop(-2)
        with raises(CommitError):
            len(list_)
예제 #18
0
def test_automatic_watch():
    session = get_session()
    session2 = get_session()
    keyid = key('test_transaction_automatic_watch')
    list_ = session.set(keyid, 'abc', List)
    list2 = session2.get(keyid, List)
    with raises(ConflictError):
        with Transaction(session):
            list_.append('d')
            list2.append('e')
    # Transation.keys have to be initialized for each context:
    t = Transaction(session)
    with t:
        list_.append('d')
    listx = session.set(key('test_transaction_automatic_watch2'), 'abc', List)
    with t:
        listx.append('a')
        list2.append('b')
    with t:
        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter('always')
            t.watch('asdf')
            assert len(w) == 1
            assert issubclass(w[0].category, SiderWarning)
예제 #19
0
def test_automatic_watch():
    session = get_session()
    session2 = get_session()
    keyid = key('test_transaction_automatic_watch')
    list_ = session.set(keyid, 'abc', List)
    list2 = session2.get(keyid, List)
    with raises(ConflictError):
        with Transaction(session):
            list_.append('d')
            list2.append('e')
    # Transation.keys have to be initialized for each context:
    t = Transaction(session)
    with t:
        list_.append('d')
    listx = session.set(key('test_transaction_automatic_watch2'), 'abc', List)
    with t:
        listx.append('a')
        list2.append('b')
    with t:
        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter('always')
            t.watch('asdf')
            assert len(w) == 1
            assert issubclass(w[0].category, SiderWarning)
예제 #20
0
def test_commit_error():
    session = get_session()
    keyid = key('test_transaction_commit_error')
    list_ = session.set(keyid, 'abc', List)
    try:
        with Transaction(session, [keyid]):
            list_.append('d')
            try:
                list(list_)
            except CommitError:
                raise
            else:
                assert False, 'expected CommitError'
    except CommitError:
        pass
    assert list_[:] == list('abc'), 'transaction must be rolled back'
예제 #21
0
def test_transaction_call():
    session = get_session()
    session2 = get_session()
    keyid = key('test_transaction_call')
    list1 = session.set(keyid, 'abc', List)
    list2 = session2.get(keyid, List)
    t = Transaction(session, [keyid])
    total_trial = [0]

    def block(trial, transaction):
        total_trial[0] = trial
        up = list1[0].upper()
        if trial < 3:
            list2.append('x')
        list1[0] = up

    t(block)
    assert list1[:] == list2[:] == list('Abcxxx')
    assert total_trial[0] == 3
예제 #22
0
def test_pop_dict_t(session):
    session2 = get_session()
    keyid = key('test_sortedset_dict_set_t')
    set_ = session.set(keyid, {'h': 1, 'o': 1, 'n': 3, 'g': 4}, SortedSet)
    set2 = session2.get(keyid, SortedSet)
    with Transaction(session, [keyid]):
        len(set_)
        popped = set_.pop('o')
        assert popped == 1
        assert dict(set2) == {'h': 1, 'o': 1, 'n': 3, 'g': 4}
        with raises(CommitError):
            len(set_)
    assert dict(set_) == dict(set2) == {'h': 1, 'n': 3, 'g': 4}
    with Transaction(session, [keyid]):
        len(set_)
        popped = set_.pop('n', score=0.5)
        assert popped == 3
        assert dict(set2) == {'h': 1, 'n': 3, 'g': 4}
        with raises(CommitError):
            len(set_)
    assert dict(set_) == dict(set2) == {'h': 1, 'n': 2.5, 'g': 4}
    with Transaction(session, [keyid]):
        len(set_)
        popped = set_.pop('n', remove=1.5)
        assert popped == 2.5
        assert dict(set2) == {'h': 1, 'n': 2.5, 'g': 4}
        with raises(CommitError):
            len(set_)
    assert dict(set_) == dict(set2) == {'h': 1, 'g': 4}
    with Transaction(session, [keyid]):
        len(set_)
        popped = set_.pop('g', remove=None)
        assert popped == 4
        assert dict(set2) == {'h': 1, 'g': 4}
        with raises(CommitError):
            len(set_)
    assert dict(set_) == dict(set2) == {'h': 1}
    with Transaction(session, [keyid]):
        len(set_)
        popped = set_.pop('n')
        assert popped is None
        assert dict(set2) == {'h': 1}
    assert dict(set_) == dict(set2) == {'h': 1}
    with Transaction(session, [keyid]):
        len(set_)
        popped = set_.pop('n', default='default value')
        assert popped == 'default value'
        assert dict(set2) == {'h': 1}
    assert dict(set_) == dict(set2) == {'h': 1}
예제 #23
0
def test_popitem_t(session):
    session2 = get_session()
    keyid = key('test_sortedset_popitem_t')
    set_ = session.set(keyid, {'h': 1, 'o': 2, 'n': 3, 'g': 4.5}, SortedSet)
    set2 = session2.get(keyid, SortedSet)
    with Transaction(session, [keyid]):
        len(set_)
        popped = set_.popitem()
        assert popped == ('h', 1)
        assert dict(set2) == {'h': 1, 'o': 2, 'n': 3, 'g': 4.5}
        with raises(CommitError):
            len(set_)
    assert dict(set_) == dict(set2) == {'o': 2, 'n': 3, 'g': 4.5}
    with Transaction(session, [keyid]):
        len(set_)
        popped = set_.popitem(desc=True)
        assert popped == ('g', 4.5)
        assert dict(set2) == {'o': 2, 'n': 3, 'g': 4.5}
        with raises(CommitError):
            len(set_)
    assert dict(set_) == dict(set2) == {'o': 2, 'n': 3, 'g': 3.5}
    with Transaction(session, [keyid]):
        len(set_)
        popped = set_.popitem(score=0.5)
        assert popped == ('o', 2)
        assert dict(set2) == {'o': 2, 'n': 3, 'g': 3.5}
    assert dict(set_) == dict(set2) == {'o': 1.5, 'n': 3, 'g': 3.5}
    with Transaction(session, [keyid]):
        len(set_)
        popped = set_.popitem(remove=0.5)
        assert popped == ('o', 1.5)
        assert dict(set2) == {'o': 1.5, 'n': 3, 'g': 3.5}
    assert dict(set_) == dict(set2) == {'n': 3, 'g': 3.5}
    with Transaction(session, [keyid]):
        len(set_)
        popped = set_.popitem(remove=None)
        assert popped == ('n', 3)
        assert dict(set2) == {'n': 3, 'g': 3.5}
    assert dict(set_) == dict(set2) == {'g': 3.5}
    set_.clear()
    with Transaction(session, [keyid]):
        with raises(KeyError):
            set_.popitem()
예제 #24
0
파일: test_list.py 프로젝트: pmuston/sider
def test_delete_t(session):
    session2 = get_session()
    keyid = key('test_list_delete_t')
    list_ = session.set(keyid, 'abcdefg', List)
    list2 = session2.get(keyid, List)
    with Transaction(session, [keyid]):
        size = len(list_)
        assert size == 7
        del list_[0]
        assert list2[:] == list('abcdefg')
    assert list_[:] == list2[:] == list('bcdefg')
    with Transaction(session, [keyid]):
        size = len(list_)
        assert size == 6
        del list_[-1]
        assert list2[:] == list('bcdefg')
    assert list_[:] == list2[:] == list('bcdef')
    with Transaction(session, [keyid]):
        size = len(list_)
        assert size == 5
        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter('always')
            del list_[2]
            assert len(w) == 1
            assert issubclass(w[0].category, PerformanceWarning)
        assert list2[:] == list('bcdef')
    assert list_[:] == list2[:] == list('bcef')
    with Transaction(session, [keyid]):
        size = len(list_)
        assert size == 4
        del list_[:]
        assert list2[:] == list('bcef')
    assert len(list_[:]) == len(list2[:]) == 0
    with Transaction(session, [keyid]):
        with raises(IndexError):
            del list_[-1]
    with Transaction(session, [keyid]):
        with raises(IndexError):
            del list_[0]
예제 #25
0
def test_delitem_t(session):
    session2 = get_session()
    keyid = key('test_sortedset_delitem_t')
    set_ = session.set(keyid, S('abc'), SortedSet)
    set2 = session2.get(keyid, SortedSet)
    with Transaction(session, [keyid]):
        card = len(set_)
        assert card == 3
        del set_['b']
        assert S(set2) == S('abc')
        with raises(CommitError):
            len(set_)
    assert S(set_) == S(set2) == S('ac')
    with Transaction(session, [keyid]):
        with raises(KeyError):
            del set_['d']
    with Transaction(session, [keyid]):
        with raises(TypeError):
            del set_[123]
    keyid2 = key('test_sortedsetx_delitem_t')
    setx = session.set(keyid2, S([1, 2, 3]), IntSet)
    sety = session2.get(keyid2, IntSet)
    with Transaction(session, [keyid]):
        card = len(setx)
        assert card == 3
        del setx[2]
        assert S(sety) == S([1, 2, 3])
        with raises(CommitError):
            len(setx)
    assert S(setx) == S(sety) == S([1, 3])
    with Transaction(session, [keyid]):
        with raises(KeyError):
            del setx[4]
    with Transaction(session, [keyid]):
        with raises(TypeError):
            del setx['a']