Ejemplo n.º 1
0
    def _multiget(self, conn, keys):
        keys = list(map(str, keys))
        bucket = self._get_bucket(conn)

        results = bucket.multiget(keys)

        datas = []

        for result in results:
            if isinstance(result, RiakObject):
                datas.append(result.data)

            elif isinstance(result, Datatype):
                doc = convert_crdt_from_riak(result)
                datas.append(doc)

            else:
                _, _, key, err = result

                raise_from(
                    KeyError('No such key: {0}'.format(key)),
                    err
                )

        return datas
Ejemplo n.º 2
0
    def test_convert_register(self):
        initial = TYPES['register']()
        initial.assign('foo')

        riak = convert_crdt_to_riak(initial)
        self.assertEqual(riak._new_value, 'foo')

        crdt = convert_crdt_from_riak(riak)
        self.assertEqual(crdt._new, 'foo')
Ejemplo n.º 3
0
    def test_convert_flag(self):
        initial = TYPES['flag']()
        initial.enable()

        riak = convert_crdt_to_riak(initial)
        self.assertEqual(riak._op, 'enable')

        crdt = convert_crdt_from_riak(riak)
        self.assertEqual(crdt._mutation, 'enable')
Ejemplo n.º 4
0
    def test_convert_counter(self):
        initial = TYPES['counter']()
        initial.increment()

        riak = convert_crdt_to_riak(initial)
        self.assertEqual(riak._increment, 1)

        crdt = convert_crdt_from_riak(riak)
        self.assertEqual(crdt._increment, 1)
Ejemplo n.º 5
0
    def test_convert_set(self):
        initial = TYPES['set']()
        initial.add('hello')
        initial.add('world')
        initial.discard('hello')

        riak = convert_crdt_to_riak(initial)
        self.assertEqual(riak._adds, {'hello', 'world'})
        self.assertEqual(riak._removes, {'hello'})

        crdt = convert_crdt_from_riak(riak)
        self.assertEqual(crdt._adds, {'hello', 'world'})
        self.assertEqual(crdt._removes, {'hello'})
Ejemplo n.º 6
0
    def _get(self, conn, key):
        key = str(key)

        obj = self._get_bucket(conn).get(key)

        if isinstance(obj, RiakObject):
            if not obj.exists:
                raise KeyError('No such key: {0}'.format(key))

            return obj.data

        elif isinstance(obj, Datatype):
            return convert_crdt_from_riak(obj)

        else:
            raise KeyError('No such key: {0}'.format(key))
Ejemplo n.º 7
0
    def _get(self, conn, key):
        key = str(key)

        obj = self._get_bucket(conn).get(key)

        if isinstance(obj, RiakObject):
            if not obj.exists:
                raise KeyError('No such key: {0}'.format(key))

            return obj.data

        elif isinstance(obj, Datatype):
            return convert_crdt_from_riak(obj)

        else:
            raise KeyError('No such key: {0}'.format(key))
Ejemplo n.º 8
0
    def _multiget(self, conn, keys):
        keys = list(map(str, keys))
        bucket = self._get_bucket(conn)

        results = bucket.multiget(keys)

        datas = []

        for result in results:
            if isinstance(result, RiakObject):
                datas.append(result.data)

            elif isinstance(result, Datatype):
                doc = convert_crdt_from_riak(result)
                datas.append(doc)

            else:
                _, _, key, err = result

                raise_from(KeyError('No such key: {0}'.format(key)), err)

        return datas
Ejemplo n.º 9
0
    def test_convert_map(self):
        initial = TYPES['map'](value={
            'g_flag': False
        })

        initial['a_counter'].increment()
        initial['b_flag'].enable()
        initial['c_set'].add('hello')
        initial['c_set'].add('world')
        initial['c_set'].discard('hello')
        initial['d_register'].assign('foo')
        initial['e_map']['a_counter'].increment()
        initial['f_counter'].increment()
        del initial['f_counter']

        riak = convert_crdt_to_riak(initial)

        keys = [
            ('a', 'counter'),
            ('b', 'flag'),
            ('c', 'set'),
            ('d', 'register'),
            ('e', 'map'),
            ('f', 'counter')
        ]

        for key in keys:
            self.assertIn(key, riak._updates)

        self.assertIn(('f', 'counter'), riak._removes)
        self.assertIn(('g', 'flag'), riak)
        self.assertEqual(riak[('g', 'flag')].value, False)

        self.assertEqual(riak._updates[('a', 'counter')]._increment, 1)
        self.assertEqual(riak._updates[('b', 'flag')]._op, 'enable')
        self.assertEqual(riak._updates[('c', 'set')]._adds, {'hello', 'world'})
        self.assertEqual(riak._updates[('c', 'set')]._removes, {'hello'})
        self.assertEqual(riak._updates[('d', 'register')]._new_value, 'foo')

        self.assertIn(('a', 'counter'), riak._updates[('e', 'map')]._updates)
        self.assertEqual(
            riak._updates[('e', 'map')]._updates[('a', 'counter')]._increment,
            1
        )

        crdt = convert_crdt_from_riak(riak)

        keys = [
            'a_counter',
            'b_flag',
            'c_set',
            'd_register',
            'e_map',
            'f_counter'
        ]

        for key in keys:
            self.assertIn(key, crdt._updates)

        self.assertIn('f_counter', crdt._removes)
        self.assertIn('g_flag', crdt)
        self.assertEqual(crdt['g_flag'].current, False)

        self.assertEqual(crdt._updates['a_counter']._increment, 1)
        self.assertEqual(crdt._updates['b_flag']._mutation, 'enable')
        self.assertEqual(crdt._updates['c_set']._adds, {'hello', 'world'})
        self.assertEqual(crdt._updates['c_set']._removes, {'hello'})
        self.assertEqual(crdt._updates['d_register']._new, 'foo')

        self.assertIn('a_counter', crdt._updates['e_map']._updates)
        self.assertEqual(
            crdt._updates['e_map']._updates['a_counter']._increment,
            1
        )