Skip to content

Commit f4ac267

Browse files
committed
refactor(wrap_stdio): remake classes
1 parent a5860a8 commit f4ac267

File tree

3 files changed

+61
-37
lines changed

3 files changed

+61
-37
lines changed

commitizen/wrap_stdio_linux.py

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,50 @@
22

33
if sys.platform == "linux": # pragma: no cover
44
import os
5-
from io import IOBase
6-
7-
class WrapStdioLinux:
8-
def __init__(self, stdx: IOBase):
9-
self._fileno = stdx.fileno()
10-
if self._fileno == 0:
11-
fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY)
12-
tty = open(fd, "wb+", buffering=0)
13-
else:
14-
tty = open("/dev/tty", "w") # type: ignore
5+
6+
# from io import IOBase
7+
8+
class WrapStdinLinux:
9+
def __init__(self):
10+
fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY)
11+
tty = open(fd, "wb+", buffering=0)
1512
self.tty = tty
1613

1714
def __getattr__(self, key):
18-
if key == "encoding" and self._fileno == 0:
15+
if key == "encoding":
1916
return "UTF-8"
2017
return getattr(self.tty, key)
2118

2219
def __del__(self):
2320
self.tty.close()
2421

22+
class WrapStdoutLinux:
23+
def __init__(self):
24+
tty = open("/dev/tty", "w")
25+
self.tty = tty
26+
27+
def __getattr__(self, key):
28+
return getattr(self.tty, key)
29+
30+
def __del__(self):
31+
self.tty.close()
32+
2533
backup_stdin = None
2634
backup_stdout = None
2735
backup_stderr = None
2836

2937
def _wrap_stdio():
3038
global backup_stdin
3139
backup_stdin = sys.stdin
32-
sys.stdin = WrapStdioLinux(sys.stdin)
40+
sys.stdin = WrapStdinLinux()
3341

3442
global backup_stdout
3543
backup_stdout = sys.stdout
36-
sys.stdout = WrapStdioLinux(sys.stdout)
44+
sys.stdout = WrapStdoutLinux()
3745

3846
global backup_stderr
3947
backup_stderr = sys.stderr
40-
sys.stderr = WrapStdioLinux(sys.stderr)
48+
sys.stderr = WrapStdoutLinux()
4149

4250
def _unwrap_stdio():
4351
global backup_stdin

commitizen/wrap_stdio_unix.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,15 @@
33
if sys.platform != "win32" and sys.platform != "linux": # pragma: no cover
44
import os
55
import selectors
6-
from asyncio import (
6+
from asyncio import ( # get_event_loop_policy,; set_event_loop_policy,
77
DefaultEventLoopPolicy,
8-
get_event_loop_policy,
9-
set_event_loop_policy,
108
)
119
from io import IOBase
1210

13-
class CZEventLoopPolicy(DefaultEventLoopPolicy): # pragma: no cover
14-
def get_event_loop(self):
15-
self.set_event_loop(self._loop_factory(selectors.SelectSelector()))
16-
return self._local._loop
11+
# class CZEventLoopPolicy(DefaultEventLoopPolicy): # pragma: no cover
12+
# def get_event_loop(self):
13+
# self.set_event_loop(self._loop_factory(selectors.SelectSelector()))
14+
# return self._local._loop
1715

1816
class WrapStdioUnix:
1917
def __init__(self, stdx: IOBase):
@@ -33,15 +31,20 @@ def __getattr__(self, key):
3331
def __del__(self):
3432
self.tty.close()
3533

36-
backup_event_loop_policy = None
34+
backup_event_loop = None
35+
# backup_event_loop_policy = None
3736
backup_stdin = None
3837
backup_stdout = None
3938
backup_stderr = None
4039

4140
def _wrap_stdio():
42-
global backup_event_loop_policy
43-
backup_event_loop_policy = get_event_loop_policy()
44-
set_event_loop_policy(CZEventLoopPolicy())
41+
global backup_event_loop
42+
backup_event_loop = DefaultEventLoopPolicy.get_event_loop()
43+
DefaultEventLoopPolicy.set_event_loop(selectors.SelectSelector())
44+
45+
# global backup_event_loop_policy
46+
# backup_event_loop_policy = get_event_loop_policy()
47+
# set_event_loop_policy(CZEventLoopPolicy())
4548

4649
global backup_stdin
4750
backup_stdin = sys.stdin
@@ -56,8 +59,11 @@ def _wrap_stdio():
5659
sys.stderr = WrapStdioUnix(sys.stderr)
5760

5861
def _unwrap_stdio():
59-
global backup_event_loop_policy
60-
set_event_loop_policy(backup_event_loop_policy)
62+
global backup_event_loop
63+
DefaultEventLoopPolicy.set_event_loop(backup_event_loop)
64+
65+
# global backup_event_loop_policy
66+
# set_event_loop_policy(backup_event_loop_policy)
6167

6268
global backup_stdin
6369
sys.stdin.close()

tests/test_wrap_stdio.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,42 +12,52 @@ def test_warp_stdio_exists():
1212
if sys.platform == "win32": # pragma: no cover
1313
pass
1414
elif sys.platform == "linux":
15-
from commitizen.wrap_stdio_linux import WrapStdioLinux
15+
from commitizen.wrap_stdio_linux import WrapStdinLinux, WrapStdoutLinux
1616

17-
def test_wrap_stdio_linux(mocker):
17+
def test_wrap_stdin_linux(mocker):
1818

1919
tmp_stdin = sys.stdin
20-
tmp_stdout = sys.stdout
21-
tmp_stderr = sys.stderr
2220

2321
mocker.patch("os.open")
2422
readerwriter_mock = mocker.mock_open(read_data="data")
2523
mocker.patch("builtins.open", readerwriter_mock, create=True)
2624

2725
mocker.patch.object(sys.stdin, "fileno", return_value=0)
28-
mocker.patch.object(sys.stdout, "fileno", return_value=1)
29-
mocker.patch.object(sys.stdout, "fileno", return_value=2)
3026

3127
wrap_stdio.wrap_stdio()
3228

3329
assert sys.stdin != tmp_stdin
34-
assert isinstance(sys.stdin, WrapStdioLinux)
30+
assert isinstance(sys.stdin, WrapStdinLinux)
3531
assert sys.stdin.encoding == "UTF-8"
3632
assert sys.stdin.read() == "data"
3733

34+
wrap_stdio.unwrap_stdio()
35+
36+
assert sys.stdin == tmp_stdin
37+
38+
def test_wrap_stdout_linux(mocker):
39+
40+
tmp_stdout = sys.stdout
41+
tmp_stderr = sys.stderr
42+
43+
mocker.patch("os.open")
44+
readerwriter_mock = mocker.mock_open(read_data="data")
45+
mocker.patch("builtins.open", readerwriter_mock, create=True)
46+
47+
wrap_stdio.wrap_stdio()
48+
3849
assert sys.stdout != tmp_stdout
39-
assert isinstance(sys.stdout, WrapStdioLinux)
50+
assert isinstance(sys.stdout, WrapStdoutLinux)
4051
sys.stdout.write("stdout")
4152
readerwriter_mock().write.assert_called_with("stdout")
4253

4354
assert sys.stderr != tmp_stderr
44-
assert isinstance(sys.stderr, WrapStdioLinux)
55+
assert isinstance(sys.stderr, WrapStdoutLinux)
4556
sys.stdout.write("stderr")
4657
readerwriter_mock().write.assert_called_with("stderr")
4758

4859
wrap_stdio.unwrap_stdio()
4960

50-
assert sys.stdin == tmp_stdin
5161
assert sys.stdout == tmp_stdout
5262
assert sys.stderr == tmp_stderr
5363

0 commit comments

Comments
 (0)