Skip to content

Commit c3bbeee

Browse files
committed
Turn on type checking
1 parent 13a3f75 commit c3bbeee

File tree

8 files changed

+27
-25
lines changed

8 files changed

+27
-25
lines changed

docs/source/conf.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
# List of patterns, relative to source directory, that match files and
4848
# directories to ignore when looking for source files.
4949
# This pattern also affects html_static_path and html_extra_path.
50-
exclude_patterns = []
50+
exclude_patterns = [] # type: ignore
5151

5252

5353
# -- Options for HTML output -------------------------------------------------

mypy.ini

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[mypy]
2+
ignore_missing_imports = True

pytest.ini

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
[pytest]
2-
addopts = --flakes
2+
addopts = --flakes --mypy

requirements.txt

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
pytest==4.2.0
33
pytest-asyncio==0.10.0
44
pytest-mock==1.10.3
5+
pytest-mypy==0.3.2
56
pytest-flakes==4.0.0
67
# because of pip bug https://github.com/pypa/pip/issues/4780
78
aiohttp==3.5.4

src/galaxy/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__path__ = __import__('pkgutil').extend_path(__path__, __name__)
1+
__path__: str = __import__('pkgutil').extend_path(__path__, __name__)

src/galaxy/api/errors.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from galaxy.api.jsonrpc import ApplicationError, UnknownError
22

3-
UnknownError = UnknownError
3+
assert UnknownError
44

55
class AuthenticationRequired(ApplicationError):
66
def __init__(self, data=None):

src/galaxy/proc_tools.py

+8-11
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
import platform
1+
import sys
22
from dataclasses import dataclass
3-
from typing import Iterable, NewType, Optional, Set
3+
from typing import Iterable, NewType, Optional, List, cast
44

55

6-
def is_windows():
7-
return platform.system() == "Windows"
8-
96

107
ProcessId = NewType("ProcessId", int)
118

@@ -16,7 +13,7 @@ class ProcessInfo:
1613
binary_path: Optional[str]
1714

1815

19-
if is_windows():
16+
if sys.platform == "win32":
2017
from ctypes import byref, sizeof, windll, create_unicode_buffer, FormatError, WinError
2118
from ctypes.wintypes import DWORD
2219

@@ -25,14 +22,14 @@ def pids() -> Iterable[ProcessId]:
2522
_PROC_ID_T = DWORD
2623
list_size = 4096
2724

28-
def try_get_pids(list_size: int) -> Set[ProcessId]:
25+
def try_get_pids(list_size: int) -> List[ProcessId]:
2926
result_size = DWORD()
3027
proc_id_list = (_PROC_ID_T * list_size)()
3128

3229
if not windll.psapi.EnumProcesses(byref(proc_id_list), sizeof(proc_id_list), byref(result_size)):
33-
raise WinError(descr="Failed to get process ID list: %s" % FormatError())
30+
raise WinError(descr="Failed to get process ID list: %s" % FormatError()) # type: ignore
3431

35-
return proc_id_list[:int(result_size.value / sizeof(_PROC_ID_T()))]
32+
return cast(List[ProcessId], proc_id_list[:int(result_size.value / sizeof(_PROC_ID_T()))])
3633

3734
while True:
3835
proc_ids = try_get_pids(list_size)
@@ -59,7 +56,7 @@ def get_exe_path() -> Optional[str]:
5956
exe_path_buffer = create_unicode_buffer(_MAX_PATH)
6057
exe_path_len = DWORD(len(exe_path_buffer))
6158

62-
return exe_path_buffer[:exe_path_len.value] if windll.kernel32.QueryFullProcessImageNameW(
59+
return cast(str, exe_path_buffer[:exe_path_len.value]) if windll.kernel32.QueryFullProcessImageNameW(
6360
h_process, _WIN32_PATH_FORMAT, exe_path_buffer, byref(exe_path_len)
6461
) else None
6562

@@ -86,6 +83,6 @@ def get_process_info(pid: ProcessId) -> Optional[ProcessInfo]:
8683
return process_info
8784

8885

89-
def process_iter() -> Iterable[ProcessInfo]:
86+
def process_iter() -> Iterable[Optional[ProcessInfo]]:
9087
for pid in pids():
9188
yield get_process_info(pid)

tests/test_http.py

+12-10
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,32 @@
33

44
import aiohttp
55
import pytest
6+
from multidict import CIMultiDict, CIMultiDictProxy
7+
from yarl import URL
68

79
from galaxy.api.errors import (
810
AccessDenied, AuthenticationRequired, BackendTimeout, BackendNotAvailable, BackendError, NetworkError,
911
TooManyRequests, UnknownBackendResponse, UnknownError
1012
)
1113
from galaxy.http import handle_exception
1214

13-
request_info = aiohttp.RequestInfo("http://o.pl", "GET", {})
15+
request_info = aiohttp.RequestInfo(URL("http://o.pl"), "GET", CIMultiDictProxy(CIMultiDict()))
1416

1517
@pytest.mark.parametrize(
1618
"aiohttp_exception,expected_exception_type",
1719
[
1820
(asyncio.TimeoutError(), BackendTimeout),
1921
(aiohttp.ServerDisconnectedError(), BackendNotAvailable),
2022
(aiohttp.ClientConnectionError(), NetworkError),
21-
(aiohttp.ContentTypeError(request_info, []), UnknownBackendResponse),
22-
(aiohttp.ClientResponseError(request_info, [], status=HTTPStatus.UNAUTHORIZED), AuthenticationRequired),
23-
(aiohttp.ClientResponseError(request_info, [], status=HTTPStatus.FORBIDDEN), AccessDenied),
24-
(aiohttp.ClientResponseError(request_info, [], status=HTTPStatus.SERVICE_UNAVAILABLE), BackendNotAvailable),
25-
(aiohttp.ClientResponseError(request_info, [], status=HTTPStatus.TOO_MANY_REQUESTS), TooManyRequests),
26-
(aiohttp.ClientResponseError(request_info, [], status=HTTPStatus.INTERNAL_SERVER_ERROR), BackendError),
27-
(aiohttp.ClientResponseError(request_info, [], status=HTTPStatus.NOT_IMPLEMENTED), BackendError),
28-
(aiohttp.ClientResponseError(request_info, [], status=HTTPStatus.BAD_REQUEST), UnknownError),
29-
(aiohttp.ClientResponseError(request_info, [], status=HTTPStatus.NOT_FOUND), UnknownError),
23+
(aiohttp.ContentTypeError(request_info, ()), UnknownBackendResponse),
24+
(aiohttp.ClientResponseError(request_info, (), status=HTTPStatus.UNAUTHORIZED), AuthenticationRequired),
25+
(aiohttp.ClientResponseError(request_info, (), status=HTTPStatus.FORBIDDEN), AccessDenied),
26+
(aiohttp.ClientResponseError(request_info, (), status=HTTPStatus.SERVICE_UNAVAILABLE), BackendNotAvailable),
27+
(aiohttp.ClientResponseError(request_info, (), status=HTTPStatus.TOO_MANY_REQUESTS), TooManyRequests),
28+
(aiohttp.ClientResponseError(request_info, (), status=HTTPStatus.INTERNAL_SERVER_ERROR), BackendError),
29+
(aiohttp.ClientResponseError(request_info, (), status=HTTPStatus.NOT_IMPLEMENTED), BackendError),
30+
(aiohttp.ClientResponseError(request_info, (), status=HTTPStatus.BAD_REQUEST), UnknownError),
31+
(aiohttp.ClientResponseError(request_info, (), status=HTTPStatus.NOT_FOUND), UnknownError),
3032
(aiohttp.ClientError(), UnknownError)
3133
]
3234
)

0 commit comments

Comments
 (0)