bots: Require bots_details in ExternalBotHandler.
This parameter was defaulting to a dictionary, which is
a classic Python pitfall.
MODIFY
zulip_bots/zulip_bots/lib.py
zulip_bots/zulip_bots/lib.py
@@ -83,7 +83,7 @@ class StateHandler(object):
return key in self.state_
class ExternalBotHandler(object):
- def __init__(self, client, root_dir, bot_details={}):
+ def __init__(self, client, root_dir, bot_details):
# type: (Client, str, Dict[str, Any]) -> None
# Only expose a subset of our Client's functionality
try:

MODIFY
zulip_bots/zulip_bots/test_lib.py
zulip_bots/zulip_bots/test_lib.py
@@ -44,7 +44,7 @@ class BotTestCaseBase(TestCase):
# Mocking ExternalBotHandler
self.patcher = patch('zulip_bots.lib.ExternalBotHandler', autospec=True)
self.MockClass = self.patcher.start()
- self.mock_bot_handler = self.MockClass(None, None)
+ self.mock_bot_handler = self.MockClass(None, None, None)
self.mock_client = MagicMock()
self.mock_client.get_storage.return_value = {'result': 'success', 'state': {}}
self.mock_client.update_storage.return_value = {'result': 'success'}

MODIFY
zulip_botserver/zulip_botserver/server.py
zulip_botserver/zulip_botserver/server.py
@@ -54,7 +54,7 @@ def load_bot_handlers():
try:
bot_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)),
'bots', bot)
- bot_handlers[bot] = ExternalBotHandler(client, bot_dir)
+ bot_handlers[bot] = ExternalBotHandler(client, bot_dir, bot_details={})
except SystemExit:
return BadRequest("Cannot fetch user profile for bot {}, make sure you have set up the flaskbotrc "
"file correctly.".format(bot))

bots: Require bots_details in ExternalBotHandler.

This parameter was defaulting to a dictionary, which is
a classic Python pitfall.