[core/output] Add initial version of i3bar output
Add output handler for i3bar protocol and add some tests for it. Right now, it only support start and end. see #23
This commit is contained in:
parent
a2c6214baa
commit
6f52825ef0
5 changed files with 59 additions and 6 deletions
|
@ -19,7 +19,8 @@ class Engine(object):
|
||||||
This class connects input/output, instantiates all
|
This class connects input/output, instantiates all
|
||||||
required modules and drives the "event loop"
|
required modules and drives the "event loop"
|
||||||
"""
|
"""
|
||||||
def __init__(self, config):
|
def __init__(self, config, output=None):
|
||||||
|
self._output = output
|
||||||
self._running = True
|
self._running = True
|
||||||
self._modules = []
|
self._modules = []
|
||||||
self.load_modules(config.modules())
|
self.load_modules(config.modules())
|
||||||
|
@ -45,7 +46,10 @@ class Engine(object):
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
"""Start the event loop"""
|
"""Start the event loop"""
|
||||||
|
self._output.start()
|
||||||
while self.running():
|
while self.running():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
self._output.stop()
|
||||||
|
|
||||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
||||||
|
|
21
bumblebee/output.py
Normal file
21
bumblebee/output.py
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# pylint: disable=R0201
|
||||||
|
|
||||||
|
"""Output classes"""
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import json
|
||||||
|
|
||||||
|
class I3BarOutput(object):
|
||||||
|
"""Manage output according to the i3bar protocol"""
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
"""Print start preamble for i3bar protocol"""
|
||||||
|
sys.stdout.write(json.dumps({"version": 1, "click_events": True}) + "[\n")
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
"""Finish i3bar protocol"""
|
||||||
|
sys.stdout.write("]\n")
|
||||||
|
|
||||||
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
|
@ -1,3 +1,3 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
find . -name "*.py"|xargs pylint
|
find . -name "*.py"|xargs pylint --disable=R0903
|
||||||
|
|
|
@ -10,8 +10,8 @@ class TestEngine(unittest.TestCase):
|
||||||
self.testModule = "test"
|
self.testModule = "test"
|
||||||
self.testModuleSpec = "bumblebee.modules.{}".format(self.testModule)
|
self.testModuleSpec = "bumblebee.modules.{}".format(self.testModule)
|
||||||
self.testModules = [
|
self.testModules = [
|
||||||
{ "module": "test", "name": "a" },
|
{"module": "test", "name": "a"},
|
||||||
{ "module": "test", "name": "b" },
|
{"module": "test", "name": "b"},
|
||||||
]
|
]
|
||||||
|
|
||||||
def test_stop(self):
|
def test_stop(self):
|
||||||
|
@ -27,8 +27,8 @@ class TestEngine(unittest.TestCase):
|
||||||
modules = self.engine.load_modules(self.testModules)
|
modules = self.engine.load_modules(self.testModules)
|
||||||
self.assertEquals(len(modules), len(self.testModules))
|
self.assertEquals(len(modules), len(self.testModules))
|
||||||
self.assertEquals(
|
self.assertEquals(
|
||||||
[ module.__module__ for module in modules ],
|
[module.__module__ for module in modules],
|
||||||
[ self.testModuleSpec for module in modules ]
|
[self.testModuleSpec for module in modules]
|
||||||
)
|
)
|
||||||
|
|
||||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
||||||
|
|
28
tests/test_i3baroutput.py
Normal file
28
tests/test_i3baroutput.py
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
# pylint: disable=C0103,C0111
|
||||||
|
import json
|
||||||
|
import unittest
|
||||||
|
import mock
|
||||||
|
try:
|
||||||
|
from StringIO import StringIO
|
||||||
|
except ImportError:
|
||||||
|
from io import StringIO
|
||||||
|
|
||||||
|
from bumblebee.output import I3BarOutput
|
||||||
|
|
||||||
|
class TestI3BarOutput(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.output = I3BarOutput()
|
||||||
|
self.expectedStart = json.dumps({"version": 1, "click_events": True}) + "[\n"
|
||||||
|
self.expectedStop = "]\n"
|
||||||
|
|
||||||
|
@mock.patch("sys.stdout", new_callable=StringIO)
|
||||||
|
def test_start(self, stdout):
|
||||||
|
self.output.start()
|
||||||
|
self.assertEquals(self.expectedStart, stdout.getvalue())
|
||||||
|
|
||||||
|
@mock.patch("sys.stdout", new_callable=StringIO)
|
||||||
|
def test_stop(self, stdout):
|
||||||
|
self.output.stop()
|
||||||
|
self.assertEquals(self.expectedStop, stdout.getvalue())
|
||||||
|
|
||||||
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
Loading…
Reference in a new issue