Skip to content

Commit 43aed52

Browse files
Merge pull request #2359 from VWS-Python/rm-100-confidence-vulture
Fix vulture missing coverage
2 parents f5d9ed6 + 080ee97 commit 43aed52

File tree

7 files changed

+133
-18
lines changed

7 files changed

+133
-18
lines changed

.pre-commit-config.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,10 @@ repos:
101101

102102
- id: vulture
103103
name: vulture
104-
entry: python -m vulture
104+
entry: python -m vulture .
105105
language: system
106106
types_or: [python]
107+
pass_filenames: false
107108

108109
- id: pyroma
109110
name: pyroma

conftest.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ def pytest_collection_modifyitems(items: list[pytest.Item]) -> None:
2626
item.obj = beartype(obj=item.obj)
2727

2828

29-
@pytest.fixture
30-
def make_image_file(
29+
@pytest.fixture(name="make_image_file")
30+
def fixture_make_image_file(
3131
high_quality_image: io.BytesIO,
3232
) -> Generator[None, None, None]:
3333
"""
@@ -41,8 +41,8 @@ def make_image_file(
4141
new_image.unlink()
4242

4343

44-
@pytest.fixture
45-
def mock_vws() -> Generator[None, None, None]:
44+
@pytest.fixture(name="mock_vws")
45+
def fixture_mock_vws() -> Generator[None, None, None]:
4646
"""
4747
Yield a mock VWS.
4848

docs/source/conf.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,7 @@
6262
"python": ("https://docs.python.org/3.12", None),
6363
}
6464
nitpicky = True
65-
nitpick_ignore = (
66-
("py:class", "BytesIO"),
67-
("py:class", "BufferedRandom"),
68-
("py:class", "_io.BytesIO"),
69-
("py:class", "_io.BufferedRandom"),
70-
)
65+
nitpick_ignore = (("py:class", "_io.BytesIO"),)
7166
warning_is_error = True
7267

7368
autoclass_content = "both"

pyproject.toml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,3 +342,45 @@ ignore_path = [
342342
"./src/*.egg-info/",
343343
"./src/*/_setuptools_scm_version.txt",
344344
]
345+
346+
[tool.vulture]
347+
# Ideally we would limit the paths to the source code where we want to ignore names,
348+
# but Vulture does not enable this.
349+
ignore_names = [
350+
# pytest configuration
351+
"pytest_collect_file",
352+
"pytest_collection_modifyitems",
353+
"pytest_plugins",
354+
# pytest fixtures - we name fixtures like this for this purpose
355+
"fixture_*",
356+
# Sphinx
357+
"autoclass_content",
358+
"autoclass_content",
359+
"autodoc_member_order",
360+
"copybutton_exclude",
361+
"extensions",
362+
"html_show_copyright",
363+
"html_show_sourcelink",
364+
"html_show_sphinx",
365+
"html_theme",
366+
"html_theme_options",
367+
"html_title",
368+
"htmlhelp_basename",
369+
"intersphinx_mapping",
370+
"language",
371+
"linkcheck_ignore",
372+
"linkcheck_retries",
373+
"master_doc",
374+
"nitpicky",
375+
"nitpick_ignore",
376+
"project_copyright",
377+
"pygments_style",
378+
"rst_prolog",
379+
"source_suffix",
380+
"spelling_word_list_filename",
381+
"templates_path",
382+
"warning_is_error",
383+
]
384+
385+
# Duplicate some of .gitignore
386+
exclude = [ ".venv" ]

tests/conftest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616

1717
@pytest.fixture(name="_mock_database")
18-
def mock_database() -> Generator[VuforiaDatabase, None, None]:
18+
def fixture_mock_database() -> Generator[VuforiaDatabase, None, None]:
1919
"""
2020
Yield a mock ``VuforiaDatabase``.
2121
"""
@@ -49,7 +49,7 @@ def cloud_reco_client(_mock_database: VuforiaDatabase) -> CloudRecoService:
4949

5050

5151
@pytest.fixture(name="image_file", params=["r+b", "rb"])
52-
def image_file_fixture(
52+
def fixture_image_file(
5353
high_quality_image: io.BytesIO,
5454
tmp_path: Path,
5555
request: pytest.FixtureRequest,

tests/test_cloud_reco_exceptions.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,4 +116,8 @@ def test_inactive_project(
116116
with pytest.raises(InactiveProjectError) as exc:
117117
cloud_reco_client.query(image=high_quality_image)
118118

119-
assert exc.value.response.status_code == HTTPStatus.FORBIDDEN
119+
response = exc.value.response
120+
assert response.status_code == HTTPStatus.FORBIDDEN
121+
# We need one test which checks tell position
122+
# and so we choose this one almost at random.
123+
assert response.tell_position != 0

tests/test_vws.py

Lines changed: 77 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -206,20 +206,35 @@ def test_get_target_summary_report(
206206
application_metadata=None,
207207
)
208208

209-
result = vws_client.get_target_summary_report(target_id=target_id)
209+
report = vws_client.get_target_summary_report(target_id=target_id)
210210

211211
expected_report = TargetSummaryReport(
212212
status=TargetStatuses.SUCCESS,
213-
database_name=result.database_name,
213+
database_name=report.database_name,
214214
target_name=target_name,
215215
upload_date=datetime.date(2018, 4, 25),
216216
active_flag=True,
217-
tracking_rating=result.tracking_rating,
217+
tracking_rating=report.tracking_rating,
218218
total_recos=0,
219219
current_month_recos=0,
220220
previous_month_recos=0,
221221
)
222-
assert result == expected_report
222+
223+
assert report.status == expected_report.status
224+
assert report.database_name == expected_report.database_name
225+
assert report.target_name == expected_report.target_name
226+
assert report.upload_date == expected_report.upload_date
227+
assert report.active_flag == expected_report.active_flag
228+
assert report.tracking_rating == expected_report.tracking_rating
229+
assert report.total_recos == expected_report.total_recos
230+
assert (
231+
report.current_month_recos == expected_report.current_month_recos
232+
)
233+
assert (
234+
report.previous_month_recos == expected_report.previous_month_recos
235+
)
236+
237+
assert report == expected_report
223238

224239

225240
class TestGetDatabaseSummaryReport:
@@ -248,6 +263,24 @@ def test_get_target(vws_client: VWS) -> None:
248263
target_quota=1000,
249264
total_recos=0,
250265
)
266+
267+
assert report.active_images == expected_report.active_images
268+
assert (
269+
report.current_month_recos == expected_report.current_month_recos
270+
)
271+
assert report.failed_images == expected_report.failed_images
272+
assert report.inactive_images == expected_report.inactive_images
273+
assert report.name == expected_report.name
274+
assert (
275+
report.previous_month_recos == expected_report.previous_month_recos
276+
)
277+
assert report.processing_images == expected_report.processing_images
278+
assert report.reco_threshold == expected_report.reco_threshold
279+
assert report.request_quota == expected_report.request_quota
280+
assert report.request_usage == expected_report.request_usage
281+
assert report.target_quota == expected_report.target_quota
282+
assert report.total_recos == expected_report.total_recos
283+
251284
assert report == expected_report
252285

253286

@@ -283,8 +316,48 @@ def test_get_target_record(
283316
)
284317

285318
assert result.target_record == expected_target_record
319+
320+
assert (
321+
result.target_record.target_id == expected_target_record.target_id
322+
)
323+
assert (
324+
result.target_record.active_flag
325+
== expected_target_record.active_flag
326+
)
327+
assert result.target_record.name == expected_target_record.name
328+
assert result.target_record.width == expected_target_record.width
329+
assert (
330+
result.target_record.tracking_rating
331+
== expected_target_record.tracking_rating
332+
)
333+
assert (
334+
result.target_record.reco_rating
335+
== expected_target_record.reco_rating
336+
)
337+
286338
assert result.status == TargetStatuses.PROCESSING
287339

340+
@staticmethod
341+
def test_get_failed(
342+
vws_client: VWS,
343+
image_file_failed_state: io.BytesIO,
344+
) -> None:
345+
"""
346+
Check that the report works with a failed target.
347+
"""
348+
target_id = vws_client.add_target(
349+
name="x",
350+
width=1,
351+
image=image_file_failed_state,
352+
active_flag=True,
353+
application_metadata=None,
354+
)
355+
356+
vws_client.wait_for_target_processed(target_id=target_id)
357+
result = vws_client.get_target_record(target_id=target_id)
358+
359+
assert result.status == TargetStatuses.FAILED
360+
288361

289362
class TestWaitForTargetProcessed:
290363
"""

0 commit comments

Comments
 (0)