Skip to content

Commit ebbdb61

Browse files
committed
!squash latest stash commit (misc and WIP RecursionError)
1 parent a4d2105 commit ebbdb61

File tree

4 files changed

+37
-20
lines changed

4 files changed

+37
-20
lines changed

src/libtmux/common.py

+14-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
~~~~~~~~~~~~~~
66
77
"""
8+
import dataclasses
89
import logging
910
import os
1011
import re
@@ -320,6 +321,15 @@ def __len__(self) -> int:
320321
return len(self._info.keys())
321322

322323
def __getattr__(self, key: str) -> str:
324+
try:
325+
# val = self._info[self.formatter_prefix + key]
326+
val = object.__getattribute__(self, key)
327+
assert val is not None
328+
assert isinstance(val, str)
329+
return val
330+
except AttributeError:
331+
pass
332+
323333
try:
324334
val = self._info[self.formatter_prefix + key]
325335
assert val is not None
@@ -405,9 +415,12 @@ def where(self, attrs: D, first: bool = False) -> t.Union[List[O], O]:
405415

406416
# from https://github.com/serkanyersen/underscore.py
407417
def by(val: O) -> bool:
418+
val2: t.Dict[str, str] = {}
419+
if dataclasses.is_dataclass(val):
420+
val2 = dataclasses.asdict(val)
408421
for key in attrs.keys():
409422
try:
410-
if attrs[key] != val[key]:
423+
if attrs[key] != val[key] and attrs[key] != val2[key]:
411424
return False
412425
except KeyError:
413426
return False

src/libtmux/pane.py

+16-12
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@
3232

3333

3434
@dataclasses.dataclass
35-
class Pane(TmuxMappingObject):
35+
# <<<<<<< HEAD:src/libtmux/pane.py
36+
# class Pane(TmuxMappingObject):
37+
# =======
38+
class Pane:
3639
"""
3740
A :term:`tmux(1)` :term:`Pane` [pane_manual]_.
3841
@@ -118,7 +121,7 @@ class Pane(TmuxMappingObject):
118121
window_name: str = dataclasses.field(init=True, default="")
119122
pane_start_command: t.Optional[str] = dataclasses.field(init=True, default=None)
120123

121-
formatter_prefix = "pane_"
124+
formatter_prefix: str = "pane_"
122125
"""Namespace used for :class:`~libtmux.common.TmuxMappingObject`"""
123126

124127
def __post_init__(self, **kwargs: t.Any) -> None:
@@ -129,7 +132,7 @@ def __post_init__(self, **kwargs: t.Any) -> None:
129132
self.session = self.window.session
130133
self.server = self.session.server
131134

132-
self._pane_id = self.pane_id
135+
self._pane_id = kwargs.get("pane_id", self.pane_id)
133136

134137
try:
135138
info = self._info
@@ -157,6 +160,8 @@ def _info(self) -> PaneDict: # type: ignore # mypy#1362
157160

158161
# from https://github.com/serkanyersen/underscore.py
159162
def by(val: PaneDict) -> bool:
163+
if dataclasses.is_dataclass(val):
164+
val = dataclasses.asdict(val)
160165
for key in attrs.keys():
161166
try:
162167
if attrs[key] != val[key]:
@@ -182,7 +187,7 @@ def cmd(self, cmd: str, *args: t.Any, **kwargs: t.Any) -> tmux_cmd:
182187
:class:`Server.cmd`
183188
"""
184189
if not any(arg.startswith("-t") for arg in args):
185-
args = ("-t", self.get("pane_id")) + args
190+
args = ("-t", self.pane_id) + args
186191

187192
return self.server.cmd(cmd, *args, **kwargs)
188193

@@ -311,7 +316,7 @@ def split_window(
311316
:class:`Pane`
312317
"""
313318
return self.window.split_window(
314-
target=self.get("pane_id"),
319+
target=self.pane_id,
315320
start_directory=start_directory,
316321
attach=attach,
317322
vertical=vertical,
@@ -410,12 +415,11 @@ def select_pane(self) -> "Pane":
410415
-------
411416
:class:`pane`
412417
"""
413-
pane = self.window.select_pane(self._pane_id)
414-
if pane is None:
415-
raise exc.LibTmuxException(f"Pane not found: {self}")
416-
return pane
418+
# pane = self.window.select_pane(self._pane_id)
419+
# if pane is None:
420+
# raise exc.LibTmuxException(f"Pane not found: {self}")
421+
# return pane
422+
return self.window.select_pane(self.pane_id)
417423

418424
def __repr__(self) -> str:
419-
return "{}({} {})".format(
420-
self.__class__.__name__, self.get("pane_id"), self.window
421-
)
425+
return "{}({} {})".format(self.__class__.__name__, self.pane_id, self.window)

tests/test_server.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def test_new_session_shell(server: Server) -> None:
116116
assert mysession.get("session_name") == "test_new_session"
117117
assert server.has_session("test_new_session")
118118

119-
pane_start_command = pane.get("pane_start_command")
119+
pane_start_command = pane.pane_start_command
120120
assert pane_start_command is not None
121121

122122
if has_gte_version("3.2"):

tests/test_tmuxobject.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def test_find_where(server: Server, session: Session) -> None:
3434
# window.find_where
3535
for pane in window.panes:
3636
pane_id = pane.get("pane_id")
37-
assert pane_id is not None
37+
pane_id = pane.pane_id
3838

3939
assert window.find_where({"pane_id": pane_id}) == pane
4040
assert isinstance(window.find_where({"pane_id": pane_id}), Pane)
@@ -84,9 +84,9 @@ def test_find_where_multiple_infos(server: Server, session: Session) -> None:
8484

8585
# window.find_where
8686
for pane in window.panes:
87-
pane_id = pane.get("pane_id")
87+
pane_id = pane.pane_id
8888
assert pane_id is not None
89-
pane_tty = pane.get("pane_tty")
89+
pane_tty = pane.pane_tty
9090
assert pane_tty is not None
9191

9292
find_where = window.find_where(
@@ -137,10 +137,10 @@ def test_where(server: Server, session: Session) -> None:
137137

138138
# window.where
139139
for pane in window.panes:
140-
pane_id = pane.get("pane_id")
140+
pane_id = pane.pane_id
141141
assert pane_id is not None
142142

143-
pane_tty = pane.get("pane_tty")
143+
pane_tty = pane.pane_tty
144144
assert pane_tty is not None
145145

146146
window_panes = window.where({"pane_id": pane_id, "pane_tty": pane_tty})
@@ -181,7 +181,7 @@ def test_get_by_id(server: Server, session: Session) -> None:
181181

182182
# window.get_by_id
183183
for pane in window.panes:
184-
pane_id = pane.get("pane_id")
184+
pane_id = pane.pane_id
185185
assert pane_id is not None
186186

187187
get_pane_by_id = window.get_by_id(pane_id)

0 commit comments

Comments
 (0)