Пример #1
0
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)
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
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)
Пример #7
0
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)
Пример #8
0
    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()
Пример #9
0
def setup():
    """
    Reset the object tracker windows and panes
    """
    ObjectTracker().reset()
Пример #10
0
def setup():
    """
    Reset the object tracker
    """
    ObjectTracker().reset()
Пример #11
0
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