Skip to content

Commit 6fb361c

Browse files
committed
Fix or disable pyright issues
1 parent 38fd7c6 commit 6fb361c

File tree

6 files changed

+51
-15
lines changed

6 files changed

+51
-15
lines changed

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ module = [
144144
"cv2",
145145
"docker",
146146
"docker.errors",
147+
"docker.models.containers",
147148
"docker.models.networks",
148149
"multipart",
149150
"sybil",

spelling_private_dict.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ recognitions
8080
refactoring
8181
regex
8282
reimplementation
83+
reportGeneralTypeIssues
8384
repr
8485
reqheader
8586
reqjson

src/mock_vws/_query_tools.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,9 @@ def get_query_match_response_text(
8484
else:
8585
include_target_data = parsed_include_target_data.value.lower()
8686

87-
image_value = parsed.get("image").raw
87+
image_part = parsed.get("image")
88+
assert image_part is not None
89+
image_value = image_part.raw
8890
gmt = ZoneInfo("GMT")
8991
now = datetime.datetime.now(tz=gmt)
9092

src/mock_vws/_query_validators/image_validators.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ def validate_image_file_size(
6767
boundary = email_message.get_boundary()
6868
assert isinstance(boundary, str)
6969
parsed = multipart.MultipartParser(stream=body_file, boundary=boundary)
70-
image = parsed.get("image").raw
70+
image_part = parsed.get("image")
71+
assert image_part is not None
72+
image_value = image_part.raw
7173

7274
# This is the documented maximum size of a PNG as per.
7375
# https://library.vuforia.com/web-api/vuforia-query-web-api.
@@ -77,7 +79,7 @@ def validate_image_file_size(
7779
# Ignore coverage on this as there is a bug in urllib3 which means that we
7880
# do not trigger this exception.
7981
# See https://github.com/urllib3/urllib3/issues/2733.
80-
if len(image) > max_bytes: # pragma: no cover
82+
if len(image_value) > max_bytes: # pragma: no cover
8183
_LOGGER.warning(msg="The image file size is too large.")
8284
raise RequestEntityTooLarge
8385

@@ -104,8 +106,10 @@ def validate_image_dimensions(
104106
boundary = email_message.get_boundary()
105107
assert isinstance(boundary, str)
106108
parsed = multipart.MultipartParser(stream=body_file, boundary=boundary)
107-
image = parsed.get("image").raw
108-
image_file = io.BytesIO(image)
109+
image_part = parsed.get("image")
110+
assert image_part is not None
111+
image_value = image_part.raw
112+
image_file = io.BytesIO(image_value)
109113
pil_image = Image.open(image_file)
110114
max_width = 30000
111115
max_height = 30000
@@ -137,9 +141,11 @@ def validate_image_format(
137141
boundary = email_message.get_boundary()
138142
assert isinstance(boundary, str)
139143
parsed = multipart.MultipartParser(stream=body_file, boundary=boundary)
140-
image = parsed.get("image").raw
144+
image_part = parsed.get("image")
145+
assert image_part is not None
146+
image_value = image_part.raw
141147

142-
image_file = io.BytesIO(image)
148+
image_file = io.BytesIO(image_value)
143149
pil_image = Image.open(image_file)
144150

145151
if pil_image.format in {"PNG", "JPEG"}:
@@ -170,9 +176,11 @@ def validate_image_is_image(
170176
boundary = email_message.get_boundary()
171177
assert isinstance(boundary, str)
172178
parsed = multipart.MultipartParser(stream=body_file, boundary=boundary)
173-
image = parsed.get("image").raw
179+
image_part = parsed.get("image")
180+
assert image_part is not None
181+
image_value = image_part.raw
174182

175-
image_file = io.BytesIO(image)
183+
image_file = io.BytesIO(image_value)
176184

177185
try:
178186
Image.open(image_file)

src/mock_vws/target_raters.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,12 @@ def _get_brisque_target_tracking_rating(image_content: bytes) -> int:
3232
with np.errstate(divide="ignore", invalid="ignore"):
3333
try:
3434
score = brisque_obj.score(img=image_array)
35-
except (cv2.error, ValueError): # pylint: disable=no-member
35+
# cv2 errors cannot be inferred without type stubs.
36+
# See https://github.com/opencv/opencv/issues/14590.
37+
except (
38+
cv2.error, # pyright: ignore[reportGeneralTypeIssues], pylint: disable=no-member
39+
ValueError,
40+
):
3641
return 0
3742
if math.isnan(score):
3843
return 0

tests/mock_vws/test_docker.py

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
import docker
1414
import pytest
1515
import requests
16-
from docker.errors import BuildError
16+
from docker.errors import BuildError, NotFound
17+
from docker.models.containers import Container
1718
from mock_vws.database import VuforiaDatabase
1819
from vws import VWS, CloudRecoService
1920

@@ -72,13 +73,15 @@ def fixture_custom_bridge_network() -> Iterator[Network]:
7273
name="test-vws-bridge-" + uuid.uuid4().hex,
7374
driver="bridge",
7475
)
75-
except docker.errors.NotFound:
76+
except NotFound:
7677
# On Windows the "bridge" network driver is not available and we use
7778
# the "nat" driver instead.
7879
network = client.networks.create(
7980
name="test-vws-bridge-" + uuid.uuid4().hex,
8081
driver="nat",
8182
)
83+
84+
assert isinstance(network, Network)
8285
try:
8386
yield network
8487
finally:
@@ -115,7 +118,7 @@ def test_build_and_run(
115118
vwq_tag = f"vws-mock-vwq:latest-{random}"
116119

117120
try:
118-
target_manager_image, _ = client.images.build(
121+
target_manager_build_result = client.images.build(
119122
path=str(repository_root),
120123
dockerfile=str(target_manager_dockerfile),
121124
tag=target_manager_tag,
@@ -133,16 +136,23 @@ def test_build_and_run(
133136
reason = "We do not currently support using Windows containers."
134137
pytest.skip(reason)
135138

136-
vws_image, _ = client.images.build(
139+
assert isinstance(target_manager_build_result, tuple)
140+
target_manager_image, _ = target_manager_build_result
141+
142+
vws_build_result = client.images.build(
137143
path=str(repository_root),
138144
dockerfile=str(vws_dockerfile),
139145
tag=vws_tag,
140146
)
141-
vwq_image, _ = client.images.build(
147+
assert isinstance(vws_build_result, tuple)
148+
vws_image, _ = vws_build_result
149+
vwq_build_result = client.images.build(
142150
path=str(repository_root),
143151
dockerfile=str(vwq_dockerfile),
144152
tag=vwq_tag,
145153
)
154+
assert isinstance(vwq_build_result, tuple)
155+
vwq_image, _ = vwq_build_result
146156

147157
database = VuforiaDatabase()
148158
target_manager_container_name = "vws-mock-target-manager-" + random
@@ -178,9 +188,16 @@ def test_build_and_run(
178188
},
179189
)
180190

191+
assert isinstance(target_manager_container, Container)
192+
assert isinstance(vws_container, Container)
193+
assert isinstance(vwq_container, Container)
181194
for container in (target_manager_container, vws_container, vwq_container):
182195
container.reload()
183196

197+
assert isinstance(target_manager_container.attrs, dict)
198+
target_manager_port_attrs = target_manager_container.attrs[
199+
"NetworkSettings"
200+
]["Ports"]
184201
target_manager_port_attrs = target_manager_container.attrs[
185202
"NetworkSettings"
186203
]["Ports"]
@@ -189,10 +206,12 @@ def test_build_and_run(
189206
"HostPort"
190207
]
191208

209+
assert isinstance(vws_container.attrs, dict)
192210
vws_port_attrs = vws_container.attrs["NetworkSettings"]["Ports"]
193211
vws_host_ip = vws_port_attrs["5000/tcp"][0]["HostIp"]
194212
vws_host_port = vws_port_attrs["5000/tcp"][0]["HostPort"]
195213

214+
assert isinstance(vwq_container.attrs, dict)
196215
vwq_port_attrs = vwq_container.attrs["NetworkSettings"]["Ports"]
197216
vwq_host_ip = vwq_port_attrs["5000/tcp"][0]["HostIp"]
198217
vwq_host_port = vwq_port_attrs["5000/tcp"][0]["HostPort"]

0 commit comments

Comments
 (0)