Skip to content

Commit 9215f18

Browse files
committed
!squash latest stash commit (misc and WIP RecursionError)
1 parent a78e95b commit 9215f18

File tree

4 files changed

+27
-18
lines changed

4 files changed

+27
-18
lines changed

libtmux/common.py

+10-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
@@ -274,6 +275,11 @@ def __len__(self):
274275
return len(self._info.keys())
275276

276277
def __getattr__(self, key):
278+
try:
279+
return object.__getattribute__(self, key)
280+
except AttributeError:
281+
pass
282+
277283
try:
278284
return self._info[self.formatter_prefix + key]
279285
except KeyError:
@@ -338,9 +344,12 @@ def where(self, attrs, first=False):
338344

339345
# from https://github.com/serkanyersen/underscore.py
340346
def by(val) -> bool:
347+
val2 = {}
348+
if dataclasses.is_dataclass(val):
349+
val2 = dataclasses.asdict(val)
341350
for key in attrs.keys():
342351
try:
343-
if attrs[key] != val[key]:
352+
if attrs[key] != val[key] and attrs[key] != val2[key]:
344353
return False
345354
except KeyError:
346355
return False

libtmux/pane.py

+9-9
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525

2626
@dataclasses.dataclass
27-
class Pane(TmuxMappingObject, TmuxRelationalObject):
27+
class Pane:
2828
"""
2929
A :term:`tmux(1)` :term:`Pane` [pane_manual]_.
3030
@@ -97,7 +97,7 @@ class Pane(TmuxMappingObject, TmuxRelationalObject):
9797
pane_start_command: Optional[str] = dataclasses.field(init=True, default=None)
9898

9999
#: namespace used :class:`~libtmux.common.TmuxMappingObject`
100-
formatter_prefix = "pane_"
100+
formatter_prefix: str = "pane_"
101101

102102
def __post_init__(self, **kwargs):
103103
# if not window:
@@ -107,7 +107,7 @@ def __post_init__(self, **kwargs):
107107
self.session = self.window.session
108108
self.server = self.session.server
109109

110-
self._pane_id = self.pane_id
110+
self._pane_id = kwargs.get("pane_id", self.pane_id)
111111

112112
try:
113113
info = self._info
@@ -135,6 +135,8 @@ def _info(self):
135135

136136
# from https://github.com/serkanyersen/underscore.py
137137
def by(val) -> bool:
138+
if dataclasses.is_dataclass(val):
139+
val = dataclasses.asdict(val)
138140
for key in attrs.keys():
139141
try:
140142
if attrs[key] != val[key]:
@@ -160,7 +162,7 @@ def cmd(self, cmd, *args, **kwargs):
160162
:class:`Server.cmd`
161163
"""
162164
if not any(arg.startswith("-t") for arg in args):
163-
args = ("-t", self.get("pane_id")) + args
165+
args = ("-t", self.pane_id) + args
164166

165167
return self.server.cmd(cmd, *args, **kwargs)
166168

@@ -247,7 +249,7 @@ def split_window(
247249
:class:`Pane`
248250
"""
249251
return self.window.split_window(
250-
target=self.get("pane_id"),
252+
target=self.pane_id,
251253
start_directory=start_directory,
252254
attach=attach,
253255
vertical=vertical,
@@ -347,9 +349,7 @@ def select_pane(self) -> "Pane":
347349
-------
348350
:class:`pane`
349351
"""
350-
return self.window.select_pane(self.get("pane_id"))
352+
return self.window.select_pane(self.pane_id)
351353

352354
def __repr__(self) -> str:
353-
return "{}({} {})".format(
354-
self.__class__.__name__, self.get("pane_id"), self.window
355-
)
355+
return "{}({} {})".format(self.__class__.__name__, self.pane_id, self.window)

tests/test_server.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,6 @@ def test_new_session_shell(server):
100100
assert server.has_session("test_new_session")
101101

102102
if has_gte_version("3.2"):
103-
assert pane.get("pane_start_command").replace('"', "") == cmd
103+
assert pane.pane_start_command.replace('"', "") == cmd
104104
else:
105-
assert pane.get("pane_start_command") == cmd
105+
assert pane.pane_start_command == cmd

tests/test_tmuxobject.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def test_find_where(server, session):
2828

2929
# window.find_where
3030
for pane in window.panes:
31-
pane_id = pane.get("pane_id")
31+
pane_id = pane.pane_id
3232

3333
assert window.find_where({"pane_id": pane_id}) == pane
3434
assert isinstance(window.find_where({"pane_id": pane_id}), Pane)
@@ -73,8 +73,8 @@ def test_find_where_multiple_infos(server, session):
7373

7474
# window.find_where
7575
for pane in window.panes:
76-
pane_id = pane.get("pane_id")
77-
pane_tty = pane.get("pane_tty")
76+
pane_id = pane.pane_id
77+
pane_tty = pane.pane_tty
7878

7979
find_where = window.find_where(
8080
{"pane_id": pane_id, "pane_tty": pane_tty}
@@ -116,8 +116,8 @@ def test_where(server, session):
116116

117117
# window.where
118118
for pane in window.panes:
119-
pane_id = pane.get("pane_id")
120-
pane_tty = pane.get("pane_tty")
119+
pane_id = pane.pane_id
120+
pane_tty = pane.pane_tty
121121

122122
where = window.where({"pane_id": pane_id, "pane_tty": pane_tty})
123123

@@ -155,7 +155,7 @@ def test_get_by_id(server, session):
155155

156156
# window.get_by_id
157157
for pane in window.panes:
158-
pane_id = pane.get("pane_id")
158+
pane_id = pane.pane_id
159159

160160
get_by_id = window.get_by_id(pane_id)
161161

0 commit comments

Comments
 (0)