Skip to content

Commit 158c5dc

Browse files
committed
Add helpful dunder methods to Changelog class
1 parent 5189cdc commit 158c5dc

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

src/ansys/dpf/core/changelog.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from packaging.version import Version
2828

2929
import ansys.dpf.core as dpf
30+
from ansys.dpf.core.server_types import AnyServerType
3031

3132

3233
class Changelog:
@@ -42,7 +43,7 @@ class Changelog:
4243
The server to create the changelog on. Defaults to the current global server.
4344
"""
4445

45-
def __init__(self, gdc: dpf.GenericDataContainer = None, server=None):
46+
def __init__(self, gdc: dpf.GenericDataContainer = None, server: AnyServerType = None):
4647
if gdc is None:
4748
gdc = dpf.GenericDataContainer(server=server)
4849
versions_sf = dpf.StringField(server=server)
@@ -166,10 +167,22 @@ def versions(self) -> [Version]:
166167
)
167168
return [Version(version) for version in versions_sf.data_as_list]
168169

169-
def __getitem__(self, item: Version) -> str:
170-
"""Return changes description for a specific version in the changelog."""
170+
def __getitem__(self, item: Version | int) -> str | [Version, str]:
171+
"""Return item at the given index or changes description for the given version."""
172+
if isinstance(item, int):
173+
if item > len(self) - 1:
174+
raise IndexError(f"Index {item} out of range for changelog of size {len(self)}.")
175+
return self.versions[item], self.changes_for_version(self.versions[item])
171176
return self.changes_for_version(item)
172177

178+
def __len__(self):
179+
"""Return the number of items in the changelog."""
180+
return len(self.versions)
181+
182+
def __contains__(self, item: Version):
183+
"""Check if version is in the changelog."""
184+
return item in self.versions
185+
173186
def changes_for_version(self, version: Version) -> str:
174187
"""Return changes description for a specific version in the changelog."""
175188
versions_sf: dpf.StringField = self.gdc.get_property(

tests/test_changelog.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,13 @@ def test_changelog_updates(server_type):
5858
1.1.2 Patch 2
5959
"""
6060
)
61+
assert len(changelog) == 5
62+
assert changelog[0] == (Version("0.0.0"), "Initial version.")
63+
assert changelog[-1] == (Version("1.1.2"), "Patch 2")
64+
for i, v in enumerate(changelog):
65+
if i == 2:
66+
assert v == (Version("1.1.0"), "Minor bump")
67+
with pytest.raises(IndexError):
68+
_ = changelog[8]
69+
assert Version("0.0.0") in changelog
70+
assert Version("1.5.2") not in changelog

0 commit comments

Comments
 (0)