def test_get_preferred_value(db: SopelDB): db.set_nick_value('asdf', 'qwer', 'poiu') db.set_channel_value('#asdf', 'qwer', '/.,m') db.set_channel_value('#asdf', 'lkjh', '1234') names = ['asdf', '#asdf'] assert db.get_preferred_value(names, 'qwer') == 'poiu' assert db.get_preferred_value(names, 'lkjh') == '1234'
def test_get_preferred_value_none(db: SopelDB): """Test method when there is no preferred value""" db.set_nick_value('testuser', 'userkey', 'uservalue') db.set_channel_value('#channel', 'channelkey', 'channelvalue') names = ['notuser', '#notchannel'] assert db.get_preferred_value(names, 'userkey') is None assert db.get_preferred_value(names, 'channelkey') is None
def test_forget_channel(db: SopelDB): db.set_channel_value('#channel', 'testkey1', 'value1') db.set_channel_value('#channel', 'testkey2', 'value2') assert db.get_channel_value('#channel', 'testkey1') == 'value1' assert db.get_channel_value('#channel', 'testkey2') == 'value2' db.forget_channel('#channel') assert db.get_channel_value('#channel', 'wasd') is None assert db.get_channel_value('#channel', 'asdf') is None
def test_delete_channel_value(db: SopelDB): # assert you can delete a non-existing key (without error) db.delete_channel_value('#channel', 'testkey') # assert you can delete an existing key db.set_channel_value('#channel', 'testkey', 'channel-value') db.delete_channel_value('#channel', 'testkey') assert db.get_channel_value('#channel', 'testkey') is None
def test_get_nick_or_channel_value_identifier(db: SopelDB): db.set_nick_value('testuser', 'testkey', 'user-value') db.set_channel_value('#channel', 'testkey', 'channel-value') nick = Identifier('testuser') channel = Identifier('#channel') assert db.get_nick_or_channel_value(nick, 'testkey') == 'user-value' assert db.get_nick_or_channel_value(nick, 'nokey') is None assert db.get_nick_or_channel_value(nick, 'nokey', 'default') == 'default' assert db.get_nick_or_channel_value(channel, 'testkey') == 'channel-value' assert db.get_nick_or_channel_value(channel, 'nokey', 'default') == 'default'
def test_set_channel_value(db: SopelDB): # set new value db.set_channel_value('#channel', 'testkey', 'channel-value') with db.session() as session: result = session.query(ChannelValues.value) \ .filter(ChannelValues.channel == '#channel') \ .filter(ChannelValues.key == 'testkey') \ .scalar() assert result == '"channel-value"' # update pre-existing value db.set_channel_value('#channel', 'testkey', 'new_channel-value') with db.session() as session: result = session.query(ChannelValues.value) \ .filter(ChannelValues.channel == '#channel') \ .filter(ChannelValues.key == 'testkey') \ .scalar() assert result == '"new_channel-value"'
def test_get_channel_slug_with_migration(db: SopelDB): channel = db.make_identifier('#[channel]') db.set_channel_value(channel, 'testkey', 'cval') assert db.get_channel_slug(channel) == channel.lower() assert db.get_channel_value(channel, 'testkey') == 'cval' # insert a value with the wrong casemapping old_channel = Identifier._lower_swapped('#[channel]') assert old_channel == '#[channel]' assert channel.lower() == '#{channel}' with db.session() as session: channel_value = ChannelValues( channel=old_channel, key='oldkey', value='"value"' # result from json.dumps ) session.add(channel_value) session.commit() assert db.get_channel_slug(old_channel) == channel.lower(), ( 'Channel with previous casemapping must return the new version.') assert db.get_channel_value(old_channel, 'oldkey') == 'value', ( 'Key associated to an old version must be migrated to the new one')
def test_get_nick_or_channel_value(db: SopelDB): db.set_nick_value('asdf', 'qwer', 'poiu') db.set_channel_value('#asdf', 'qwer', '/.,m') assert db.get_nick_or_channel_value('asdf', 'qwer') == 'poiu' assert db.get_nick_or_channel_value('#asdf', 'qwer') == '/.,m'
class BotDatabase(): def __init__(self): SopelDB.nick_id_lock = threading.Lock() sopel.db.NickIDs = NickIDs sopel.db.Nicknames = Nicknames sopel.db.NickValues = NickValues SopelDB.get_nick_id = SpiceDB.get_nick_id SopelDB.get_nick_value = SpiceDB.get_nick_value SopelDB.set_nick_value = SpiceDB.set_nick_value SopelDB.delete_nick_value = SpiceDB.delete_nick_value SopelDB.adjust_nick_value = SpiceDB.adjust_nick_value SopelDB.adjust_nick_list = SpiceDB.adjust_nick_list sopel.db.ChannelValues = ChannelValues SopelDB.get_channel_value = SpiceDB.get_channel_value SopelDB.set_channel_value = SpiceDB.set_channel_value SopelDB.delete_channel_value = SpiceDB.delete_channel_value SopelDB.adjust_channel_value = SpiceDB.adjust_channel_value SopelDB.adjust_channel_list = SpiceDB.adjust_channel_list sopel.db.ServerValues = ServerValues SopelDB.get_server_value = SpiceDB.get_server_value SopelDB.set_server_value = SpiceDB.set_server_value SopelDB.delete_server_value = SpiceDB.delete_server_value SopelDB.adjust_server_value = SpiceDB.adjust_server_value SopelDB.adjust_server_list = SpiceDB.adjust_server_list sopel.db.PluginValues = PluginValues SopelDB.get_plugin_value = SpiceDB.get_plugin_value SopelDB.set_plugin_value = SpiceDB.set_plugin_value SopelDB.delete_plugin_value = SpiceDB.delete_plugin_value SopelDB.adjust_plugin_value = SpiceDB.adjust_plugin_value SopelDB.adjust_plugin_list = SpiceDB.adjust_plugin_list self.db = SopelDB(botconfig.config) BASE.metadata.create_all(self.db.engine) """Nick""" def get_nick_id(self, nick, create=True): return self.db.get_nick_id(nick, create) def alias_nick(self, nick, alias): return self.db.alias_nick(nick, alias) def unalias_nick(self, alias): return self.db.unalias_nick(alias) def check_nick_id(self, nick): try: self.db.get_nick_id(nick, create=False) return True except ValueError: return False def get_nick_value(self, nick, key, namespace='default'): return self.db.get_nick_value(nick, key, namespace) def set_nick_value(self, nick, key, value, namespace='default'): return self.db.set_nick_value(nick, key, value, namespace) def delete_nick_value(self, nick, key, namespace='default'): return self.db.delete_nick_value(nick, key, namespace) def adjust_nick_value(self, nick, key, value, namespace='default'): return self.db.adjust_nick_value(nick, key, value, namespace) def adjust_nick_list(self, nick, key, entries, adjustmentdirection, namespace='default'): return self.db.adjust_nick_list(nick, key, entries, adjustmentdirection, namespace) """Bot""" def get_bot_value(self, key, namespace='default'): return self.db.get_nick_value(botconfig.nick, key, namespace) def set_bot_value(self, key, value, namespace='default'): return self.db.set_nick_value(botconfig.nick, key, value, namespace) def delete_bot_value(self, key, namespace='default'): return self.db.delete_nick_value(botconfig.nick, key, namespace) def adjust_bot_value(self, key, value, namespace='default'): return self.db.adjust_nick_value(botconfig.nick, key, value, namespace) def adjust_bot_list(self, key, entries, adjustmentdirection, namespace='default'): return self.db.adjust_nick_list(botconfig.nick, key, entries, adjustmentdirection, namespace) """Channels""" def get_channel_value(self, channel, key, namespace='default'): return self.db.get_channel_value(channel, key, namespace) def set_channel_value(self, channel, key, value, namespace='default'): return self.db.set_channel_value(channel, key, value, namespace) def delete_channel_value(self, channel, key, namespace='default'): return self.db.delete_channel_value(channel, key, namespace) def adjust_channel_value(self, channel, key, value, namespace='default'): return self.db.adjust_channel_value(channel, key, value, namespace) def adjust_channel_list(self, nick, key, entries, adjustmentdirection, namespace='default'): return self.db.adjust_channel_list(nick, key, entries, adjustmentdirection, namespace) """Servers""" def get_server_value(self, _server, key, namespace='default'): return self.db.get__server_value(_server, key, namespace) def set__server_value(self, _server, key, value, namespace='default'): return self.db.set__server_value(_server, key, value, namespace) def delete__server_value(self, _server, key, namespace='default'): return self.db.delete__server_value(_server, key, namespace) def adjust__server_value(self, _server, key, value, namespace='default'): return self.db.adjust__server_value(_server, key, value, namespace) def adjust__server_list(self, nick, key, entries, adjustmentdirection, namespace='default'): return self.db.adjust__server_list(nick, key, entries, adjustmentdirection, namespace) """Plugins""" def get_plugin_value(self, plugin, key, namespace='default'): return self.db.get_plugin_value(plugin, key, namespace) def set_plugin_value(self, plugin, key, value, namespace='default'): return self.db.set_plugin_value(plugin, key, value, namespace) def delete_plugin_value(self, plugin, key, namespace='default'): return self.db.delete_plugin_value(plugin, key, namespace) def adjust_plugin_value(self, plugin, key, value, namespace='default'): return self.db.adjust_plugin_value(plugin, key, value, namespace) def adjust_plugin_list(self, plugin, key, entries, adjustmentdirection, namespace='default'): return self.db.adjust_plugin_list(plugin, key, entries, adjustmentdirection, namespace)