Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 42 additions & 2 deletions sopel/plugins/rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -316,15 +316,55 @@ def has_url_callback(self, label, plugin=None):
return _has_labeled_rule(self._url_callbacks, label, plugin)

def get_all_commands(self):
"""Retrieve all the registered commands, by plugin."""
"""Retrieve all the registered commands, by plugin.

:return: a list of 2-value tuples as ``(key, value)``, where each key
is a plugin name, and the value is a ``dict`` of its
:term:`commands <Command>`
"""
# expose a copy of the registered commands
return self._commands.items()

def get_all_nick_commands(self):
"""Retrieve all the registered nick commands, by plugin."""
"""Retrieve all the registered nick commands, by plugin.

:return: a list of 2-value tuples as ``(key, value)``, where each key
is a plugin name, and the value is a ``dict`` of its
:term:`nick commands <Nick command>`
"""
# expose a copy of the registered commands
return self._nick_commands.items()

def get_all_action_commands(self):
"""Retrieve all the registered action commands, by plugin.

:return: a list of 2-value tuples as ``(key, value)``, where each key
is a plugin name, and the value is a ``dict`` of its
:term:`action commands <Action command>`
"""
# expose a copy of the registered action commands
return self._action_commands.items()

def get_all_generic_rules(self):
"""Retrieve all the registered generic rules, by plugin.

:return: a list of 2-value tuples as ``(key, value)``, where each key
is a plugin name, and the value is a ``list`` of its
:term:`generic rules <Generic rule>`
"""
# expose a copy of the registered generic rules
return self._rules.items()

def get_all_url_callbacks(self):
"""Retrieve all the registered URL callbacks, by plugin.

:return: a list of 2-value tuples as ``(key, value)``, where each key
is a plugin name, and the value is a ``list`` of its
:term:`URL callbacks <URL callback>`
"""
# expose a copy of the registered generic rules
return self._url_callbacks.items()

def get_triggered_rules(self, bot, pretrigger):
"""Get triggered rules with their match objects, sorted by priorities.

Expand Down
48 changes: 48 additions & 0 deletions test/plugins/test_plugins_rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,14 @@ def test_manager_rule(mockbot):
assert result_rule == rule
assert result_match.group(0) == 'Hello, world'

assert list(manager.get_all_commands()) == []
assert list(manager.get_all_nick_commands()) == []
assert list(manager.get_all_action_commands()) == []
assert list(manager.get_all_generic_rules()) == [
('testplugin', [rule]),
]
assert list(manager.get_all_url_callbacks()) == []


def test_manager_find(mockbot):
regex = re.compile(r'\w+')
Expand Down Expand Up @@ -89,6 +97,14 @@ def test_manager_find(mockbot):
assert result_rule == rule
assert result_match.group(0) == 'world', 'The second must match on "world"'

assert list(manager.get_all_commands()) == []
assert list(manager.get_all_nick_commands()) == []
assert list(manager.get_all_action_commands()) == []
assert list(manager.get_all_generic_rules()) == [
('testplugin', [rule]),
]
assert list(manager.get_all_url_callbacks()) == []


def test_manager_search(mockbot):
regex = re.compile(r'\w+')
Expand All @@ -111,6 +127,14 @@ def test_manager_search(mockbot):
assert result_rule == rule
assert result_match.group(0) == 'Hello'

assert list(manager.get_all_commands()) == []
assert list(manager.get_all_nick_commands()) == []
assert list(manager.get_all_action_commands()) == []
assert list(manager.get_all_generic_rules()) == [
('testplugin', [rule]),
]
assert list(manager.get_all_url_callbacks()) == []


def test_manager_command(mockbot):
command = rules.Command('hello', prefix=r'\.', plugin='testplugin')
Expand All @@ -134,6 +158,9 @@ def test_manager_command(mockbot):
('testplugin', {'hello': command}),
]
assert list(manager.get_all_nick_commands()) == []
assert list(manager.get_all_action_commands()) == []
assert list(manager.get_all_generic_rules()) == []
assert list(manager.get_all_url_callbacks()) == []


def test_manager_nick_command(mockbot):
Expand All @@ -158,6 +185,9 @@ def test_manager_nick_command(mockbot):
assert list(manager.get_all_nick_commands()) == [
('testplugin', {'hello': command}),
]
assert list(manager.get_all_action_commands()) == []
assert list(manager.get_all_generic_rules()) == []
assert list(manager.get_all_url_callbacks()) == []


def test_manager_action_command(mockbot):
Expand All @@ -180,6 +210,11 @@ def test_manager_action_command(mockbot):

assert list(manager.get_all_commands()) == []
assert list(manager.get_all_nick_commands()) == []
assert list(manager.get_all_action_commands()) == [
('testplugin', {'hello': command}),
]
assert list(manager.get_all_generic_rules()) == []
assert list(manager.get_all_url_callbacks()) == []


def test_manager_rule_and_command(mockbot):
Expand All @@ -204,6 +239,11 @@ def test_manager_rule_and_command(mockbot):
('testplugin', {'hello': command}),
]
assert list(manager.get_all_nick_commands()) == []
assert list(manager.get_all_action_commands()) == []
assert list(manager.get_all_generic_rules()) == [
('testplugin', [rule]),
]
assert list(manager.get_all_url_callbacks()) == []


def test_manager_url_callback(mockbot):
Expand Down Expand Up @@ -233,6 +273,14 @@ def test_manager_url_callback(mockbot):
assert manager.check_url_callback(mockbot, 'https://example.com/test')
assert not manager.check_url_callback(mockbot, 'https://not-example.com/')

assert list(manager.get_all_commands()) == []
assert list(manager.get_all_nick_commands()) == []
assert list(manager.get_all_action_commands()) == []
assert list(manager.get_all_generic_rules()) == []
assert list(manager.get_all_url_callbacks()) == [
('testplugin', [rule]),
]


def test_manager_unregister_plugin(mockbot):
regex = re.compile('.*')
Expand Down