Skip to content

Commit

Permalink
bots: Indicate source of bot (from source/module/registry) upon startup.
Browse files Browse the repository at this point in the history
Amend tests to include new parameter.
  • Loading branch information
neiljp authored and PIG208 committed Jul 21, 2021
1 parent a232d12 commit a788f50
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 6 deletions.
20 changes: 17 additions & 3 deletions zulip_bots/zulip_bots/finder.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,17 +30,31 @@ class DuplicateRegisteredBotName(Exception):
pass


def import_module_from_zulip_bot_registry(name: str) -> Any:
def import_module_from_zulip_bot_registry(name: str) -> Tuple[str, Any]:
registered_bots = importlib.metadata.entry_points()["zulip_bots.registry"]
matching_bots = [bot for bot in registered_bots if bot.name == name]

if len(matching_bots) == 1: # Unique matching entrypoint
return matching_bots[0].load()
"""We expect external bots to be registered using entry_points in the
group "zulip_bots.registry", where the name of the entry point should
match the name of the module containing the bot handler and the value
of it should be the package containing the bot handler module.
"""
bot = matching_bots[0]
bot_name = bot.name
bot_module = bot.load()
bot_version = bot_module.__version__

if bot_version is not None:
return f"{bot_name}: {bot_version}", bot_module
else:
return f"editable package: {bot_name}", bot_module

if len(matching_bots) > 1:
raise DuplicateRegisteredBotName(name)

return None # no matches in registry
return "", None # no matches in registry


def resolve_bot_path(name: str) -> Optional[Tuple[Path, str]]:
Expand Down
3 changes: 2 additions & 1 deletion zulip_bots/zulip_bots/lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,7 @@ def run_message_handler_for_bot(
config_file: str,
bot_config_file: str,
bot_name: str,
bot_source: str,
) -> Any:
"""
lib_module is of type Any, since it can contain any bot's
Expand Down Expand Up @@ -473,7 +474,7 @@ def run_message_handler_for_bot(
message_handler = prepare_message_handler(bot_name, restricted_client, lib_module)

if not quiet:
print("Running {} Bot:".format(bot_details["name"]))
print("Running {} Bot (from {}):".format(bot_details["name"], bot_source))
if bot_details["description"] != "":
print("\n\t{}".format(bot_details["description"]))
if hasattr(message_handler, "usage"):
Expand Down
5 changes: 4 additions & 1 deletion zulip_bots/zulip_bots/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ def main() -> None:

if args.registry:
try:
lib_module = finder.import_module_from_zulip_bot_registry(args.bot)
bot_source, lib_module = finder.import_module_from_zulip_bot_registry(args.bot)
except finder.DuplicateRegisteredBotName:
print("ERROR: Found duplicate entries for bot name in zulip bot registry. Exiting now.")
sys.exit(1)
Expand Down Expand Up @@ -148,10 +148,12 @@ def main() -> None:
)
print(dep_err_msg.format(bot_name=bot_name, deps_list=deps_list))
sys.exit(1)
bot_source = "source"
else:
lib_module = finder.import_module_by_name(args.bot)
if lib_module:
bot_name = lib_module.__name__
bot_source = "named module"
if args.provision:
print("ERROR: Could not load bot's module for '{}'. Exiting now.")
sys.exit(1)
Expand All @@ -176,6 +178,7 @@ def main() -> None:
bot_config_file=args.bot_config_file,
quiet=args.quiet,
bot_name=bot_name,
bot_source=bot_source,
)
except NoBotConfigException:
print(
Expand Down
1 change: 1 addition & 0 deletions zulip_bots/zulip_bots/tests/test_lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,7 @@ def test_message(message, flags):
config_file=None,
bot_config_file=None,
bot_name="testbot",
bot_source="bot code location",
)

def test_upload_file(self):
Expand Down
8 changes: 7 additions & 1 deletion zulip_bots/zulip_bots/tests/test_run.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ class TestDefaultArguments(TestCase):

our_dir = os.path.dirname(__file__)
path_to_bot = os.path.abspath(os.path.join(our_dir, "../bots/giphy/giphy.py"))
packaged_bot_entrypoint = EntryPoint("packaged_bot", "module_name", None)
packaged_bot_distro = Distribution("packaged-bot-source", "1.0.0")
packaged_bot_entrypoint = EntryPoint(
"packaged_bot", "module_name", None, distro=packaged_bot_distro
)

@patch("sys.argv", ["zulip-run-bot", "giphy", "--config-file", "/foo/bar/baz.conf"])
@patch("zulip_bots.run.run_message_handler_for_bot")
Expand All @@ -32,6 +35,7 @@ def test_argument_parsing_with_bot_name(
config_file="/foo/bar/baz.conf",
bot_config_file=None,
lib_module=mock.ANY,
bot_source="source",
quiet=False,
)

Expand All @@ -48,6 +52,7 @@ def test_argument_parsing_with_bot_path(
config_file="/foo/bar/baz.conf",
bot_config_file=None,
lib_module=mock.ANY,
bot_source="source",
quiet=False,
)

Expand All @@ -69,6 +74,7 @@ def test_argument_parsing_with_zulip_bot_registry(
config_file="/foo/bar/baz.conf",
bot_config_file=None,
lib_module=mock.ANY,
bot_source="packaged-bot-source: 1.0.0",
quiet=False,
)

Expand Down

0 comments on commit a788f50

Please sign in to comment.