Skip to content

Commit bf14243

Browse files
committed
Chore: Updated code for typing with mypy strict
1 parent e461af5 commit bf14243

File tree

4 files changed

+46
-21
lines changed

4 files changed

+46
-21
lines changed

.pre-commit-config.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,14 @@ repos:
2121
hooks:
2222
- id: reorder-python-imports
2323
args: [--py3-plus]
24+
- repo: https://github.com/pre-commit/mirrors-mypy
25+
rev: v1.8.0
26+
hooks:
27+
- id: mypy
28+
additional_dependencies: ['types-requests']
29+
- repo: https://github.com/pre-commit/pre-commit-hooks
30+
rev: v4.5.0
31+
hooks:
32+
- id: check-merge-conflict
33+
- id: debug-statements
34+
- id: check-case-conflict

requirements-dev.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
black
22
reorder-python-imports
33
flake8
4+
mypy
5+
types-requests
46
pre-commit
57
-r requirements.txt
68

shellhub/models/base.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from typing import Any
2+
from typing import Dict
13
from typing import List
24
from typing import Optional
35

@@ -13,21 +15,21 @@ class ShellHub:
1315
_endpoint: str
1416
_access_token: Optional[str]
1517

16-
def __init__(self, username: str, password: str, endpoint: str):
18+
def __init__(self, username: str, password: str, endpoint: str) -> None:
1719
self._username: str = username
1820
self._password: str = password
1921
self._endpoint: str = endpoint
2022
self._access_token: Optional[str] = None
2123

2224
self._login()
2325

24-
def __repr__(self):
26+
def __repr__(self) -> str:
2527
return f"<ShellHub username={self._username} endpoint={self._endpoint}>"
2628

27-
def __str__(self):
29+
def __str__(self) -> str:
2830
return self._endpoint
2931

30-
def _login(self):
32+
def _login(self) -> None:
3133
try:
3234
response = requests.post(
3335
f"{self._endpoint}/api/login",
@@ -46,16 +48,20 @@ def _login(self):
4648
self._access_token = response.json()["token"]
4749

4850
def make_request(
49-
self, endpoint: str, method: str, query_params: Optional[dict] = None, json: Optional[dict] = None
50-
):
51+
self,
52+
endpoint: str,
53+
method: str,
54+
query_params: Optional[Dict[Any, Any]] = None,
55+
json: Optional[Dict[Any, Any]] = None,
56+
) -> requests.Response:
5157
params = ""
5258
if query_params:
5359
params = "?"
5460
for key, value in query_params.items():
5561
params += f"{key}={value}&"
5662
params = params[:-1]
5763

58-
response = getattr(requests, method.lower())(
64+
response: requests.Response = getattr(requests, method.lower())(
5965
f"{self._endpoint}{endpoint}{params if params else ''}",
6066
headers={
6167
"Authorization": f"Bearer {self._access_token}",
@@ -64,7 +70,9 @@ def make_request(
6470
)
6571
return response
6672

67-
def _get_devices(self, query_params: Optional[dict] = None) -> "List[shellhub.models.device.ShellHubDevice]":
73+
def _get_devices(
74+
self, query_params: Optional[Dict[Any, Any]] = None
75+
) -> "List[shellhub.models.device.ShellHubDevice]":
6876
response = self.make_request(endpoint="/api/devices", method="GET", query_params=query_params)
6977

7078
response.raise_for_status()
@@ -75,7 +83,7 @@ def _get_devices(self, query_params: Optional[dict] = None) -> "List[shellhub.mo
7583
return devices
7684

7785
def get_all_devices(
78-
self, status: Optional[str] = None, query_params: Optional[dict] = None
86+
self, status: Optional[str] = None, query_params: Optional[Dict[Any, Any]] = None
7987
) -> "List[shellhub.models.device.ShellHubDevice]":
8088
"""
8189
Get all devices from ShellHub. Default gets all devices

shellhub/models/device.py

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from typing import Dict
12
from typing import List
23
from typing import Optional
34

@@ -12,21 +13,21 @@ class ShellHubDeviceInfo:
1213
arch: str
1314
platform: str
1415

15-
def __init__(self, device_info_json: dict):
16+
def __init__(self, device_info_json: Dict[str, str]):
1617
self.id = device_info_json["id"]
1718
self.pretty_name = device_info_json["pretty_name"]
1819
self.version = device_info_json["version"]
1920
self.arch = device_info_json["arch"]
2021
self.platform = device_info_json["platform"]
2122

22-
def __repr__(self):
23+
def __repr__(self) -> str:
2324
return (
2425
f"ShellHubDeviceInfo(id={self.id}, pretty_name={self.pretty_name}, "
2526
f"version={self.version}, arch={self.arch}, platform={self.platform})"
2627
)
2728

28-
def __str__(self):
29-
return self.__repr__()
29+
def __str__(self) -> str:
30+
return self.pretty_name
3031

3132

3233
class ShellHubDevice:
@@ -46,7 +47,7 @@ class ShellHubDevice:
4647
tags: List[str]
4748
acceptable: bool
4849

49-
def __init__(self, api_object: shellhub.models.base.ShellHub, device_json: dict):
50+
def __init__(self, api_object: shellhub.models.base.ShellHub, device_json): # type: ignore
5051
self._api = api_object
5152

5253
self.uid = device_json["uid"]
@@ -68,16 +69,17 @@ def __init__(self, api_object: shellhub.models.base.ShellHub, device_json: dict)
6869
self.tags = device_json["tags"]
6970
self.acceptable = device_json["acceptable"]
7071

71-
def delete(self):
72+
def delete(self) -> bool:
7273
response = self._api.make_request(endpoint=f"/api/devices/{self.uid}", method="DELETE")
7374
if response.status_code == 200:
7475
return True
7576
elif response.status_code == 404:
7677
raise ShellHubApiError(f"Device {self.uid} not found.")
7778
else:
7879
response.raise_for_status()
80+
return False
7981

80-
def rename(self, name: Optional[str] = None):
82+
def rename(self, name: Optional[str] = None) -> bool:
8183
"""
8284
Set a new name for the device. If no name is provided, the name will be the mac address of the device
8385
"""
@@ -93,8 +95,9 @@ def rename(self, name: Optional[str] = None):
9395
raise ShellHubApiError(f"Device with name {name} already exists.")
9496
else:
9597
response.raise_for_status()
98+
return False
9699

97-
def accept(self):
100+
def accept(self) -> bool:
98101
if not self.acceptable:
99102
raise ShellHubApiError(f"Device {self.uid} is not acceptable.")
100103

@@ -106,19 +109,20 @@ def accept(self):
106109
raise ShellHubApiError(f"Device {self.uid} not found.")
107110
else:
108111
response.raise_for_status()
112+
return False
109113

110-
def refresh(self):
114+
def refresh(self) -> None:
111115
response = self._api.make_request(endpoint=f"/api/devices/{self.uid}", method="GET")
112116
if response.status_code == 404:
113117
raise ShellHubApiError(f"Device {self.uid} not found.")
114118
elif response.status_code != 200:
115119
response.raise_for_status()
116-
self.__init__(self._api, response.json())
120+
self.__init__(self._api, response.json()) # type: ignore
117121

118-
def __repr__(self):
122+
def __repr__(self) -> str:
119123
return (
120124
f"ShellHubDevice(name={self.name}, online={self.online}, namespace={self.namespace}, status={self.status})"
121125
)
122126

123-
def __str__(self):
127+
def __str__(self) -> str:
124128
return self.uid

0 commit comments

Comments
 (0)