diff --git a/pytest_gui_status/status_gui/gui_backend.py b/pytest_gui_status/status_gui/gui_backend.py index 66398d3..379b220 100644 --- a/pytest_gui_status/status_gui/gui_backend.py +++ b/pytest_gui_status/status_gui/gui_backend.py @@ -8,7 +8,6 @@ import humanfriendly import os.path from ..utils import s from ..utils import REDIS_PORT -from PyQt4.QtGui import QApplication class Controller(htmlPy.Object): @@ -20,35 +19,12 @@ class Controller(htmlPy.Object): "end": "Finished Tests" } - dict_tmpl = { - "default": "index.html", - "minimal": "minimal.html", - } - - dict_tmpl_size = { - "default": (150, 80), - "minimal": (50, 50) - } - def __init__(self, app_gui): super(Controller, self).__init__() self.i = 0 self.app_gui = app_gui self.last_state = None - - self.tmpl_name_full = self.dict_tmpl.get(self.app_gui.tmpl_name) - if self.tmpl_name_full is None: - raise TypeError("template name must be valid, one of these: {allowed_tmpl_names}".format( - allowed_tmpl_names=(", ".join(self.dict_tmpl.keys())))) - - # set correct width, height - # self.app_gui.window.minimumWidth, self.app_gui.window.minimumHeight = (0, 0) - self.app_gui.width, self.app_gui.height = self.dict_tmpl_size.get(self.app_gui.tmpl_name) - - screen_geo = QApplication.desktop().availableGeometry() - screen_topright = screen_geo.topRight() - self.app_gui.x_pos = (screen_topright.x() - 20) - self.app_gui.width - self.app_gui.y_pos = (screen_topright.y() + 20) + # Initialize the class here, if required. @htmlPy.Slot() def redraw(self): @@ -102,8 +78,6 @@ class Controller(htmlPy.Object): dict_state["skip"] = s(redis_db.lrange("{hash_a}_skip".format(hash_a=hash_dir_name), 0, -1)) if (not self.last_state) or (self.last_state != dict_state): - self.app_gui.title = u"{dir_name_topfolder} - Test Status".format( - dir_name_topfolder=dict_state["dir_name_topfolder"]) - self.app_gui.html = render_template(self.app_gui, self.tmpl_name_full, dict_state) + self.app_gui.html = render_template(self.app_gui, "index.html", dict_state) self.last_state = dict_state diff --git a/pytest_gui_status/status_gui/gui_frontend.py b/pytest_gui_status/status_gui/gui_frontend.py index 4d0223c..add12fa 100644 --- a/pytest_gui_status/status_gui/gui_frontend.py +++ b/pytest_gui_status/status_gui/gui_frontend.py @@ -1,46 +1,36 @@ import htmlPy import os - +import sys +from PyQt4.QtGui import QApplication import PyQt4.QtCore as QtCore -import argparse # Import back-end functionalities from gui_backend import Controller def main(): - arg_parser = argparse.ArgumentParser() - arg_parser.add_argument("--dir_name", help="root directory where py.test was executed") - arg_parser.add_argument("--minimal", help="use minimal template", action="store_true") - parsed_args = arg_parser.parse_args() - - dir_name_raw = parsed_args.dir_name - if dir_name_raw is None: + if len(sys.argv) > 1: + dir_name_raw = sys.argv[1] + else: dir_name_raw = "." dir_name = os.path.abspath(dir_name_raw) - if parsed_args.minimal: - app_tmpl = "minimal" - else: - app_tmpl = "default" - # GUI initializations - app = htmlPy.AppGUI(title=u"to_be_set_later", - developer_mode=True, width=1, height=1) - - app.window.setWindowFlags(QtCore.Qt.WindowTitleHint) - # app.window.setWindowFlags(app.window.windowFlags() & ~QtCore.Qt.WindowMaximizeButtonHint) - app.window.setWindowFlags(app.window.windowFlags() | QtCore.Qt.WindowStaysOnTopHint) + app = htmlPy.AppGUI(title=u"{dir_name} - Test Status".format(dir_name=dir_name), + developer_mode=True, width=150, height=80) + app.window.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) + screen_geo = QApplication.desktop().availableGeometry() + screen_topright = screen_geo.topRight() + app.x_pos = (screen_topright.x() - 20) - app.width + app.y_pos = (screen_topright.y() + 20) # GUI configarg BASE_DIR = os.path.abspath(os.path.dirname(__file__)) app.static_path = os.path.join(BASE_DIR, "static/") app.template_path = os.path.join(BASE_DIR, "tmpl/") app.dir_name = dir_name - app.tmpl_name = app_tmpl # Register back-end functionalities - # allow minimal tmpl with sys.arg app_backend = Controller(app) app.bind(app_backend) diff --git a/pytest_gui_status/status_gui/tmpl/index.html b/pytest_gui_status/status_gui/tmpl/index.html index 6762b7f..d0722dd 100644 --- a/pytest_gui_status/status_gui/tmpl/index.html +++ b/pytest_gui_status/status_gui/tmpl/index.html @@ -2,7 +2,7 @@ - + {{dir_name}} - - - - -
- -
- {{ dir_name_topfolder }} -
-
- {% if state == "end" %} -
- {% if (fail|length) == 0 %} -
- {% else %} -
- {% endif %} -
- {% else %} -
- {% endif %} -
-
- - diff --git a/pytest_gui_status/status_gui/todo.txt b/pytest_gui_status/status_gui/todo.txt index 97a7a1e..d613a3c 100644 --- a/pytest_gui_status/status_gui/todo.txt +++ b/pytest_gui_status/status_gui/todo.txt @@ -1,12 +1,12 @@ Todo ------ -6. Allow config for template 1. test template path available after install 2. test option --show_status_gui available 3. add details of --show_status_gui in addoption 4. Release on pypi 5. Add well-explained readme +6. Allow config for template 7. use logging.debug / log file for more prints 8. Tests with setup/teardown/class when needed diff --git a/pytest_gui_status/status_plugin/plugin.py b/pytest_gui_status/status_plugin/plugin.py index 018eac9..5a2ef71 100644 --- a/pytest_gui_status/status_plugin/plugin.py +++ b/pytest_gui_status/status_plugin/plugin.py @@ -71,7 +71,7 @@ class Helpers(object): Helpers.modify_last_updated(dir_name) @staticmethod - def start_gui(dir_name, extra_args=None): + def start_gui(dir_name): ''' Init status_gui at start ''' @@ -88,9 +88,6 @@ class Helpers(object): if not (existing_gui_pid and psutil.pid_exists(existing_gui_pid)): norm_dir_name = os.path.normpath(dir_name) command_status_gui = command_status_gui_gen.format(norm_dir_name=norm_dir_name) - if extra_args: - command_status_gui = command_status_gui + " " + extra_args - # print("Starting gui as: {cmd_gui}".format(cmd_gui=command_status_gui)) gui_popen_obj = subprocess.Popen(command_status_gui) gui_pid = gui_popen_obj.pid redis_db.set("{hash_a}_gui_pid".format(hash_a=hash_dir_name), gui_pid) @@ -205,8 +202,7 @@ class PYTEST_DATA(object): def pytest_addoption(parser): - parser.addoption("--gui", dest="show_status_gui", action="store_true") - parser.addoption("--gui_minimal", dest="show_status_gui_minimal", action="store_true") + parser.addoption("--show_status_gui", dest="show_status_gui", action="store_true") def pytest_configure(config): @@ -222,8 +218,6 @@ def pytest_sessionstart(session): if config.getoption("show_status_gui"): Helpers.start_gui(PYTEST_DATA.data["dir_name_start"]) - elif config.getoption("show_status_gui_minimal"): - Helpers.start_gui(PYTEST_DATA.data["dir_name_start"], extra_args="--minimal") def pytest_collectstart(collector): diff --git a/pytest_gui_status/utils.py b/pytest_gui_status/utils.py index b27be48..f13dfe4 100644 --- a/pytest_gui_status/utils.py +++ b/pytest_gui_status/utils.py @@ -14,7 +14,7 @@ command_redis_server = command_redis_server_gen.format(REDIS_PATH=REDIS_PATH, REDIS_ARGS=REDIS_ARGS, REDIS_PORT=REDIS_PORT) -command_status_gui_gen = "pytest_gui_status --dir_name=\"{norm_dir_name}\"" +command_status_gui_gen = "pytest_gui_status \"{norm_dir_name}\"" def s(input_): diff --git a/readme.md b/readme.md index 56f75b9..6d731bd 100644 --- a/readme.md +++ b/readme.md @@ -15,9 +15,9 @@ Pytest Status GUI Also, install `PySide` and `Redis` manually via apt-get or installers. #### How to use? -`py.test --gui` +`py.test --show_status_gui` -**Recommended** : Use with [pytest-watch][ptw_gh_link] using `ptw -- --gui` +**Recommended** : Use with [pytest-watch][ptw_gh_link] using `ptw -- --show_status_gui` pytest-watch re-runs py.test on any change to your code @@ -49,13 +49,11 @@ The result is that you get some nifty **test status windows that update as you k ##### Template: ###### Minimal Window: -Use `--gui_minimal` instead of `--gui` i.e. call using `py.test --gui_minimal` - -The minimal window is closer to what pytddmon does, but is somewhat different. It shows yellow while tests are running or being collected, and only full red or full green bar when tests complete. +//TODO ###### Use your own template: -// Not Supported now, maybe I can add if someone needs it. +//TODO ##### Redis: ###### Custom Redis Command: