versionutils: Add support for post-Z releases

OpenStack has already reached its Z release. Add handling for post-Z
releases such as 2023.1 (Antelope), so that consumers can use
the common definition instead of hard-coding release names.

Change-Id: I7a0d907c50a6ab60f3c71c4f74dd5c0774dbdeb7
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
This commit is contained in:
Takashi Kajinami
2025-12-18 00:23:09 +09:00
parent 719416866f
commit d0f0bf3ee5
3 changed files with 54 additions and 18 deletions

View File

@@ -69,9 +69,9 @@ class DeprecatedTestCase(test_base.BaseTestCase):
self.assertThat(retval, matchers.Equals((1, 'of anything')))
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_with_unknown_future_release(self, mock_reporter):
def test_deprecated_with_old_style_release(self, mock_reporter):
@versionutils.deprecated(
as_of=versionutils.deprecated.BEXAR,
as_of=versionutils.deprecated.ZED,
in_favor_of='different_stuff()',
)
def do_outdated_stuff():
@@ -83,8 +83,27 @@ class DeprecatedTestCase(test_base.BaseTestCase):
mock_reporter,
what='do_outdated_stuff()',
in_favor_of='different_stuff()',
as_of='Bexar',
remove_in='D',
as_of='Zed',
remove_in='2023.2',
)
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_with_new_style_release(self, mock_reporter):
@versionutils.deprecated(
as_of=versionutils.deprecated.ANTELOPE,
in_favor_of='different_stuff()',
)
def do_outdated_stuff():
return
do_outdated_stuff()
self.assert_deprecated(
mock_reporter,
what='do_outdated_stuff()',
in_favor_of='different_stuff()',
as_of='2023.1',
remove_in='2024.1',
)
@mock.patch('oslo_log.versionutils.report_deprecated_feature')

View File

@@ -65,9 +65,6 @@ _deprecated_msg_with_no_alternative_no_removal = _(
_RELEASES = {
# NOTE(morganfainberg): Bexar is used for unit test purposes, it is
# expected we maintain a gap between Bexar and Folsom in this list.
'B': 'Bexar',
'F': 'Folsom',
'G': 'Grizzly',
'H': 'Havana',
@@ -89,8 +86,22 @@ _RELEASES = {
'X': 'Xena',
'Y': 'Yoga',
'Z': 'Zed',
'2023.1': '2023.1',
'2023.2': '2023.2',
'2024.1': '2024.1',
'2024.2': '2024.2',
'2025.1': '2025.1',
'2025.2': '2025.2',
'2026.1': '2026.1',
'2026.2': '2026.2',
'2027.1': '2027.1',
'2027.2': '2027.2',
'2028.1': '2028.1',
'2028.2': '2028.2',
}
_RELEASE_KEYS = list(_RELEASES)
def register_options() -> None:
"""Register configuration options used by this library.
@@ -154,9 +165,6 @@ class deprecated:
"""
# NOTE(morganfainberg): Bexar is used for unit test purposes, it is
# expected we maintain a gap between Bexar and Folsom in this list.
BEXAR = 'B'
FOLSOM = 'F'
GRIZZLY = 'G'
HAVANA = 'H'
@@ -178,6 +186,13 @@ class deprecated:
XENA = 'X'
YOGA = 'Y'
ZED = 'Z'
ANTELOPE = '2023.1'
BOBCAT = '2023.2'
CARACAL = '2024.1'
DALMATIAN = '2024.2'
EPOXY = '2025.1'
FLAMINGO = '2026.1'
GAZPACHO = '2026.2'
def __init__(
self,
@@ -265,16 +280,14 @@ class deprecated:
def _get_safe_to_remove_release(release: str, remove_in: int | None) -> str:
# TODO(dstanek): this method will have to be reimplemented once
# when we get to the X release because once we get to the Y
# release, what is Y+2?
if remove_in is None:
remove_in = 0
new_release = chr(ord(release) + remove_in)
if new_release in _RELEASES:
return _RELEASES[new_release]
else:
return new_release
new_release_idx = _RELEASE_KEYS.index(release) + remove_in
try:
return _RELEASES[_RELEASE_KEYS[new_release_idx]]
except IndexError:
return 'UNKOWN'
def deprecation_warning(

View File

@@ -0,0 +1,4 @@
---
features:
- |
The ``oslo_log.versionutils`` module now supports releases after Zed.