1212from sqlalchemy .ext .declarative import declarative_base
1313from sqlalchemy .orm import scoped_session , sessionmaker
1414
15- from sopel .tools import Identifier
15+ from sopel .tools import deprecated , Identifier
1616
1717
1818LOGGER = logging .getLogger (__name__ )
@@ -273,7 +273,7 @@ def get_nick_id(self, nick, create=True):
273273
274274 Alias/group management functions: :meth:`alias_nick`,
275275 :meth:`unalias_nick`, :meth:`merge_nick_groups`, and
276- :meth:`delete_nick_group `.
276+ :meth:`forget_nick_group `.
277277
278278 """
279279 session = self .ssession ()
@@ -476,7 +476,7 @@ def unalias_nick(self, alias):
476476
477477 .. seealso::
478478
479- To delete an entire group, use :meth:`delete_nick_group `.
479+ To delete an entire group, use :meth:`forget_nick_group `.
480480
481481 To *add* an alias for a nick, use :meth:`alias_nick`.
482482
@@ -498,7 +498,7 @@ def unalias_nick(self, alias):
498498 finally :
499499 self .ssession .remove ()
500500
501- def delete_nick_group (self , nick ):
501+ def forget_nick_group (self , nick ):
502502 """Remove a nickname, all of its aliases, and all of its stored values.
503503
504504 :param str nick: one of the nicknames in the group to be deleted
@@ -523,6 +523,14 @@ def delete_nick_group(self, nick):
523523 finally :
524524 self .ssession .remove ()
525525
526+ @deprecated (
527+ version = '8.0' ,
528+ removed_in = '9.0' ,
529+ reason = "Renamed to `forget_nick_group`" ,
530+ )
531+ def delete_nick_group (self , nick ): # pragma: nocover
532+ self .forget_nick_group (nick )
533+
526534 def merge_nick_groups (self , first_nick , second_nick ):
527535 """Merge two nick groups.
528536
@@ -724,6 +732,28 @@ def get_channel_value(self, channel, key, default=None):
724732 finally :
725733 self .ssession .remove ()
726734
735+ def forget_channel (self , channel ):
736+ """Remove all of a channel's stored values.
737+
738+ :param str channel: the name of the channel for which to delete values
739+ :raise ~sqlalchemy.exc.SQLAlchemyError: if there is a database error
740+
741+ .. important::
742+
743+ This is a Nuclear Option. Be *very* sure that you want to do it.
744+
745+ """
746+ channel = self .get_channel_slug (channel )
747+ session = self .ssession ()
748+ try :
749+ session .query (ChannelValues ).filter (ChannelValues .channel == channel ).delete ()
750+ session .commit ()
751+ except SQLAlchemyError :
752+ session .rollback ()
753+ raise
754+ finally :
755+ self .ssession .remove ()
756+
727757 # PLUGIN FUNCTIONS
728758
729759 def set_plugin_value (self , plugin , key , value ):
@@ -842,6 +872,28 @@ def get_plugin_value(self, plugin, key, default=None):
842872 finally :
843873 self .ssession .remove ()
844874
875+ def forget_plugin (self , plugin ):
876+ """Remove all of a plugin's stored values.
877+
878+ :param str plugin: the name of the plugin for which to delete values
879+ :raise ~sqlalchemy.exc.SQLAlchemyError: if there is a database error
880+
881+ .. important::
882+
883+ This is a Nuclear Option. Be *very* sure that you want to do it.
884+
885+ """
886+ plugin = plugin .lower ()
887+ session = self .ssession ()
888+ try :
889+ session .query (PluginValues ).filter (PluginValues .plugin == plugin ).delete ()
890+ session .commit ()
891+ except SQLAlchemyError :
892+ session .rollback ()
893+ raise
894+ finally :
895+ self .ssession .remove ()
896+
845897 # NICK AND CHANNEL FUNCTIONS
846898
847899 def get_nick_or_channel_value (self , name , key , default = None ):
0 commit comments