Skip to content

Commit 285a946

Browse files
PIG208timabbott
authored andcommitted
bot_server: Add support for running botserver from bots registry.
1 parent 745f2cd commit 285a946

File tree

2 files changed

+43
-9
lines changed

2 files changed

+43
-9
lines changed

zulip_botserver/tests/test_server.py

+32
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from typing import Any, Dict
99
from unittest import mock
1010

11+
from zulip_bots.finder import metadata
1112
from zulip_bots.lib import BotHandler
1213
from zulip_botserver import server
1314
from zulip_botserver.input_parameters import parse_args
@@ -273,6 +274,37 @@ def test_load_lib_modules(self) -> None:
273274
).as_posix()
274275
module = server.load_lib_modules([path])[path]
275276

277+
@mock.patch("zulip_botserver.server.app")
278+
@mock.patch("sys.argv", ["zulip-botserver", "--config-file", "/foo/bar/baz.conf"])
279+
def test_load_from_registry(self, mock_app: mock.Mock) -> None:
280+
packaged_bot_module = mock.MagicMock(__version__="1.0.0", __file__="asd")
281+
packaged_bot_entrypoint = metadata.EntryPoint(
282+
"packaged_bot", "module_name", "zulip_bots.registry"
283+
)
284+
bots_config = {
285+
"packaged_bot": {
286+
"email": "[email protected]",
287+
"key": "value",
288+
"site": "http://localhost",
289+
"token": "abcd1234",
290+
}
291+
}
292+
293+
with mock.patch(
294+
"zulip_botserver.server.read_config_file", return_value=bots_config
295+
), mock.patch("zulip_botserver.server.lib.ExternalBotHandler", new=mock.Mock()), mock.patch(
296+
"zulip_bots.finder.metadata.EntryPoint.load",
297+
return_value=packaged_bot_module,
298+
), mock.patch(
299+
"zulip_bots.finder.metadata.entry_points",
300+
return_value=(packaged_bot_entrypoint,),
301+
):
302+
server.main()
303+
304+
mock_app.config.__setitem__.assert_any_call(
305+
"BOTS_LIB_MODULES", {"packaged_bot": packaged_bot_module}
306+
)
307+
276308

277309
if __name__ == "__main__":
278310
unittest.main()

zulip_botserver/zulip_botserver/server.py

+11-9
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
from zulip import Client
1818
from zulip_bots import lib
19-
from zulip_bots.finder import import_module_from_source
19+
from zulip_bots.finder import import_module_from_source, import_module_from_zulip_bot_registry
2020
from zulip_botserver.input_parameters import parse_args
2121

2222

@@ -122,15 +122,17 @@ def load_lib_modules(available_bots: List[str]) -> Dict[str, ModuleType]:
122122
lib_module = import_module(module_name)
123123
bots_lib_module[bot] = lib_module
124124
except ImportError:
125-
error_message = (
126-
'Error: Bot "{}" doesn\'t exist. Please make sure '
127-
"you have set up the botserverrc file correctly.\n".format(bot)
128-
)
129-
if bot == "api":
130-
error_message += (
131-
"Did you forget to specify the bot you want to run with -b <botname> ?"
125+
_, bots_lib_module[bot] = import_module_from_zulip_bot_registry(bot)
126+
if bots_lib_module[bot] is None:
127+
error_message = (
128+
f'Error: Bot "{bot}" doesn\'t exist. Please make sure '
129+
"you have set up the botserverrc file correctly.\n"
132130
)
133-
sys.exit(error_message)
131+
if bot == "api":
132+
error_message += (
133+
"Did you forget to specify the bot you want to run with -b <botname> ?"
134+
)
135+
sys.exit(error_message)
134136
return bots_lib_module
135137

136138

0 commit comments

Comments
 (0)