Skip to content

Commit 862416a

Browse files
committed
Fix typing issues
1 parent 151276b commit 862416a

File tree

2 files changed

+38
-52
lines changed

2 files changed

+38
-52
lines changed

rich/_win32_console.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
"""Light wrapper around the win32 Console API - this module should only be imported on Windows"""
22
import ctypes
33
import sys
4-
from typing import IO, NamedTuple, Type, cast
4+
from typing import IO, Any, NamedTuple, Type, cast
55

6+
windll: Any = None
67
if sys.platform == "win32":
78
windll = ctypes.LibraryLoader(ctypes.WinDLL)
89
else:
@@ -18,7 +19,6 @@
1819
STDOUT = -11
1920
ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4
2021

21-
kernel32 = windll.kernel32
2222
COORD = wintypes._COORD
2323

2424

@@ -51,7 +51,7 @@ class CONSOLE_CURSOR_INFO(ctypes.Structure):
5151
_fields_ = [("dwSize", wintypes.DWORD), ("bVisible", wintypes.BOOL)]
5252

5353

54-
_GetStdHandle = kernel32.GetStdHandle
54+
_GetStdHandle = windll.kernel32.GetStdHandle
5555
_GetStdHandle.argtypes = [
5656
wintypes.DWORD,
5757
]
@@ -62,7 +62,7 @@ def GetStdHandle(handle: int = STDOUT) -> wintypes.HANDLE:
6262
return cast(wintypes.HANDLE, _GetStdHandle(handle))
6363

6464

65-
_GetConsoleMode = kernel32.GetConsoleMode
65+
_GetConsoleMode = windll.kernel32.GetConsoleMode
6666
_GetConsoleMode.argtypes = [wintypes.HANDLE, wintypes.LPDWORD]
6767
_GetConsoleMode.restype = wintypes.BOOL
6868

@@ -71,7 +71,7 @@ def GetConsoleMode(std_handle: wintypes.HANDLE, console_mode: wintypes.DWORD) ->
7171
return bool(_GetConsoleMode(std_handle, console_mode))
7272

7373

74-
_FillConsoleOutputCharacterW = kernel32.FillConsoleOutputCharacterW
74+
_FillConsoleOutputCharacterW = windll.kernel32.FillConsoleOutputCharacterW
7575
_FillConsoleOutputCharacterW.argtypes = [
7676
wintypes.HANDLE,
7777
ctypes.c_char,
@@ -103,7 +103,7 @@ def FillConsoleOutputCharacter(
103103
return num_written.value
104104

105105

106-
_FillConsoleOutputAttribute = kernel32.FillConsoleOutputAttribute
106+
_FillConsoleOutputAttribute = windll.kernel32.FillConsoleOutputAttribute
107107
_FillConsoleOutputAttribute.argtypes = [
108108
wintypes.HANDLE,
109109
wintypes.WORD,
@@ -129,7 +129,7 @@ def FillConsoleOutputAttribute(
129129
return num_written.value
130130

131131

132-
_SetConsoleTextAttribute = kernel32.SetConsoleTextAttribute
132+
_SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute
133133
_SetConsoleTextAttribute.argtypes = [
134134
wintypes.HANDLE,
135135
wintypes.WORD,
@@ -143,7 +143,7 @@ def SetConsoleTextAttribute(
143143
return bool(_SetConsoleTextAttribute(std_handle, attributes))
144144

145145

146-
_GetConsoleScreenBufferInfo = kernel32.GetConsoleScreenBufferInfo
146+
_GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo
147147
_GetConsoleScreenBufferInfo.argtypes = [
148148
wintypes.HANDLE,
149149
ctypes.POINTER(CONSOLE_SCREEN_BUFFER_INFO),
@@ -159,7 +159,7 @@ def GetConsoleScreenBufferInfo(
159159
return console_screen_buffer_info
160160

161161

162-
_SetConsoleCursorPosition = kernel32.SetConsoleCursorPosition
162+
_SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition
163163
_SetConsoleCursorPosition.argtypes = [
164164
wintypes.HANDLE,
165165
cast(Type[COORD], WindowsCoordinates),
@@ -173,7 +173,7 @@ def SetConsoleCursorPosition(
173173
return bool(_SetConsoleCursorPosition(std_handle, coords))
174174

175175

176-
_SetConsoleCursorInfo = kernel32.SetConsoleCursorInfo
176+
_SetConsoleCursorInfo = windll.kernel32.SetConsoleCursorInfo
177177
_SetConsoleCursorInfo.argtypes = [
178178
wintypes.HANDLE,
179179
ctypes.POINTER(CONSOLE_CURSOR_INFO),
@@ -187,7 +187,7 @@ def SetConsoleCursorInfo(
187187
return bool(_SetConsoleCursorInfo(std_handle, byref(cursor_info)))
188188

189189

190-
_SetConsoleTitle = kernel32.SetConsoleTitleW
190+
_SetConsoleTitle = windll.kernel32.SetConsoleTitleW
191191
_SetConsoleTitle.argtypes = [wintypes.LPCWSTR]
192192
_SetConsoleTitle.restype = wintypes.BOOL
193193

tests/test_win32_console.py

Lines changed: 27 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010

1111
if sys.platform == "win32":
1212

13-
from rich._win32_console import COORD, LegacyWindowsTerm, WindowsCoordinates
1413
from rich import _win32_console
14+
from rich._win32_console import COORD, LegacyWindowsTerm, WindowsCoordinates
1515

1616
CURSOR_X = 1
1717
CURSOR_Y = 2
@@ -20,45 +20,40 @@
2020
SCREEN_HEIGHT = 30
2121
DEFAULT_STYLE_ATTRIBUTE = 16
2222

23-
2423
@dataclasses.dataclass
2524
class StubScreenBufferInfo:
2625
dwCursorPosition: COORD = COORD(CURSOR_X, CURSOR_Y)
2726
dwSize: COORD = COORD(SCREEN_WIDTH, SCREEN_HEIGHT)
2827
wAttributes: int = DEFAULT_STYLE_ATTRIBUTE
2928

30-
3129
pytestmark = pytest.mark.skipif(sys.platform != "win32", reason="windows only")
3230

33-
3431
def test_windows_coordinates_to_ctype():
3532
coord = WindowsCoordinates.from_param(WindowsCoordinates(row=1, col=2))
3633
assert coord.X == 2
3734
assert coord.Y == 1
3835

39-
4036
@pytest.fixture
4137
def win32_handle():
4238
handle = mock.sentinel
4339
with mock.patch.object(_win32_console, "GetStdHandle", return_value=handle):
4440
yield handle
4541

46-
4742
@patch.object(
4843
_win32_console, "GetConsoleScreenBufferInfo", return_value=StubScreenBufferInfo
4944
)
5045
def test_cursor_position(_):
5146
term = LegacyWindowsTerm()
5247
assert term.cursor_position == WindowsCoordinates(row=CURSOR_Y, col=CURSOR_X)
5348

54-
5549
@patch.object(
5650
_win32_console, "GetConsoleScreenBufferInfo", return_value=StubScreenBufferInfo
5751
)
5852
def test_screen_size(_):
5953
term = LegacyWindowsTerm()
60-
assert term.screen_size == WindowsCoordinates(row=SCREEN_HEIGHT, col=SCREEN_WIDTH)
61-
54+
assert term.screen_size == WindowsCoordinates(
55+
row=SCREEN_HEIGHT, col=SCREEN_WIDTH
56+
)
6257

6358
@patch.object(
6459
_win32_console, "GetConsoleScreenBufferInfo", return_value=StubScreenBufferInfo
@@ -72,7 +67,6 @@ def test_write_text(_):
7267

7368
assert f.getvalue() == text
7469

75-
7670
@patch.object(_win32_console, "SetConsoleTextAttribute")
7771
@patch.object(
7872
_win32_console, "GetConsoleScreenBufferInfo", return_value=StubScreenBufferInfo
@@ -93,14 +87,13 @@ def test_write_styled(_, SetConsoleTextAttribute, win32_handle):
9387
assert call_args[0].kwargs["attributes"].value == 64
9488
assert call_args[1] == call(win32_handle, attributes=DEFAULT_STYLE_ATTRIBUTE)
9589

96-
9790
@patch.object(_win32_console, "FillConsoleOutputCharacter", return_value=None)
9891
@patch.object(_win32_console, "FillConsoleOutputAttribute", return_value=None)
9992
@patch.object(
10093
_win32_console, "GetConsoleScreenBufferInfo", return_value=StubScreenBufferInfo
10194
)
10295
def test_erase_line(
103-
_, FillConsoleOutputAttribute, FillConsoleOutputCharacter, win32_handle
96+
_, FillConsoleOutputAttribute, FillConsoleOutputCharacter, win32_handle
10497
):
10598
term = LegacyWindowsTerm()
10699
term.erase_line()
@@ -112,14 +105,13 @@ def test_erase_line(
112105
win32_handle, DEFAULT_STYLE_ATTRIBUTE, length=SCREEN_WIDTH, start=start
113106
)
114107

115-
116108
@patch.object(_win32_console, "FillConsoleOutputCharacter", return_value=None)
117109
@patch.object(_win32_console, "FillConsoleOutputAttribute", return_value=None)
118110
@patch.object(
119111
_win32_console, "GetConsoleScreenBufferInfo", return_value=StubScreenBufferInfo
120112
)
121113
def test_erase_end_of_line(
122-
_, FillConsoleOutputAttribute, FillConsoleOutputCharacter, win32_handle
114+
_, FillConsoleOutputAttribute, FillConsoleOutputCharacter, win32_handle
123115
):
124116
term = LegacyWindowsTerm()
125117
term.erase_end_of_line()
@@ -134,14 +126,13 @@ def test_erase_end_of_line(
134126
start=CURSOR_POSITION,
135127
)
136128

137-
138129
@patch.object(_win32_console, "FillConsoleOutputCharacter", return_value=None)
139130
@patch.object(_win32_console, "FillConsoleOutputAttribute", return_value=None)
140131
@patch.object(
141132
_win32_console, "GetConsoleScreenBufferInfo", return_value=StubScreenBufferInfo
142133
)
143134
def test_erase_start_of_line(
144-
_, FillConsoleOutputAttribute, FillConsoleOutputCharacter, win32_handle
135+
_, FillConsoleOutputAttribute, FillConsoleOutputCharacter, win32_handle
145136
):
146137
term = LegacyWindowsTerm()
147138
term.erase_start_of_line()
@@ -155,7 +146,6 @@ def test_erase_start_of_line(
155146
win32_handle, DEFAULT_STYLE_ATTRIBUTE, length=CURSOR_X, start=start
156147
)
157148

158-
159149
@patch.object(_win32_console, "SetConsoleCursorPosition", return_value=None)
160150
@patch.object(
161151
_win32_console, "GetConsoleScreenBufferInfo", return_value=StubScreenBufferInfo
@@ -168,33 +158,34 @@ def test_move_cursor_to(_, SetConsoleCursorPosition, win32_handle):
168158

169159
SetConsoleCursorPosition.assert_called_once_with(win32_handle, coords=coords)
170160

171-
172161
@patch.object(_win32_console, "SetConsoleCursorPosition", return_value=None)
173162
@patch.object(
174163
_win32_console, "GetConsoleScreenBufferInfo", return_value=StubScreenBufferInfo
175164
)
176-
def test_move_cursor_to_out_of_bounds_row(_, SetConsoleCursorPosition, win32_handle):
165+
def test_move_cursor_to_out_of_bounds_row(
166+
_, SetConsoleCursorPosition, win32_handle
167+
):
177168
coords = WindowsCoordinates(row=-1, col=4)
178169
term = LegacyWindowsTerm()
179170

180171
term.move_cursor_to(coords)
181172

182173
assert not SetConsoleCursorPosition.called
183174

184-
185175
@patch.object(_win32_console, "SetConsoleCursorPosition", return_value=None)
186176
@patch.object(
187177
_win32_console, "GetConsoleScreenBufferInfo", return_value=StubScreenBufferInfo
188178
)
189-
def test_move_cursor_to_out_of_bounds_col(_, SetConsoleCursorPosition, win32_handle):
179+
def test_move_cursor_to_out_of_bounds_col(
180+
_, SetConsoleCursorPosition, win32_handle
181+
):
190182
coords = WindowsCoordinates(row=10, col=-4)
191183
term = LegacyWindowsTerm()
192184

193185
term.move_cursor_to(coords)
194186

195187
assert not SetConsoleCursorPosition.called
196188

197-
198189
@patch.object(_win32_console, "SetConsoleCursorPosition", return_value=None)
199190
@patch.object(
200191
_win32_console, "GetConsoleScreenBufferInfo", return_value=StubScreenBufferInfo
@@ -208,7 +199,6 @@ def test_move_cursor_up(_, SetConsoleCursorPosition, win32_handle):
208199
win32_handle, coords=WindowsCoordinates(row=CURSOR_Y - 1, col=CURSOR_X)
209200
)
210201

211-
212202
@patch.object(_win32_console, "SetConsoleCursorPosition", return_value=None)
213203
@patch.object(
214204
_win32_console, "GetConsoleScreenBufferInfo", return_value=StubScreenBufferInfo
@@ -222,7 +212,6 @@ def test_move_cursor_down(_, SetConsoleCursorPosition, win32_handle):
222212
win32_handle, coords=WindowsCoordinates(row=CURSOR_Y + 1, col=CURSOR_X)
223213
)
224214

225-
226215
@patch.object(_win32_console, "SetConsoleCursorPosition", return_value=None)
227216
@patch.object(
228217
_win32_console, "GetConsoleScreenBufferInfo", return_value=StubScreenBufferInfo
@@ -236,16 +225,15 @@ def test_move_cursor_forward(_, SetConsoleCursorPosition, win32_handle):
236225
win32_handle, coords=WindowsCoordinates(row=CURSOR_Y, col=CURSOR_X + 1)
237226
)
238227

239-
240228
@patch.object(_win32_console, "SetConsoleCursorPosition", return_value=None)
241229
def test_move_cursor_forward_newline_wrap(SetConsoleCursorPosition, win32_handle):
242230
cursor_at_end_of_line = StubScreenBufferInfo(
243231
dwCursorPosition=COORD(SCREEN_WIDTH - 1, CURSOR_Y)
244232
)
245233
with patch.object(
246-
_win32_console,
247-
"GetConsoleScreenBufferInfo",
248-
return_value=cursor_at_end_of_line,
234+
_win32_console,
235+
"GetConsoleScreenBufferInfo",
236+
return_value=cursor_at_end_of_line,
249237
):
250238
term = LegacyWindowsTerm()
251239
term.move_cursor_forward()
@@ -254,7 +242,6 @@ def test_move_cursor_forward_newline_wrap(SetConsoleCursorPosition, win32_handle
254242
win32_handle, coords=WindowsCoordinates(row=CURSOR_Y + 1, col=0)
255243
)
256244

257-
258245
@patch.object(_win32_console, "SetConsoleCursorPosition", return_value=None)
259246
@patch.object(
260247
_win32_console, "GetConsoleScreenBufferInfo", return_value=StubScreenBufferInfo
@@ -266,7 +253,6 @@ def test_move_cursor_to_column(_, SetConsoleCursorPosition, win32_handle):
266253
win32_handle, coords=WindowsCoordinates(CURSOR_Y, 5)
267254
)
268255

269-
270256
@patch.object(_win32_console, "SetConsoleCursorPosition", return_value=None)
271257
@patch.object(
272258
_win32_console, "GetConsoleScreenBufferInfo", return_value=StubScreenBufferInfo
@@ -278,22 +264,25 @@ def test_move_cursor_backward(_, SetConsoleCursorPosition, win32_handle):
278264
win32_handle, coords=WindowsCoordinates(row=CURSOR_Y, col=CURSOR_X - 1)
279265
)
280266

281-
282267
@patch.object(_win32_console, "SetConsoleCursorPosition", return_value=None)
283-
def test_move_cursor_backward_prev_line_wrap(SetConsoleCursorPosition, win32_handle):
284-
cursor_at_start_of_line = StubScreenBufferInfo(dwCursorPosition=COORD(0, CURSOR_Y))
268+
def test_move_cursor_backward_prev_line_wrap(
269+
SetConsoleCursorPosition, win32_handle
270+
):
271+
cursor_at_start_of_line = StubScreenBufferInfo(
272+
dwCursorPosition=COORD(0, CURSOR_Y)
273+
)
285274
with patch.object(
286-
_win32_console,
287-
"GetConsoleScreenBufferInfo",
288-
return_value=cursor_at_start_of_line,
275+
_win32_console,
276+
"GetConsoleScreenBufferInfo",
277+
return_value=cursor_at_start_of_line,
289278
):
290279
term = LegacyWindowsTerm()
291280
term.move_cursor_backward()
292281
SetConsoleCursorPosition.assert_called_once_with(
293-
win32_handle, coords=WindowsCoordinates(row=CURSOR_Y - 1, col=SCREEN_WIDTH - 1)
282+
win32_handle,
283+
coords=WindowsCoordinates(row=CURSOR_Y - 1, col=SCREEN_WIDTH - 1),
294284
)
295285

296-
297286
@patch.object(_win32_console, "SetConsoleCursorInfo", return_value=None)
298287
@patch.object(
299288
_win32_console, "GetConsoleScreenBufferInfo", return_value=StubScreenBufferInfo
@@ -308,7 +297,6 @@ def test_hide_cursor(_, SetConsoleCursorInfo, win32_handle):
308297
assert call_args[0].kwargs["cursor_info"].bVisible == 0
309298
assert call_args[0].kwargs["cursor_info"].dwSize == 100
310299

311-
312300
@patch.object(_win32_console, "SetConsoleCursorInfo", return_value=None)
313301
@patch.object(
314302
_win32_console, "GetConsoleScreenBufferInfo", return_value=StubScreenBufferInfo
@@ -323,15 +311,13 @@ def test_show_cursor(_, SetConsoleCursorInfo, win32_handle):
323311
assert call_args[0].kwargs["cursor_info"].bVisible == 1
324312
assert call_args[0].kwargs["cursor_info"].dwSize == 100
325313

326-
327314
@patch.object(_win32_console, "SetConsoleTitle", return_value=None)
328315
def test_set_title(SetConsoleTitle):
329316
term = LegacyWindowsTerm()
330317
term.set_title("title")
331318

332319
SetConsoleTitle.assert_called_once_with("title")
333320

334-
335321
@patch.object(_win32_console, "SetConsoleTitle", return_value=None)
336322
def test_set_title_too_long(_):
337323
term = LegacyWindowsTerm()

0 commit comments

Comments
 (0)