TonieToolbox 0.4.2__py3-none-any.whl → 0.5.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,9 +3,9 @@ Version handler to check if the latest version of TonieToolbox is being used.
3
3
  """
4
4
 
5
5
  import json
6
- import logging
7
6
  import os
8
7
  import time
8
+ from packaging import version
9
9
  from urllib import request
10
10
  from urllib.error import URLError
11
11
 
@@ -90,7 +90,7 @@ def get_pypi_version(force_refresh=False):
90
90
 
91
91
  def compare_versions(v1, v2):
92
92
  """
93
- Compare two version strings.
93
+ Compare two version strings according to PEP 440.
94
94
 
95
95
  Args:
96
96
  v1: First version string
@@ -102,31 +102,35 @@ def compare_versions(v1, v2):
102
102
  logger = get_logger("version_handler")
103
103
  logger.debug("Comparing versions: '%s' vs '%s'", v1, v2)
104
104
 
105
- try:
106
- v1_parts = [int(x) for x in v1.split('.')]
107
- v2_parts = [int(x) for x in v2.split('.')]
105
+ try:
106
+ # Strip leading 'v' if present
107
+ v1_clean = v1[1:] if v1.startswith('v') else v1
108
+ v2_clean = v2[1:] if v2.startswith('v') else v2
108
109
 
109
- logger.debug("Version parts: %s vs %s", v1_parts, v2_parts)
110
+ parsed_v1 = version.parse(v1_clean)
111
+ parsed_v2 = version.parse(v2_clean)
110
112
 
111
- for i in range(max(len(v1_parts), len(v2_parts))):
112
- v1_part = v1_parts[i] if i < len(v1_parts) else 0
113
- v2_part = v2_parts[i] if i < len(v2_parts) else 0
114
-
115
- logger.debug("Comparing part %d: %d vs %d", i, v1_part, v2_part)
116
-
117
- if v1_part < v2_part:
118
- logger.debug("Result: '%s' is OLDER than '%s'", v1, v2)
119
- return -1
120
- elif v1_part > v2_part:
121
- logger.debug("Result: '%s' is NEWER than '%s'", v1, v2)
122
- return 1
113
+ logger.debug("Parsed versions: %s vs %s", parsed_v1, parsed_v2)
123
114
 
124
- logger.debug("Result: versions are EQUAL")
125
- return 0
115
+ if parsed_v1 < parsed_v2:
116
+ logger.debug("Result: '%s' is OLDER than '%s'", v1, v2)
117
+ return -1
118
+ elif parsed_v1 > parsed_v2:
119
+ logger.debug("Result: '%s' is NEWER than '%s'", v1, v2)
120
+ return 1
121
+ else:
122
+ logger.debug("Result: versions are EQUAL")
123
+ return 0
126
124
  except Exception as e:
127
125
  logger.debug("Error comparing versions '%s' and '%s': %s", v1, v2, e)
128
- # On error, assume versions are equal
129
- return 0
126
+ # On error, fall back to simple string comparison to avoid crashes
127
+ logger.debug("Falling back to string comparison")
128
+ if v1 == v2:
129
+ return 0
130
+ elif v1 < v2:
131
+ return -1
132
+ else:
133
+ return 1
130
134
 
131
135
 
132
136
  def check_for_updates(quiet=False, force_refresh=False):