Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning].

## [Unreleased]

## [0.0.25] - 2025-06-21

### Removed in 0.0.25

- Use of packaging module

## [0.0.24] - 2025-06-20

### Added in 0.0.24
Expand Down
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[metadata]
name = python-tools
version = 0.0.24
version = 0.0.25
author = senzing
author_email = support@senzing.com
description = Python Tools
Expand Down
53 changes: 45 additions & 8 deletions sz_tools/_project_helpers.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
"""Helpers for creating and updating projects"""

import json
import operator
import shutil
from dataclasses import dataclass, field
from pathlib import Path
from typing import Any

from packaging import version as p_version

V3_BACKUP_PATH = "v3_to_v4_upgrade_backups"
V4_BUILD = "szBuildVersion.json"
SZ_SYS_PATH = Path("/opt/senzing")
Expand Down Expand Up @@ -63,7 +62,10 @@

@dataclass()
class SzBuildDetails:
"""Build information for a project or Senzing SDK system install"""
"""
Build information for a project or Senzing SDK system install
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)
"""

platform: str
version: str
Expand All @@ -72,13 +74,48 @@ class SzBuildDetails:
major: int = field(init=False)
minor: int = field(init=False)
micro: int = field(init=False)
build_v: int = field(init=False)

def __post_init__(self) -> None:
self.version_parsed = p_version.parse(self.version)
self.build_version_parsed = p_version.parse(self.build_version)
self.major = self.version_parsed.major
self.minor = self.version_parsed.minor
self.micro = self.version_parsed.micro
self.major, self.minor, self.micro, self.build_v = [int(n) for n in self.build_version.split(".")]

def _operators(self, other: "SzBuildDetails", operator_: Any) -> tuple[bool, ...]:
"""Check instances of version details are with different operators"""
to_compare = (
(self.major, other.major),
(self.minor, other.minor),
(self.micro, other.micro),
(self.build_v, other.build_v),
)
return tuple(operator_(t[0], t[1]) for t in to_compare)

def __lt__(self, other: "SzBuildDetails") -> bool:
if not isinstance(other, SzBuildDetails):
return NotImplemented

major_equal, minor_equal, micro_equal, _ = self._operators(other, operator.eq)
major_lt, minor_lt, micro_lt, build_v_lt = self._operators(other, operator.lt)

if major_lt or (
major_equal and any((minor_lt, all((minor_equal, micro_lt)), all((minor_equal, micro_equal, build_v_lt))))
):
return True

return False

def __gt__(self, other: "SzBuildDetails") -> bool:
if not isinstance(other, SzBuildDetails):
return NotImplemented

major_equal, minor_equal, micro_equal, _ = self._operators(other, operator.eq)
major_gt, minor_gt, micro_gt, build_v_gt = self._operators(other, operator.gt)

if major_gt or (
major_equal and any((minor_gt, all((minor_equal, micro_gt)), all((minor_equal, micro_equal, build_v_gt))))
):
return True

return False


def get_build_details(path: Path) -> SzBuildDetails:
Expand Down
22 changes: 11 additions & 11 deletions sz_tools/sz_update_project
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
}

V3_REMOVE_FROM_PROJ = {
"bin": {"files": ["g2configupgrade", "g2dbencrypt", "g2dbupgrade", "g2saltadm", "g2ssadm"], "excludes": ["bin"]},

Check warning on line 65 in sz_tools/sz_update_project

View workflow job for this annotation

GitHub Actions / spellcheck

Unknown word (dbupgrade)

Check warning on line 65 in sz_tools/sz_update_project

View workflow job for this annotation

GitHub Actions / spellcheck

Unknown word (configupgrade)
"data": {"files": [], "excludes": []},
"etc": {"files": ["senzing_governor.py"], "excludes": []},
"lib": {
Expand Down Expand Up @@ -170,29 +170,29 @@

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

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

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

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

return (proj_build_details, sys_build_details)
return (proj_build, sys_build)


def remove_dir(dir_: Path, excludes: list[Path]) -> None:
Expand Down
Loading