From 7dfac95f1e2d227b2a6d593d45c33e07a5f29425 Mon Sep 17 00:00:00 2001 From: enkore Date: Sun, 10 Mar 2013 18:24:33 +0100 Subject: [PATCH] 3.11: Add test command, invoke like this: i3pystatus test --- i3pystatus/__init__.py | 44 ++++++++++++++++++++++++++++++++------- i3pystatus/core/io.py | 7 +------ i3pystatus/core/render.py | 6 ++++++ setup.py | 2 +- 4 files changed, 45 insertions(+), 14 deletions(-) create mode 100644 i3pystatus/core/render.py diff --git a/i3pystatus/__init__.py b/i3pystatus/__init__.py index dc7a641..9e4974d 100644 --- a/i3pystatus/__init__.py +++ b/i3pystatus/__init__.py @@ -2,11 +2,13 @@ import sys import threading +import os from .core import util, io from .core.modules import Module, AsyncModule, IntervalModule, START_HOOKS from .core.settings import SettingsBase from .core.config import ConfigFinder +from .core.render import render_json __all__ = [ "SettingsBase", @@ -14,9 +16,6 @@ __all__ = [ "Status", "I3statusHandler", ] -def main(): - ConfigFinder().run_config() - class Status: def __init__(self, standalone=False, interval=1, input_stream=sys.stdin): self.standalone = standalone @@ -37,11 +36,11 @@ class Status: self.modules.append(module, *args, **kwargs) def run_command_endpoint(self): - for j in io.JSONIO(io=io.IOHandler(sys.stdin, io.DevNull()), skiplines=1).read(): - if j["command"] == "block_clicked": - module = self.modules.get_by_id(j["instance"]) + for command in io.JSONIO(io=io.IOHandler(sys.stdin, open(os.devnull,"w")), skiplines=1).read(): + if command["command"] == "block_clicked": + module = self.modules.get_by_id(command["instance"]) if module: - module.on_click(j["button"]) + module.on_click(command["button"]) def call_start_hooks(self): for hook in START_HOOKS: @@ -53,3 +52,34 @@ class Status: for module in self.modules: module.inject(j) I3statusHandler = Status + +def run_config(): + ConfigFinder().run_config() + +def test_setup(): + import i3pystatus + class TestStatus(Status): + def run(self): + self.call_start_hooks() + for module in self.modules: + + sys.stdout.write("{module}: ".format(module=module.__name__)) + sys.stdout.flush() + module.run() + output = module.output or {"full_text": "(no output)"} + print(render_json(output)) + + i3pystatus.Status = TestStatus + +def test_config(): + test_setup() + cf = ConfigFinder() + print("Using configuration file {file}".format(file=cf.get_config_path()[1])) + print("Output, would be displayed right to left in i3bar") + cf.run_config() + +def main(): + if len(sys.argv) == 2 and sys.argv[1] == "test": + test_config() + else: + run_config() diff --git a/i3pystatus/core/io.py b/i3pystatus/core/io.py index 9e32c46..a56bdea 100644 --- a/i3pystatus/core/io.py +++ b/i3pystatus/core/io.py @@ -4,11 +4,6 @@ import json import sys import threading from contextlib import contextmanager -import io - -class DevNull(io.TextIOBase): - def write(self, string): - pass class IOHandler: def __init__(self, inp=sys.stdin, out=sys.stdout): @@ -56,7 +51,7 @@ class StandaloneIO(IOHandler): """ n = -1 - proto = ('{"version":1,"bidirectional":1}', "[", "[]", ",[]", ) + proto = ('{"version":1,"bidirectional":true}', "[", "[]", ",[]", ) def __init__(self, interval=1): super().__init__() diff --git a/i3pystatus/core/render.py b/i3pystatus/core/render.py new file mode 100644 index 0000000..d45262b --- /dev/null +++ b/i3pystatus/core/render.py @@ -0,0 +1,6 @@ + +def render_json(json): + if not json.get("full_text", ""): + return "" + + return json["full_text"] diff --git a/setup.py b/setup.py index 48e7b8b..8e3d18a 100755 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ from setuptools import setup setup(name="i3pystatus", - version="3.10", + version="3.11", description="Like i3status, this generates status line for i3bar / i3wm", url="http://github.com/enkore/i3pystatus", license="MIT",