1919
2020from pypsa ._options import options
2121from pypsa .definitions .structures import Dict
22- from pypsa .version import __version_semver__
22+ from pypsa .version import __version_base__
2323
2424if TYPE_CHECKING :
2525 from collections .abc import Callable , Sequence
@@ -154,7 +154,7 @@ def __get__(self, obj: Any, objtype: Any = None) -> Any:
154154
155155
156156@lru_cache (maxsize = 1 )
157- def _check_for_update (current_version : tuple , repo_owner : str , repo_name : str ) -> str :
157+ def _check_for_update (current_version : str , repo_owner : str , repo_name : str ) -> str :
158158 """Log a message if a newer version is available.
159159
160160 Checks the latest release on GitHub and compares it to the current version. Does
@@ -163,8 +163,8 @@ def _check_for_update(current_version: tuple, repo_owner: str, repo_name: str) -
163163
164164 Parameters
165165 ----------
166- current_version : tuple
167- The current version of the package as a tuple (major, minor, patch) .
166+ current_version : str
167+ The current version of the package as a semantic version string .
168168 repo_owner : str
169169 The owner of the repository.
170170 repo_name : str
@@ -193,12 +193,14 @@ def _check_for_update(current_version: tuple, repo_owner: str, repo_name: str) -
193193 response = request .urlopen (req ) # noqa: S310
194194 latest_version = json .loads (response .read ())["tag_name" ].replace ("v" , "" )
195195
196- # Simple version comparison
197- latest = tuple (map (int , latest_version .split ("." )))
196+ # Version comparison using packaging.version
197+ latest_parsed = version .parse (latest_version )
198+ current_parsed = version .parse (current_version )
198199
199- if latest > current_version :
200- current_version_str = "." .join (map (str , current_version ))
201- return f"New version { latest_version } available! (Current: { current_version_str } )"
200+ if latest_parsed > current_parsed :
201+ return (
202+ f"New version { latest_version } available! (Current: { current_version } )"
203+ )
202204
203205 except Exception : # noqa: S110
204206 pass
@@ -565,7 +567,7 @@ def decorator(func: Callable) -> Callable:
565567 return deprecated (
566568 deprecated_in = "1.0" ,
567569 removed_in = "2.0" ,
568- current_version = __version_semver__ ,
570+ current_version = __version_base__ ,
569571 details = details ,
570572 )(func )
571573
@@ -597,11 +599,11 @@ def deprecated_namespace(
597599 A wrapper function that warns about the deprecated namespace.
598600
599601 """
600- current_version = version .parse (__version_semver__ )
601- if version .parse (deprecated_in ) > current_version and __version_semver__ != "0.0" :
602+ current_version = version .parse (__version_base__ )
603+ if version .parse (deprecated_in ) > current_version and __version_base__ != "0.0" :
602604 msg = (
603605 "'deprecated_namespace' can only be used in a version >= deprecated_in "
604- f"(current version: { __version_semver__ } , deprecated_in: { deprecated_in } )."
606+ f"(current version: { __version_base__ } , deprecated_in: { deprecated_in } )."
605607 )
606608 raise ValueError (msg )
607609
0 commit comments