예제 #1
0
    def test_index_separator(self):
        class CustomSeparator(BaseModel):
            index_separator = '$'
            name = TextField(primary_key=True)
            data = IntegerField(index=True)

        CustomSeparator.create(name='huey.zai', data=3)
        CustomSeparator.create(name='michael.nuggie', data=5)

        keys = sorted(db.keys())
        self.assertEqual(
            keys,
            [
                # namespace | model : $-delimited indexed data
                b'test|customseparator:all',
                b'test|customseparator:data$absolute$3',
                b'test|customseparator:data$absolute$5',
                b'test|customseparator:data$continuous',
                b'test|customseparator:id$huey.zai',
                b'test|customseparator:id$michael.nuggie',
                b'test|customseparator:name$absolute$huey.zai',
                b'test|customseparator:name$absolute$michael.nuggie'
            ])

        huey = CustomSeparator.get(CustomSeparator.data < 5)
        self.assertEqual(huey.name, 'huey.zai')

        mickey = CustomSeparator.load('michael.nuggie')
        self.assertEqual(mickey.data, 5)
예제 #2
0
파일: models.py 프로젝트: coleifer/walrus
    def test_index_separator(self):
        class CustomSeparator(BaseModel):
            index_separator = '$'
            name = TextField(primary_key=True)
            data = IntegerField(index=True)

        CustomSeparator.create(name='huey.zai', data=3)
        CustomSeparator.create(name='michael.nuggie', data=5)

        keys = sorted(db.keys())
        self.assertEqual(keys, [
            # namespace | model : $-delimited indexed data
            b'test|customseparator:all',
            b'test|customseparator:data$absolute$3',
            b'test|customseparator:data$absolute$5',
            b'test|customseparator:data$continuous',
            b'test|customseparator:id$huey.zai',
            b'test|customseparator:id$michael.nuggie',
            b'test|customseparator:name$absolute$huey.zai',
            b'test|customseparator:name$absolute$michael.nuggie'])

        huey = CustomSeparator.get(CustomSeparator.data < 5)
        self.assertEqual(huey.name, 'huey.zai')

        mickey = CustomSeparator.load('michael.nuggie')
        self.assertEqual(mickey.data, 5)
예제 #3
0
    def test_key_leaks(self):
        initial_key_count = len(db.keys())

        # Store a single item.
        self.store_test_data(1)

        # See how many keys we have in the db - check again in a bit.
        key_len = len(db.keys())

        # Store a second item.
        self.store_test_data(2)
        key_len2 = len(db.keys())

        self.assertTrue(key_len != key_len2)
        self.ac.remove(2)

        # Back to the original amount of keys we had after one item.
        self.assertEqual(len(db.keys()), key_len)

        # Remove the first item, back to original count at start.
        self.ac.remove(1)
        self.assertEqual(len(db.keys()), initial_key_count)
예제 #4
0
    def test_delete_indexes(self):
        self.assertEqual(set(db.keys()), set())

        Message.create(content='charlie message', status=1)
        Message.create(content='huey message', status=2)
        keys = set(db.keys())

        charlie = Message.load(1)
        charlie.delete()
        huey_keys = set(db.keys())

        diff = keys - huey_keys

        def make_key(*args):
            return Message._query.make_key(*args).encode('utf-8')

        self.assertEqual(
            diff,
            set([
                make_key('_id', 'absolute', 1),
                make_key('content', 'absolute', 'charlie message'),
                make_key('content', 'fts', 'charli'),
                make_key('id', 1),
                make_key('status', 'absolute', 1),
            ]))

        # Ensure we cannot query for Charlie, but that we can query for Huey.
        expressions = [
            (Message.status == 1),
            (Message.status != 2),
            (Message._id == 1),
            (Message._id != 2),
            (Message.content == 'charlie message'),
            (Message.content != 'huey message'),
            (Message.content.match('charlie')),
        ]
        for expression in expressions:
            self.assertRaises(ValueError, Message.get, expression)

        expressions = [
            (Message.status == 2),
            (Message.status > 1),
            (Message._id == 2),
            (Message._id != 1),
            (Message.content == 'huey message'),
            (Message.content != 'charlie'),
            (Message.content.match('huey')),
            (Message.content.match('message')),
        ]
        for expression in expressions:
            obj = Message.get(expression)
            self.assertEqual(obj._data, {
                '_id': 2,
                'content': 'huey message',
                'status': 2,
            })

        after_filter_keys = set(db.keys())
        symm_diff = huey_keys ^ after_filter_keys
        self.assertTrue(all(key.startswith(b'temp') for key in symm_diff))

        huey = Message.load(2)
        huey.delete()

        final_keys = set(key for key in db.keys()
                         if not key.startswith(b'temp'))
        self.assertEqual(final_keys, set([make_key('_id', '_sequence')]))
예제 #5
0
파일: models.py 프로젝트: coleifer/walrus
    def test_delete_indexes(self):
        self.assertEqual(set(db.keys()), set())

        Message.create(content='charlie message', status=1)
        Message.create(content='huey message', status=2)
        keys = set(db.keys())

        charlie = Message.load(1)
        charlie.delete()
        huey_keys = set(db.keys())

        diff = keys - huey_keys

        def make_key(*args):
            return Message._query.make_key(*args).encode('utf-8')

        self.assertEqual(diff, set([
            make_key('_id', 'absolute', 1),
            make_key('content', 'absolute', 'charlie message'),
            make_key('content', 'fts', 'charli'),
            make_key('id', 1),
            make_key('status', 'absolute', 1),
        ]))

        # Ensure we cannot query for Charlie, but that we can query for Huey.
        expressions = [
            (Message.status == 1),
            (Message.status != 2),
            (Message._id == 1),
            (Message._id != 2),
            (Message.content == 'charlie message'),
            (Message.content != 'huey message'),
            (Message.content.match('charlie')),
        ]
        for expression in expressions:
            self.assertRaises(ValueError, Message.get, expression)

        expressions = [
            (Message.status == 2),
            (Message.status > 1),
            (Message._id == 2),
            (Message._id != 1),
            (Message.content == 'huey message'),
            (Message.content != 'charlie'),
            (Message.content.match('huey')),
            (Message.content.match('message')),
        ]
        for expression in expressions:
            obj = Message.get(expression)
            self.assertEqual(obj._data, {
                '_id': 2,
                'content': 'huey message',
                'status': 2,
            })

        after_filter_keys = set(db.keys())
        symm_diff = huey_keys ^ after_filter_keys
        self.assertTrue(all(key.startswith(b'temp') for key in symm_diff))

        huey = Message.load(2)
        huey.delete()

        final_keys = set(key for key in db.keys()
                         if not key.startswith(b'temp'))
        self.assertEqual(final_keys, set([make_key('_id', '_sequence')]))