Skip to content

Commit 23310ac

Browse files
authored
chore(deps): remove packaging and replace its uses (jxmorris12#187)
1 parent c7a7cd4 commit 23310ac

5 files changed

Lines changed: 44 additions & 33 deletions

File tree

language_tool_python/download_lt.py

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222

2323
import requests
2424
import tqdm
25-
from packaging import version
26-
from packaging.version import Version
2725

2826
from ._compat import deprecated, toml_loads
2927
from .exceptions import JavaError, PathError
@@ -32,6 +30,7 @@
3230
LTP_JAR_DIR_PATH_ENV_VAR,
3331
get_env_int,
3432
get_language_tool_download_path,
33+
version_tuple,
3534
)
3635

3736
if TYPE_CHECKING:
@@ -275,7 +274,7 @@ def confirm_java_compatibility(
275274

276275
is_old_version = language_tool_version != LTP_DOWNLOAD_VERSION and (
277276
re.match(r"^\d+\.\d+$", language_tool_version)
278-
and Version(language_tool_version) < Version("6.6")
277+
and version_tuple(language_tool_version) < (6, 6) # 6.6
279278
)
280279

281280
# Some installs of java show the version number like '14.0.1'
@@ -765,15 +764,15 @@ def version_name(self) -> str:
765764

766765
@property
767766
@abstractmethod
768-
def version_into(self) -> Version | datetime:
767+
def version_into(self) -> tuple[int, int] | datetime:
769768
"""Get the version as a comparable object.
770769
771770
This abstract property must be implemented by subclasses to return the version
772-
as either a Version object (for releases) or datetime object (for snapshots) for
773-
comparison purposes.
771+
as either a tuple of integers (for releases) or datetime object (for snapshots)
772+
for comparison purposes.
774773
775-
:return: A Version object for releases or datetime for snapshots.
776-
:rtype: Version | datetime
774+
:return: A tuple of integers for releases or datetime for snapshots.
775+
:rtype: tuple[int, int] | datetime
777776
:raises NotImplementedError: Always, unless implemented by a subclass.
778777
"""
779778
raise NotImplementedError
@@ -835,8 +834,7 @@ def __lt__(self, other: object) -> bool:
835834
self_version = self.version_into
836835
other_version = other.version_into
837836
if (
838-
isinstance(self_version, Version)
839-
and isinstance(other_version, Version)
837+
isinstance(self_version, tuple) and isinstance(other_version, tuple)
840838
) or (
841839
isinstance(self_version, datetime)
842840
and isinstance(other_version, datetime)
@@ -919,13 +917,13 @@ def version_name(self) -> str:
919917
return self._version_name
920918

921919
@property
922-
def version_into(self) -> Version:
923-
"""Get the version as a Version object for comparison.
920+
def version_into(self) -> tuple[int, int]:
921+
"""Get the version as a tuple of integers for comparison.
924922
925-
:return: A parsed Version object from the version string.
926-
:rtype: Version
923+
:return: A tuple of integers representing the version.
924+
:rtype: tuple[int, int]
927925
"""
928-
return version.parse(self._version_name)
926+
return version_tuple(self._version_name)
929927

930928
@property
931929
def download_url(self) -> str:
@@ -941,16 +939,16 @@ def download_url(self) -> str:
941939
:rtype: str
942940
:raises PathError: If the version is below 4.0 (unsupported).
943941
"""
944-
version_num = Version(self._version_name)
942+
version_num = version_tuple(self._version_name)
945943
filename = FILENAME_RELEASE.format(version=self._version_name)
946944
# Versions >= 6.7 from new release page
947-
if version_num >= Version("6.7"):
945+
if version_num >= (6, 7): # 6.7
948946
base_url = BASE_URL_NEW_RELEASES.format(version=self._version_name)
949947
return urljoin(base_url, filename)
950948
# Versions >= 6.0 from main download page
951-
if version_num >= Version("6.0"):
949+
if version_num >= (6, 0): # 6.0
952950
return urljoin(BASE_URL_RELEASE, filename)
953-
if version_num < Version("4.0"):
951+
if version_num < (4, 0): # 4.0
954952
err = (
955953
"LanguageTool versions below 4.0 are no longer supported for download."
956954
" Below version 4.0, the API changed significantly and is "

language_tool_python/server.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
import psutil
2121
import requests
22-
from packaging.version import Version
2322

2423
from .api_types import (
2524
is_check_response,
@@ -41,6 +40,7 @@
4140
get_locale_language,
4241
kill_process_force,
4342
parse_url,
43+
version_tuple,
4444
)
4545

4646
startupinfo: object | None = None
@@ -1136,8 +1136,8 @@ def _wait_for_server_ready(self, timeout: int = 15) -> None:
11361136
url = (
11371137
urllib.parse.urljoin(self._url, "check?text=healthcheck&language=en")
11381138
if re.match(r"^\d+\.\d+$", self._language_tool_download_version)
1139-
and Version(self._language_tool_download_version)
1140-
< Version("4.2") # healthcheck endpoint added in 4.2
1139+
and version_tuple(self._language_tool_download_version)
1140+
< (4, 2) # healthcheck endpoint added in 4.2
11411141
else urllib.parse.urljoin(self._url, "healthcheck")
11421142
)
11431143
start = time.time()

language_tool_python/utils.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
from typing import TYPE_CHECKING, Protocol, runtime_checkable
1515

1616
import psutil
17-
from packaging import version
1817

1918
from ._compat import deprecated
2019
from .exceptions import JavaError, PathError
@@ -221,7 +220,7 @@ def find_existing_language_tool_downloads(download_folder: Path) -> list[Path]:
221220
"This function is no longer used internally and will be removed in 4.0.",
222221
stacklevel=2,
223222
)
224-
def _extract_version(path: Path) -> version.Version:
223+
def _extract_version(path: Path) -> tuple[int, int]:
225224
"""Extract the version number from a LanguageTool directory path.
226225
227226
This function parses the directory name to extract the version information
@@ -230,8 +229,8 @@ def _extract_version(path: Path) -> version.Version:
230229
231230
:param path: The path to the LanguageTool directory
232231
:type path: Path
233-
:return: The parsed version object extracted from the directory name
234-
:rtype: version.Version
232+
:return: The parsed version tuple extracted from the directory name
233+
:rtype: tuple[int, int]
235234
:raises ValueError: If the directory name doesn't start with 'LanguageTool-'
236235
237236
.. deprecated:: 3.3.0
@@ -244,7 +243,7 @@ def _extract_version(path: Path) -> version.Version:
244243
version_str = path.name.removeprefix("LanguageTool-")
245244
# Handle both -SNAPSHOT and -snapshot suffixes
246245
version_str = version_str.removesuffix("-SNAPSHOT").removesuffix("-snapshot")
247-
return version.parse(version_str)
246+
return version_tuple(version_str)
248247

249248

250249
@deprecated(
@@ -471,3 +470,20 @@ class SupportsFloat(Protocol):
471470
def __float__(self) -> float:
472471
"""Define the interface for types that can be converted to a float."""
473472
...
473+
474+
475+
def version_tuple(v: str) -> tuple[int, int]:
476+
"""Convert a version string into a tuple of integers.
477+
478+
This function takes a version string in the format 'X.Y' and converts it into a
479+
tuple of integers (X, Y). This can be useful for comparing version numbers.
480+
481+
:param v: The version string to be converted, expected in the format 'X.Y'.
482+
:type v: str
483+
:return: A tuple of integers representing the version, in the format (X, Y).
484+
:rtype: tuple[int, int]
485+
:raises ValueError: If the version string is not in the expected format or contains
486+
non-integer components.
487+
"""
488+
major, minor = v.split(".")
489+
return int(major), int(minor)

pyproject.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ keywords = ["python", "nlp", "grammar", "languagetool", "grammar-checker", "spel
2929
dependencies = [
3030
"requests",
3131
"tqdm",
32-
"packaging",
3332
"psutil",
3433
"tomli; python_version < '3.11'", # only needed for py < 3.11 because tomllib added in 3.11 is used in the codebase, needs a fallback
3534
"typing_extensions; python_version < '3.13'", # only needed for py < 3.13 because warnings.deprecated added in 3.13 is used in the codebase

uv.lock

Lines changed: 3 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)