Skip to content
This repository has been archived by the owner on Mar 12, 2019. It is now read-only.

Commit

Permalink
Refactor the plugins to use the new configuration singleton
Browse files Browse the repository at this point in the history
  • Loading branch information
marvinpinto committed Aug 23, 2015
1 parent b845586 commit 7e735bb
Show file tree
Hide file tree
Showing 11 changed files with 36 additions and 69 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
env/
charlesbot.egg-info/
.coverage
development.ini
development.yaml
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ Enter something that looks like a Jira ticket and voila!

## Cool! So how do I run this thing??

First off, create a `config.ini` file similar to [config.ini.example][8].
First off, create a `config.yaml` file similar to [config.yaml.example][8].
You'll need a [Slack Bot Token][2], if you don't already have one.

You have two options to run CharlesBOT:
Expand All @@ -61,7 +61,7 @@ option for you to get going!
#### Installing from PyPI

```bash
export CHARLESBOT_SETTINGS_FILE=/path/to/your/config.ini
export CHARLESBOT_SETTINGS_FILE=/path/to/your/config.yaml
pyvenv-3.4 charlesbot-env
charlesbot-env/bin/pip install git+https://github.com/slackhq/python-slackclient.git@ba71b24603f63e54e704d0481812efcd9f7b8c14
charlesbot-env/bin/pip install charlesbot
Expand All @@ -75,7 +75,7 @@ when they publish a newer version of `slackclient`.
#### Running CharlesBOT

```bash
export CHARLESBOT_SETTINGS_FILE=/path/to/your/config.ini
export CHARLESBOT_SETTINGS_FILE=/path/to/your/config.yaml
charlesbot-env/bin/charlesbot
```

Expand All @@ -85,8 +85,8 @@ charlesbot-env/bin/charlesbot
docker run \
--rm \
-it \
-e "CHARLESBOT_SETTINGS_FILE=/config.ini" \
-v /path/to/your/config.ini:/config.ini \
-e "CHARLESBOT_SETTINGS_FILE=/config.yaml" \
-v /path/to/your/config.yaml:/config.yaml \
-v /etc/localtime:/etc/localtime:ro \
quay.io/marvin/charlesbot
```
Expand Down Expand Up @@ -165,7 +165,7 @@ See the [LICENSE](LICENSE.txt) file for license rights and limitations (MIT).
[5]: /images/help.png?raw=true
[6]: http://i.giphy.com/5xtDarmwsuR9sDRObyU.gif
[7]: https://github.com/slackhq/python-slackclient
[8]: /config.ini.example
[8]: /config.yaml.example
[9]: https://www.docker.com
[10]: /images/oncall.png?raw=true
[11]: /images/jira.png?raw=true
10 changes: 3 additions & 7 deletions charlesbot/plugins/jira/jira.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
import asyncio
from charlesbot.base_plugin import BasePlugin
from charlesbot.slack.slack_message import SlackMessage

from charlesbot.util.config import (
get_config_file_name,
read_config
)
from charlesbot.config import configuration

from charlesbot.plugins.jira.jira_helpers import (
get_jira_issue_info,
Expand All @@ -21,8 +17,8 @@ def __init__(self, slack_client):
self.load_config()

def load_config(self):
config = read_config(get_config_file_name())
self.base_url = config.get('jira', 'base_url')
config_dict = configuration.get()
self.base_url = config_dict['jira']['base_url']

@asyncio.coroutine
def process_message(self, message):
Expand Down
12 changes: 4 additions & 8 deletions charlesbot/plugins/pagerduty/pagerduty.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,7 @@
from charlesbot.base_plugin import BasePlugin
from charlesbot.util.parse import does_msg_contain_prefix
from charlesbot.slack.slack_message import SlackMessage

from charlesbot.util.config import (
get_config_file_name,
read_config
)
from charlesbot.config import configuration

from charlesbot.plugins.pagerduty.pagerduty_helpers import (
get_oncall_users,
Expand All @@ -23,9 +19,9 @@ def __init__(self, slack_client):
self.load_config()

def load_config(self):
config = read_config(get_config_file_name())
self.token = config.get('pagerduty', 'token')
self.subdomain = config.get('pagerduty', 'subdomain')
config_dict = configuration.get()
self.token = config_dict['pagerduty']['token']
self.subdomain = config_dict['pagerduty']['subdomain']

@asyncio.coroutine
def process_message(self, message):
Expand Down
9 changes: 4 additions & 5 deletions charlesbot/robot.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from charlesbot.util.config import get_config_file_name
from charlesbot.util.config import read_config
from charlesbot.util.plugins import initialize_plugins
from slackclient import SlackClient
import logging
Expand All @@ -8,15 +6,16 @@
import signal
import traceback
import functools
from charlesbot.config import configuration


class Robot(object):

def __init__(self):
self.config = read_config(get_config_file_name())
self.log = logging.getLogger(__name__)
self.token = self.config.get('main', 'slackbot_token')
self.enabled_plugins = self.config.get('main', 'enabled_plugins')
config_dict = configuration.get()
self.token = config_dict['main']['slackbot_token']
self.enabled_plugins = config_dict['main']['enabled_plugins']
self.sc = None
self.is_running = True

Expand Down
15 changes: 0 additions & 15 deletions charlesbot/util/config.py

This file was deleted.

7 changes: 3 additions & 4 deletions charlesbot/util/plugins.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,11 @@ def get_plugin_class(class_str, slack_client):
return getattr(m, class_str)(slack_client)


def initialize_plugins(slack_client, config_plugin_list_str):
def initialize_plugins(slack_client, config_plugin_list):
return_list = []
if not config_plugin_list_str:
if not config_plugin_list:
return return_list
p_list = config_plugin_list_str.split(',')
for x in p_list:
for x in config_plugin_list:
Pluginz = get_plugin_class(x, slack_client)
return_list.append(Pluginz)
return return_list
12 changes: 12 additions & 0 deletions config.yaml.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
main:
slackbot_token: 'xoxb-...'
enabled_plugins:
- 'BroadcastMessage'
- 'Help'

pagerduty:
token: 'E7px6VVr3PVHZPJq51oa'
subdomain: 'acme'

jira:
base_url: 'https://jira.atlassian.com'
Empty file removed tests/util/config/__init__.py
Empty file.
20 changes: 0 additions & 20 deletions tests/util/config/test_config.py

This file was deleted.

6 changes: 3 additions & 3 deletions tests/util/plugins/test_robot_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ def test_initialize_plugins_single(self):
with patch('charlesbot.util.plugins.get_plugin_class') as mock1:
from charlesbot.util.plugins import initialize_plugins
mock1.side_effect = self.mock_get_plugin_class
input_list = "oneplugin"
input_list = ["oneplugin"]
expected_output = ["oneplugin"]
fake_client = SlackClient("faketoken")
self.assertCountEqual(
Expand All @@ -24,7 +24,7 @@ def test_initialize_plugins_multiple(self):
with patch('charlesbot.util.plugins.get_plugin_class') as mock1:
from charlesbot.util.plugins import initialize_plugins
mock1.side_effect = self.mock_get_plugin_class
input_list = "one,two"
input_list = ["one", "two"]
expected_output = ['one', 'two']
fake_client = SlackClient("faketoken")
self.assertCountEqual(
Expand All @@ -36,7 +36,7 @@ def test_initialize_plugins_empty(self):
with patch('charlesbot.util.plugins.get_plugin_class') as mock1:
from charlesbot.util.plugins import initialize_plugins
mock1.side_effect = self.mock_get_plugin_class
input_list = ""
input_list = []
expected_output = []
fake_client = SlackClient("faketoken")
self.assertEqual(
Expand Down

0 comments on commit 7e735bb

Please sign in to comment.