Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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"andself._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)

AltStyle によって変換されたページ (->オリジナル) /