def test_getting_nonexistent_items(): """ Try getting items which do not exist """ tracker = ObjectTracker() try: tracker.get_window_by_id("foo") assert False, "Expected NameError exception, but one was not thrown" # pylint: disable=broad-except except Exception as error: check_exception(error, "No such object: foo!", NameError) try: tracker.get_pane_by_id("foo") assert False, "Expected NameError exception, but one was not thrown" # pylint: disable=broad-except except Exception as error: check_exception(error, "No such object: foo!", NameError) tracker.add_pane(Pane("foo")) try: tracker.get_window_by_id("foo") assert False, "Expected TypeError exception, but one was not thrown" # pylint: disable=broad-except except Exception as error: check_exception(error, "Identity provided is not a window!", TypeError) tracker.add_window(Window("foo2")) try: tracker.get_pane_by_id("foo2") assert False, "Expected TypeError exception, but one was not thrown" # pylint: disable=broad-except except Exception as error: check_exception(error, "Identity provided is not a pane!", TypeError)
def __init__(self, identity: str, name: str, is_first: bool = False) -> "Window": """ Sets up details about the window Parameters ---------- identity : string A unique ID representing this window name : string The name of the window is_first : boolean Is this the first window that was created? """ self.identity = identity self.name = name self.first = is_first self.panes = [] self.base_width = 0 self.base_height = 0 self.panes_added = 0 self.last_pane = None self.objects = ObjectTracker() self.objects.add_window(self)
def __init__(self, identity: str, window: "Window", direction: str, is_first: bool = False) -> "Pane": """ Sets up details about the pane Parameters ---------- identity : string A unique ID representing this pane window : Window The Window object this pane belongs to direction : string|None Which direction to split this pane - 'h' for horizontal, 'v' for vertical is_first : bool Is this the first pane that was created? """ self.identity = identity self.window = window self.direction = direction self.is_first = is_first self.session_name = None self.command = "" self.split_from = None self.width = 0 self.height = 0 self.number = None self.parent_number = None self.start_dir = None self.objects = ObjectTracker() self.objects.add_pane(self)
def test_adding_mismatched_types(): """ Try adding a pane as a window, or vice versa """ tracker = ObjectTracker() try: tracker.add_window(Pane("foo")) assert False, "Expected TypeError exception, but one was not thrown" # pylint: disable=broad-except except Exception as error: check_exception(error, "Object provided is not a window!", TypeError) try: tracker.add_pane(Window("foo")) assert False, "Expected TypeError exception, but one was not thrown" # pylint: disable=broad-except except Exception as error: check_exception(error, "Object provided is not a pane!", TypeError)
def test_adding_non_classes(): """ Try adding an integer as a window, etc. """ tracker = ObjectTracker() try: tracker.add_pane(Integer(5)) assert False, "Expected TypeError exception, but one was not thrown" # pylint: disable=broad-except except Exception as error: check_exception(error, "Object provided is not a pane!", TypeError) try: tracker.add_window(Integer(3)) assert False, "Expected TypeError exception, but one was not thrown" # pylint: disable=broad-except except Exception as error: check_exception(error, "Object provided is not a window!", TypeError)
def test_adding_duplicate_ids(): """ Try adding two items with the same ID """ tracker = ObjectTracker() tracker.add_pane(Pane("foo")) try: tracker.add_pane(Pane("foo")) assert False, "Expected ValueError exception, but one was not thrown" # pylint: disable=broad-except except Exception as error: check_exception(error, 'Object ID "foo" is already in use!', ValueError) try: tracker.add_window(Window("foo")) assert False, "Expected ValueError exception, but one was not thrown" # pylint: disable=broad-except except Exception as error: check_exception(error, 'Object ID "foo" is already in use!', ValueError)
def test_adding_and_retrieving(): """ Try adding two items with the same ID """ tracker = ObjectTracker() pane1 = Pane("pane1") tracker.add_pane(pane1) pane2 = Pane("pane2") tracker.add_pane(pane2) window1 = Window("window1") tracker.add_window(window1) window2 = Window("window2") tracker.add_window(window2) ids = ["pane1", "pane2", "window1", "window2"] for expected in ids: if "pane" in expected: actual = tracker.get_pane_by_id(expected).identity else: actual = tracker.get_window_by_id(expected).identity assert actual == expected, "Retrieved {0} does not match!".format( expected)
def __init__(self, session_name: str, starting_directory: str = "", detach: bool = True) -> "TmuxBuilder": """ Sets up details about the tmux builder Parameters ---------- session_name : string The name of the session to create starting_directory : string The directory to base all windows/panes out of detach : bool Whether to detach this session after creatio """ self.session_name = session_name self.objects = ObjectTracker() self.windows = [] self.start_dir = starting_directory self.detach = bool(detach) self.__get_terminal_size()
def setup(): """ Reset the object tracker windows and panes """ ObjectTracker().reset()
def setup(): """ Reset the object tracker """ ObjectTracker().reset()
def set_session_parameters( session: str, session_start_directory: str, windows: list ) -> str: """ Sets session data based off of parameters Parameters ---------- session: string The name of the session session_start_directory : string The path to the session's starting directory windows : list A list of window information Each needs: - identity - number - title - postfix (appended to title in window list) - dir - layout - panes (list of objects) - identity - number - dir - command [optional] - parent [optional] Returns ------- string The window list to analyze """ inject_session_data(SESSION_INITIAL_DIR_KEY, session_start_directory) layout = "" for window in windows: win_object = ( FakeWindow(window["identity"]) .set_session_name(session) .set_name(window["title"]) .set_number(window["number"]) .set_layout(window["layout"]) .set_directory(window.get("dir", session_start_directory)) ) win_object.inject() ObjectTracker().add_window(win_object) for pane in window["panes"]: pane_object = ( FakePane(pane["identity"]) .set_session_name(session) .set_number(pane["number"]) .set_window(win_object) .set_directory( pane.get("dir", window.get("dir", session_start_directory)) ) .set_command(pane.get("command", "")) ) if "parent" in pane: pane_object.set_split_from(pane["parent"]) pane_object.inject() ObjectTracker().add_pane(pane_object) layout += "{0}: {1}{2} [200x60] ({3} panes) [{4}] @{0}\n".format( window["number"], window["title"], window["postfix"], len(window["panes"]), window["layout"], ) inject_session_data(WINDOW_LIST_KEY, layout) return layout