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 committed Jul 27, 2019
1 parent 50b571e commit 1df9b05
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 8 deletions.
7 changes: 4 additions & 3 deletions zulip_bots/zulip_bots/finder.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,18 @@ def import_module_by_name(name: Text) -> Any:
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 = entrypoints.get_group_all('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()
bot = matching_bots[0]
return "{}: {}".format(bot.distro.name, bot.distro.version), bot.load()

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: Text) -> Optional[Tuple[Text, Text]]:
if os.path.isfile(name):
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 @@ -304,6 +304,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 @@ -334,7 +335,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']))
print(message_handler.usage())
Expand Down
7 changes: 5 additions & 2 deletions zulip_bots/zulip_bots/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,16 +123,18 @@ def main() -> None:
" zulip-run-bot {bot_name} --provision")
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)
else:
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 as e:
print("ERROR: Found duplicate entries for bot name in zulip bot registry. Exiting now.")
sys.exit(1)
Expand All @@ -158,7 +160,8 @@ def main() -> None:
config_file=args.config_file,
bot_config_file=args.bot_config_file,
quiet=args.quiet,
bot_name=bot_name
bot_name=bot_name,
bot_source=bot_source,
)
except NoBotConfigException:
print('''
Expand Down
3 changes: 2 additions & 1 deletion zulip_bots/zulip_bots/tests/test_lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,8 @@ def test_message(message, flags):
quiet=True,
config_file=None,
bot_config_file=None,
bot_name='testbot')
bot_name='testbot',
bot_source='bot code location')

def test_upload_file(self):
client, handler = self._create_client_and_handler_for_file_upload()
Expand Down
6 changes: 5 additions & 1 deletion zulip_bots/zulip_bots/tests/test_run.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ 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 = entrypoints.EntryPoint("packaged_bot", "module_name", None)
packaged_bot_distro = entrypoints.Distribution("packaged-bot-source", "1.0.0")
packaged_bot_entrypoint = entrypoints.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 @@ -28,6 +29,7 @@ def test_argument_parsing_with_bot_name(self, mock_run_message_handler_for_bot:
config_file='/foo/bar/baz.conf',
bot_config_file=None,
lib_module=mock.ANY,
bot_source='source',
quiet=False)

@patch('sys.argv', ['zulip-run-bot', path_to_bot, '--config-file', '/foo/bar/baz.conf'])
Expand All @@ -41,6 +43,7 @@ def test_argument_parsing_with_bot_path(self, mock_run_message_handler_for_bot:
config_file='/foo/bar/baz.conf',
bot_config_file=None,
lib_module=mock.ANY,
bot_source='source',
quiet=False)

@patch('sys.argv', ['zulip-run-bot', 'packaged_bot', '--config-file', '/foo/bar/baz.conf'])
Expand All @@ -56,6 +59,7 @@ def test_argument_parsing_with_zulip_bot_registry(self, mock_run_message_handler
config_file='/foo/bar/baz.conf',
bot_config_file=None,
lib_module=mock.ANY,
bot_source='packaged-bot-source: 1.0.0',
quiet=False)

def test_adding_bot_parent_dir_to_sys_path_when_bot_name_specified(self) -> None:
Expand Down

0 comments on commit 1df9b05

Please sign in to comment.