Skip to content

Commit a29cd6c

Browse files
chore: enable mypy check strict_equality
Enable the `mypy` `strict_equality` check.
1 parent ed110bd commit a29cd6c

File tree

3 files changed

+29
-9
lines changed

3 files changed

+29
-9
lines changed

gitlab/v4/objects/users.py

+13-5
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
https://docs.gitlab.com/ee/api/users.html
44
https://docs.gitlab.com/ee/api/projects.html#list-projects-starred-by-a-user
55
"""
6-
from typing import Any, cast, Dict, List, Union
6+
from typing import Any, cast, Dict, List, Optional, Union
77

88
import requests
99

@@ -163,7 +163,7 @@ class User(SaveMixin, ObjectDeleteMixin, RESTObject):
163163

164164
@cli.register_custom_action("User")
165165
@exc.on_http_error(exc.GitlabBlockError)
166-
def block(self, **kwargs: Any) -> Union[Dict[str, Any], requests.Response]:
166+
def block(self, **kwargs: Any) -> Optional[bool]:
167167
"""Block the user.
168168
169169
Args:
@@ -177,7 +177,11 @@ def block(self, **kwargs: Any) -> Union[Dict[str, Any], requests.Response]:
177177
Whether the user status has been changed
178178
"""
179179
path = f"/users/{self.encoded_id}/block"
180-
server_data = self.manager.gitlab.http_post(path, **kwargs)
180+
# NOTE: Undocumented behavior of the GitLab API is that it returns a
181+
# boolean or None
182+
server_data = cast(
183+
Optional[bool], self.manager.gitlab.http_post(path, **kwargs)
184+
)
181185
if server_data is True:
182186
self._attrs["state"] = "blocked"
183187
return server_data
@@ -220,7 +224,7 @@ def unfollow(self, **kwargs: Any) -> Union[Dict[str, Any], requests.Response]:
220224

221225
@cli.register_custom_action("User")
222226
@exc.on_http_error(exc.GitlabUnblockError)
223-
def unblock(self, **kwargs: Any) -> Union[Dict[str, Any], requests.Response]:
227+
def unblock(self, **kwargs: Any) -> Optional[bool]:
224228
"""Unblock the user.
225229
226230
Args:
@@ -234,7 +238,11 @@ def unblock(self, **kwargs: Any) -> Union[Dict[str, Any], requests.Response]:
234238
Whether the user status has been changed
235239
"""
236240
path = f"/users/{self.encoded_id}/unblock"
237-
server_data = self.manager.gitlab.http_post(path, **kwargs)
241+
# NOTE: Undocumented behavior of the GitLab API is that it returns a
242+
# boolean or None
243+
server_data = cast(
244+
Optional[bool], self.manager.gitlab.http_post(path, **kwargs)
245+
)
238246
if server_data is True:
239247
self._attrs["state"] = "active"
240248
return server_data

pyproject.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ disallow_incomplete_defs = true
1313
disallow_subclassing_any = true
1414
disallow_untyped_decorators = true
1515
disallow_untyped_defs = true
16+
no_implicit_reexport = true
17+
strict_equality = true
1618
warn_redundant_casts = true
1719
warn_unused_configs = true
1820
warn_unused_ignores = true
@@ -21,8 +23,6 @@ warn_unused_ignores = true
2123
# disallow_any_generics = true
2224
# disallow_untyped_calls = true
2325
# no_implicit_optional = true
24-
no_implicit_reexport = true
25-
# strict_equality = true
2626
# warn_return_any = true
2727

2828
[[tool.mypy.overrides]] # Overrides for currently untyped modules

tests/functional/api/test_users.py

+14-2
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,26 @@ def test_create_user(gl, fixture_dir):
2828

2929

3030
def test_block_user(gl, user):
31-
user.block()
31+
result = user.block()
32+
assert result is True
3233
users = gl.users.list(blocked=True)
3334
assert user in users
3435

35-
user.unblock()
36+
# block again
37+
result = user.block()
38+
# Trying to block an already blocked user returns None
39+
assert result is None
40+
41+
result = user.unblock()
42+
assert result is True
3643
users = gl.users.list(blocked=False)
3744
assert user in users
3845

46+
# unblock again
47+
result = user.unblock()
48+
# Trying to unblock an already blocked user returns False
49+
assert result is False
50+
3951

4052
def test_ban_user(gl, user):
4153
user.ban()

0 commit comments

Comments
 (0)