Skip to content

Commit 8f20e4d

Browse files
authored
#207 - Remove use of packaging module (#208)
1 parent a33f615 commit 8f20e4d

4 files changed

Lines changed: 63 additions & 20 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning].
77

88
## [Unreleased]
99

10+
## [0.0.25] - 2025-06-21
11+
12+
### Removed in 0.0.25
13+
14+
- Use of packaging module
15+
1016
## [0.0.24] - 2025-06-20
1117

1218
### Added in 0.0.24

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[metadata]
22
name = python-tools
3-
version = 0.0.24
3+
version = 0.0.25
44
author = senzing
55
author_email = support@senzing.com
66
description = Python Tools

sz_tools/_project_helpers.py

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
"""Helpers for creating and updating projects"""
22

33
import json
4+
import operator
45
import shutil
56
from dataclasses import dataclass, field
67
from pathlib import Path
78
from typing import Any
89

9-
from packaging import version as p_version
10-
1110
V3_BACKUP_PATH = "v3_to_v4_upgrade_backups"
1211
V4_BUILD = "szBuildVersion.json"
1312
SZ_SYS_PATH = Path("/opt/senzing")
@@ -63,7 +62,10 @@
6362

6463
@dataclass()
6564
class SzBuildDetails:
66-
"""Build information for a project or Senzing SDK system install"""
65+
"""
66+
Build information for a project or Senzing SDK system install
67+
SzBuildDetails(platform='Linux', version='4.0.0', build_version='4.0.0.25164', build_number='2025_06_13__13_07', major=4, minor=0, micro=0)
68+
"""
6769

6870
platform: str
6971
version: str
@@ -72,13 +74,48 @@ class SzBuildDetails:
7274
major: int = field(init=False)
7375
minor: int = field(init=False)
7476
micro: int = field(init=False)
77+
build_v: int = field(init=False)
7578

7679
def __post_init__(self) -> None:
77-
self.version_parsed = p_version.parse(self.version)
78-
self.build_version_parsed = p_version.parse(self.build_version)
79-
self.major = self.version_parsed.major
80-
self.minor = self.version_parsed.minor
81-
self.micro = self.version_parsed.micro
80+
self.major, self.minor, self.micro, self.build_v = [int(n) for n in self.build_version.split(".")]
81+
82+
def _operators(self, other: "SzBuildDetails", operator_: Any) -> tuple[bool, ...]:
83+
"""Check instances of version details are with different operators"""
84+
to_compare = (
85+
(self.major, other.major),
86+
(self.minor, other.minor),
87+
(self.micro, other.micro),
88+
(self.build_v, other.build_v),
89+
)
90+
return tuple(operator_(t[0], t[1]) for t in to_compare)
91+
92+
def __lt__(self, other: "SzBuildDetails") -> bool:
93+
if not isinstance(other, SzBuildDetails):
94+
return NotImplemented
95+
96+
major_equal, minor_equal, micro_equal, _ = self._operators(other, operator.eq)
97+
major_lt, minor_lt, micro_lt, build_v_lt = self._operators(other, operator.lt)
98+
99+
if major_lt or (
100+
major_equal and any((minor_lt, all((minor_equal, micro_lt)), all((minor_equal, micro_equal, build_v_lt))))
101+
):
102+
return True
103+
104+
return False
105+
106+
def __gt__(self, other: "SzBuildDetails") -> bool:
107+
if not isinstance(other, SzBuildDetails):
108+
return NotImplemented
109+
110+
major_equal, minor_equal, micro_equal, _ = self._operators(other, operator.eq)
111+
major_gt, minor_gt, micro_gt, build_v_gt = self._operators(other, operator.gt)
112+
113+
if major_gt or (
114+
major_equal and any((minor_gt, all((minor_equal, micro_gt)), all((minor_equal, micro_equal, build_v_gt))))
115+
):
116+
return True
117+
118+
return False
82119

83120

84121
def get_build_details(path: Path) -> SzBuildDetails:

sz_tools/sz_update_project

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -170,29 +170,29 @@ def pre_check(project_path: Path) -> tuple[SzBuildDetails, SzBuildDetails]:
170170

171171
try:
172172
proj_build_file = v3_project_build_file if v3_project_build_file in proj_listing else v4_project_build_file
173-
proj_build_details = get_build_details(proj_build_file)
174-
sys_build_details = get_build_details(V4_SYS_BUILD)
173+
proj_build = get_build_details(proj_build_file)
174+
sys_build = get_build_details(V4_SYS_BUILD)
175175
except (OSError, TypeError) as err:
176176
print(f"\nERROR: Trying to read {proj_build_file} or {V4_SYS_BUILD} to collect version information: {err}")
177177
sys.exit(1)
178178

179-
if proj_build_details.major not in (3, 4) or sys_build_details.major != 4:
179+
if proj_build.major not in (3, 4) or sys_build.major != 4:
180180
print(f"\nERROR: {MODULE_NAME} updates a V3 project to V4, or V4.n.n to a newer release")
181-
print(f"\tProject version: {proj_build_details.version}")
182-
print(f"\tSystem install version: {sys_build_details.version}")
181+
print(f"\tProject version: {proj_build.build_version}")
182+
print(f"\tSystem install version: {sys_build.build_version}")
183183
sys.exit(1)
184184

185-
if sys_build_details.version_parsed < proj_build_details.version_parsed:
185+
if sys_build < proj_build:
186186
print("\nNo update required, project is newer than the system install")
187-
print(f"\tProject version: {proj_build_details.version}")
188-
print(f"\tSystem install version: {sys_build_details.version}")
187+
print(f"\tProject version: {proj_build.build_version}")
188+
print(f"\tSystem install version: {sys_build.build_version}")
189189
sys.exit(0)
190190

191-
if sys_build_details.version_parsed == proj_build_details.version_parsed:
192-
print(f"\nNo update required, project and system install are the same version - {proj_build_details.version}")
191+
if sys_build.build_version == proj_build.build_version:
192+
print(f"\nNo update required, project & system install are the same version: {proj_build.build_version}")
193193
sys.exit(0)
194194

195-
return (proj_build_details, sys_build_details)
195+
return (proj_build, sys_build)
196196

197197

198198
def remove_dir(dir_: Path, excludes: list[Path]) -> None:

0 commit comments

Comments
 (0)