mirror of
https://github.com/SpiceBot/SpiceBot.git
synced 2026-11-13 06:59:53 -05:00
add server database functionality
This commit is contained in:
parent
9f27ea2093
commit
0581a1817a
@ -68,6 +68,18 @@ class ChannelValues(BASE):
|
|||||||
value = Column(Text())
|
value = Column(Text())
|
||||||
|
|
||||||
|
|
||||||
|
class ServerValues(BASE):
|
||||||
|
"""
|
||||||
|
ServerValues SQLAlchemy Class
|
||||||
|
"""
|
||||||
|
__tablename__ = 'spice_server_values'
|
||||||
|
__table_args__ = MYSQL_TABLE_ARGS
|
||||||
|
server = Column(String(255), primary_key=True)
|
||||||
|
namespace = Column(String(255), primary_key=True)
|
||||||
|
key = Column(String(255), primary_key=True)
|
||||||
|
value = Column(Text())
|
||||||
|
|
||||||
|
|
||||||
class PluginValues(BASE):
|
class PluginValues(BASE):
|
||||||
"""
|
"""
|
||||||
PluginValues SQLAlchemy Class
|
PluginValues SQLAlchemy Class
|
||||||
@ -396,6 +408,138 @@ class SpiceDB(object):
|
|||||||
finally:
|
finally:
|
||||||
session.close()
|
session.close()
|
||||||
|
|
||||||
|
# SERVER FUNCTIONS
|
||||||
|
|
||||||
|
def set_server_value(self, server, key, value, namespace='default'):
|
||||||
|
"""Sets the value for a given key to be associated with the server."""
|
||||||
|
value = json.dumps(value, ensure_ascii=False)
|
||||||
|
session = self.ssession()
|
||||||
|
try:
|
||||||
|
result = session.query(ServerValues) \
|
||||||
|
.filter(ServerValues.server == server)\
|
||||||
|
.filter(ServerValues.namespace == namespace)\
|
||||||
|
.filter(ServerValues.key == key) \
|
||||||
|
.one_or_none()
|
||||||
|
# ServerValue exists, update
|
||||||
|
if result:
|
||||||
|
result.value = value
|
||||||
|
session.commit()
|
||||||
|
# DNE - Insert
|
||||||
|
else:
|
||||||
|
new_servervalue = ServerValues(server=server, namespace=namespace, key=key, value=value)
|
||||||
|
session.add(new_servervalue)
|
||||||
|
session.commit()
|
||||||
|
except SQLAlchemyError:
|
||||||
|
session.rollback()
|
||||||
|
raise
|
||||||
|
finally:
|
||||||
|
session.close()
|
||||||
|
|
||||||
|
def get_server_value(self, server, key, namespace='default'):
|
||||||
|
"""Retrieves the value for a given key associated with a server."""
|
||||||
|
session = self.ssession()
|
||||||
|
try:
|
||||||
|
result = session.query(ServerValues) \
|
||||||
|
.filter(ServerValues.server == server)\
|
||||||
|
.filter(ServerValues.namespace == namespace)\
|
||||||
|
.filter(ServerValues.key == key) \
|
||||||
|
.one_or_none()
|
||||||
|
if result is not None:
|
||||||
|
result = result.value
|
||||||
|
return _deserialize(result)
|
||||||
|
except SQLAlchemyError:
|
||||||
|
session.rollback()
|
||||||
|
raise
|
||||||
|
finally:
|
||||||
|
session.close()
|
||||||
|
|
||||||
|
def delete_server_value(self, server, key, namespace='default'):
|
||||||
|
"""Sets the value for a given key to be associated with the server."""
|
||||||
|
session = self.ssession()
|
||||||
|
try:
|
||||||
|
result = session.query(ServerValues) \
|
||||||
|
.filter(ServerValues.server == server)\
|
||||||
|
.filter(ServerValues.namespace == namespace)\
|
||||||
|
.filter(ServerValues.key == key) \
|
||||||
|
.one_or_none()
|
||||||
|
# ServerValue exists, delete
|
||||||
|
if result:
|
||||||
|
session.delete(result)
|
||||||
|
session.commit()
|
||||||
|
except SQLAlchemyError:
|
||||||
|
session.rollback()
|
||||||
|
raise
|
||||||
|
finally:
|
||||||
|
session.close()
|
||||||
|
|
||||||
|
def adjust_server_value(self, server, key, value, namespace='default'):
|
||||||
|
"""Sets the value for a given key to be associated with the server."""
|
||||||
|
value = json.dumps(value, ensure_ascii=False)
|
||||||
|
session = self.ssession()
|
||||||
|
try:
|
||||||
|
result = session.query(ServerValues) \
|
||||||
|
.filter(ServerValues.server == server)\
|
||||||
|
.filter(ServerValues.namespace == namespace)\
|
||||||
|
.filter(ServerValues.key == key) \
|
||||||
|
.one_or_none()
|
||||||
|
# ServerValue exists, update
|
||||||
|
if result:
|
||||||
|
result.value = float(result.value) + float(value)
|
||||||
|
session.commit()
|
||||||
|
# DNE - Insert
|
||||||
|
else:
|
||||||
|
new_servervalue = ServerValues(server=server, namespace=namespace, key=key, value=float(value))
|
||||||
|
session.add(new_servervalue)
|
||||||
|
session.commit()
|
||||||
|
except SQLAlchemyError:
|
||||||
|
session.rollback()
|
||||||
|
raise
|
||||||
|
finally:
|
||||||
|
session.close()
|
||||||
|
|
||||||
|
def adjust_server_list(self, server, key, entries, adjustmentdirection, namespace='default'):
|
||||||
|
"""Sets the value for a given key to be associated with the server."""
|
||||||
|
if not isinstance(entries, list):
|
||||||
|
entries = [entries]
|
||||||
|
entries = json.dumps(entries, ensure_ascii=False)
|
||||||
|
session = self.ssession()
|
||||||
|
try:
|
||||||
|
result = session.query(ServerValues) \
|
||||||
|
.filter(ServerValues.server == server)\
|
||||||
|
.filter(ServerValues.namespace == namespace)\
|
||||||
|
.filter(ServerValues.key == key) \
|
||||||
|
.one_or_none()
|
||||||
|
# ServerValue exists, update
|
||||||
|
if result:
|
||||||
|
if adjustmentdirection == 'add':
|
||||||
|
for entry in entries:
|
||||||
|
if entry not in result.value:
|
||||||
|
result.value.append(entry)
|
||||||
|
elif adjustmentdirection == 'del':
|
||||||
|
for entry in entries:
|
||||||
|
while entry in result.value:
|
||||||
|
result.value.remove(entry)
|
||||||
|
session.commit()
|
||||||
|
# DNE - Insert
|
||||||
|
else:
|
||||||
|
values = []
|
||||||
|
if adjustmentdirection == 'add':
|
||||||
|
for entry in entries:
|
||||||
|
if entry not in values:
|
||||||
|
values.append(entry)
|
||||||
|
elif adjustmentdirection == 'del':
|
||||||
|
for entry in entries:
|
||||||
|
while entry in values:
|
||||||
|
values.remove(entry)
|
||||||
|
new_servervalue = ServerValues(server=server, namespace=namespace, key=key, value=values)
|
||||||
|
session.add(new_servervalue)
|
||||||
|
session.commit()
|
||||||
|
except SQLAlchemyError:
|
||||||
|
session.rollback()
|
||||||
|
raise
|
||||||
|
finally:
|
||||||
|
session.close()
|
||||||
|
|
||||||
# PLUGIN FUNCTIONS
|
# PLUGIN FUNCTIONS
|
||||||
|
|
||||||
def set_plugin_value(self, plugin, key, value, namespace='default'):
|
def set_plugin_value(self, plugin, key, value, namespace='default'):
|
||||||
@ -474,7 +618,7 @@ class SpiceDB(object):
|
|||||||
.filter(PluginValues.namespace == namespace)\
|
.filter(PluginValues.namespace == namespace)\
|
||||||
.filter(PluginValues.key == key) \
|
.filter(PluginValues.key == key) \
|
||||||
.one_or_none()
|
.one_or_none()
|
||||||
# ChannelValue exists, update
|
# PluginValue exists, update
|
||||||
if result:
|
if result:
|
||||||
result.value = float(result.value) + float(value)
|
result.value = float(result.value) + float(value)
|
||||||
session.commit()
|
session.commit()
|
||||||
@ -502,7 +646,7 @@ class SpiceDB(object):
|
|||||||
.filter(PluginValues.namespace == namespace)\
|
.filter(PluginValues.namespace == namespace)\
|
||||||
.filter(PluginValues.key == key) \
|
.filter(PluginValues.key == key) \
|
||||||
.one_or_none()
|
.one_or_none()
|
||||||
# ChannelValue exists, update
|
# PluginValue exists, update
|
||||||
if result:
|
if result:
|
||||||
if adjustmentdirection == 'add':
|
if adjustmentdirection == 'add':
|
||||||
for entry in entries:
|
for entry in entries:
|
||||||
@ -557,6 +701,13 @@ class BotDatabase():
|
|||||||
SopelDB.adjust_channel_value = SpiceDB.adjust_channel_value
|
SopelDB.adjust_channel_value = SpiceDB.adjust_channel_value
|
||||||
SopelDB.adjust_channel_list = SpiceDB.adjust_channel_list
|
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
|
sopel.db.PluginValues = PluginValues
|
||||||
SopelDB.get_plugin_value = SpiceDB.get_plugin_value
|
SopelDB.get_plugin_value = SpiceDB.get_plugin_value
|
||||||
SopelDB.set_plugin_value = SpiceDB.set_plugin_value
|
SopelDB.set_plugin_value = SpiceDB.set_plugin_value
|
||||||
@ -634,6 +785,23 @@ class BotDatabase():
|
|||||||
def adjust_channel_list(self, nick, key, entries, adjustmentdirection, namespace='default'):
|
def adjust_channel_list(self, nick, key, entries, adjustmentdirection, namespace='default'):
|
||||||
return self.db.adjust_channel_list(nick, key, entries, adjustmentdirection, namespace)
|
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"""
|
"""Plugins"""
|
||||||
|
|
||||||
def get_plugin_value(self, plugin, key, namespace='default'):
|
def get_plugin_value(self, plugin, key, namespace='default'):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user