From 83ef9f1b969a1b0cbadd35d8ae1a741771a99c4d Mon Sep 17 00:00:00 2001 From: Adam Dangoor Date: Tue, 24 Feb 2026 23:37:12 +0000 Subject: [PATCH] Extract shared image utilities to reduce duplication Move _ImageType alias and _get_image_data function to new _image_utils module and import from both vws.py and query.py, eliminating duplicate code. Co-Authored-By: Claude Haiku 4.5 --- src/vws/_image_utils.py | 18 ++++++++++++++++++ src/vws/query.py | 17 +++-------------- src/vws/vws.py | 16 ++-------------- 3 files changed, 23 insertions(+), 28 deletions(-) create mode 100644 src/vws/_image_utils.py diff --git a/src/vws/_image_utils.py b/src/vws/_image_utils.py new file mode 100644 index 00000000..58ab58bf --- /dev/null +++ b/src/vws/_image_utils.py @@ -0,0 +1,18 @@ +"""Image utility functions shared across VWS modules.""" + +import io +from typing import BinaryIO + +from beartype import beartype + +ImageType = io.BytesIO | BinaryIO + + +@beartype +def get_image_data(image: ImageType) -> bytes: + """Get the data of an image file.""" + original_tell = image.tell() + image.seek(0) + image_data = image.read() + image.seek(original_tell) + return image_data diff --git a/src/vws/query.py b/src/vws/query.py index fcca282d..7616e2f0 100644 --- a/src/vws/query.py +++ b/src/vws/query.py @@ -1,15 +1,16 @@ """Tools for interacting with the Vuforia Cloud Recognition Web APIs.""" import datetime -import io import json from http import HTTPMethod, HTTPStatus -from typing import Any, BinaryIO +from typing import Any from beartype import BeartypeConf, beartype from urllib3.filepost import encode_multipart_formdata from vws_auth_tools import authorization_header, rfc_1123_date +from vws._image_utils import ImageType as _ImageType +from vws._image_utils import get_image_data as _get_image_data from vws.exceptions.cloud_reco_exceptions import ( AuthenticationFailureError, BadImageError, @@ -25,18 +26,6 @@ from vws.reports import QueryResult, TargetData from vws.transports import RequestsTransport, Transport -_ImageType = io.BytesIO | BinaryIO - - -@beartype -def _get_image_data(image: _ImageType) -> bytes: - """Get the data of an image file.""" - original_tell = image.tell() - image.seek(0) - image_data = image.read() - image.seek(original_tell) - return image_data - @beartype(conf=BeartypeConf(is_pep484_tower=True)) class CloudRecoService: diff --git a/src/vws/vws.py b/src/vws/vws.py index 01315e6a..bed87c93 100644 --- a/src/vws/vws.py +++ b/src/vws/vws.py @@ -1,15 +1,15 @@ """Tools for interacting with Vuforia APIs.""" import base64 -import io import json import time from datetime import date from http import HTTPMethod, HTTPStatus -from typing import BinaryIO from beartype import BeartypeConf, beartype +from vws._image_utils import ImageType as _ImageType +from vws._image_utils import get_image_data as _get_image_data from vws._vws_request import target_api_request from vws.exceptions.custom_exceptions import ( ServerError, @@ -45,18 +45,6 @@ from vws.response import Response from vws.transports import RequestsTransport, Transport -_ImageType = io.BytesIO | BinaryIO - - -@beartype -def _get_image_data(image: _ImageType) -> bytes: - """Get the data of an image file.""" - original_tell = image.tell() - image.seek(0) - image_data = image.read() - image.seek(original_tell) - return image_data - @beartype(conf=BeartypeConf(is_pep484_tower=True)) class VWS: