Пример #1
0
# -*- coding: utf-8 -*-

from gblackboard import Blackboard
from gblackboard import SupportedMemoryType

blackboard = Blackboard(SupportedMemoryType.DICTIONARY)
# Set a key-value data; `set` method should be called only once for a key.
# It's a kind of initialization for data.
blackboard.set('key', 'value')
# Retrieve data with key.
value = blackboard.get('key')
# Update data with new value;
# `update` method should be called after `set` method called for a key.
blackboard.update('key', 'new_value')
# Delete data from blackboard with key.
blackboard.drop('key')
# Clear all data in blackboard.
blackboard.clear()
Пример #2
0
class TestGblackboard(unittest.TestCase):
    @patch('redis.Redis', fakeredis.FakeRedis)
    def setUp(self):
        self.blackboard = Blackboard(SupportedMemoryType.REDIS,
                                     host='localhost',
                                     port=6379,
                                     db_num=1,
                                     flush=True,
                                     timeout=1.0)
        self.data_a = None
        self.data_b = None
        self.data_c = None

    def tearDown(self):
        self.blackboard.close()

    def callback_a(self, data):
        self.data_a = data

    def callback_b(self, data):
        self.data_b = data

    def callback_c(self, data):
        self.data_c = data

    def test_simple_data(self):
        # set first value
        first_key = 'first'
        first_value = 100
        self.blackboard.set(first_key, first_value)
        first = self.blackboard.get(first_key)
        self.assertEqual(first, first_value)
        # update first value
        first_value = 200
        self.blackboard.update(first_key, first_value)
        first = self.blackboard.get(first_key)
        self.assertEqual(first, first_value)
        # set second value (read_only)
        second_key = 'second'
        second_value = 100.1
        self.blackboard.set(second_key, second_value, read_only=True)
        second = self.blackboard.get(second_key)
        self.assertEqual(second, second_value)
        second_value = 100.2
        with self.assertRaises(exception.NotEditable):
            self.blackboard.update(second_key, second_value)
        # drop first value
        self.blackboard.drop(first_key)
        with self.assertRaises(exception.NonExistingKey):
            self.blackboard.get(first_key)
        # clear keys
        self.blackboard.clear()
        keys = self.blackboard.keys(in_list=True)
        self.assertListEqual(keys, [])
        # set third value
        third_key = 'third'
        third_value = 'hello world'
        self.blackboard.set(third_key, third_value, read_only=False)
        # test callback_a, callback_b
        self.blackboard.register_callback(third_key, self.callback_a)
        self.blackboard.register_callback(third_key, self.callback_b)
        self.blackboard.register_callback(third_key, self.callback_c)
        third_value = 'hello blackboard!'
        self.blackboard.update(third_key, third_value)
        self.assertEqual(self.data_a, third_value)
        self.assertEqual(self.data_b, third_value)
        self.assertEqual(self.data_c, third_value)
        # remove callback_a
        self.blackboard.remove_callback(third_key, self.callback_a)
        third_value = 'hello world!!'
        self.blackboard.update(third_key, third_value)
        self.assertNotEqual(self.data_a, third_value)
        self.assertEqual(self.data_b, third_value)
        self.assertEqual(self.data_c, third_value)
        # clear callbacks
        self.blackboard.clear_callbacks(third_key)
        third_value = 'clear callbacks'
        self.blackboard.update(third_key, third_value)
        self.assertNotEqual(self.data_a, third_value)
        self.assertNotEqual(self.data_b, third_value)
        self.assertNotEqual(self.data_c, third_value)

    def test_complex_data(self):
        # user1 data
        user1_key = 'user1'
        user1_val = User("G.Ted", "*****@*****.**")
        self.blackboard.set(user1_key, user1_val)
        user1_val = self.blackboard.get(user1_key)
        self.assertEqual(type(user1_val), User)
        self.assertEqual(repr(user1_val), "<User(name='G.Ted')>")
        # user2 data
        user2_key = 'user2'
        user2_val = User("Foo", "*****@*****.**")
        self.blackboard.set(user2_key, user2_val)
        self.blackboard.register_callback(user2_key, self.callback_a)
        user2_val = self.blackboard.get(user2_key)
        user2_val.name = 'Bar'
        self.blackboard.update(user2_key, user2_val)
        user2_val = self.blackboard.get(user2_key)
        self.assertEqual(type(user2_val), User)
        self.assertEqual(repr(user2_val), "<User(name='Bar')>")
        self.assertEqual(type(self.data_a), User)
        self.assertEqual(repr(self.data_a), "<User(name='Bar')>")
        # user list
        user_list_key = 'users'
        user_list_val = [user1_val, user2_val]
        self.blackboard.set(user_list_key, user_list_val)
        user_list_val = self.blackboard.get(user_list_key)
        self.assertEqual(user_list_val[0], user1_val)
        self.assertListEqual(user_list_val, [user1_val, user2_val])