Skip to content

Commit 9b2edd9

Browse files
committed
add last version
1 parent bf2864f commit 9b2edd9

File tree

3 files changed

+100
-1
lines changed

3 files changed

+100
-1
lines changed

docs/docs/api.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
::: pum.changelog.Changelog
44
::: pum.changelog.list_changelogs
5+
::: pum.changelog.last_version
56
::: pum.migration_parameter_definition.MigrationParameterDefintion
67
::: pum.config.PumConfig
78
::: pum.schema_migrations.SchemaMigrations

pum/changelog.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77

88

99
class Changelog:
10-
"""This class represent a changelog directory."""
10+
"""
11+
This class represent a changelog directory.
12+
The directory name is the version of the changelog.
13+
"""
1114

1215
def __init__(self, dir):
1316
self.dir = dir
@@ -17,6 +20,30 @@ def __repr__(self):
1720
return f"<dir: {self.dir} (v: {self.version})>"
1821

1922

23+
def last_version(
24+
config: PumConfig,
25+
dir: str | Path = ".",
26+
after_version: str | None = None,
27+
before_version: str | None = None,
28+
) -> str | None:
29+
"""
30+
Return the last version of the changelogs.
31+
The changelogs are sorted by version.
32+
If after_current_version is True, only the changelogs that are after the current version will be returned.
33+
If after_current_version is False, all changelogs will be returned.
34+
"""
35+
changelogs = list_changelogs(config, dir, after_version, before_version)
36+
if not changelogs:
37+
return None
38+
if after_version:
39+
changelogs = [c for c in changelogs if c.version > parse_version(after_version)]
40+
if before_version:
41+
changelogs = [c for c in changelogs if c.version < parse_version(before_version)]
42+
if not changelogs:
43+
return None
44+
return changelogs[-1].version
45+
46+
2047
def list_changelogs(
2148
config: PumConfig,
2249
dir: str | Path = ".",

test/test_changelog.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import unittest
2+
from pathlib import Path
3+
4+
5+
from pum.config import PumConfig
6+
from pum.changelog import list_changelogs, last_version
7+
from packaging.version import parse as parse_version
8+
9+
10+
class TestChangelog(unittest.TestCase):
11+
"""
12+
Test the class Upgrader.
13+
"""
14+
15+
def test_changelog(self):
16+
cfg = PumConfig()
17+
changelogs = list_changelogs(config=cfg, dir=Path("test") / "data" / "single_changelog")
18+
self.assertEqual(len(changelogs), 1)
19+
self.assertEqual(changelogs[0].version, parse_version("1.2.3"))
20+
21+
mulitple_dir = Path("test") / "data" / "multiple_changelogs"
22+
23+
changelogs = list_changelogs(config=cfg, dir=mulitple_dir)
24+
self.assertEqual(len(changelogs), 4)
25+
self.assertEqual(changelogs[0].version, parse_version("1.2.3"))
26+
self.assertEqual(changelogs[1].version, parse_version("1.2.4"))
27+
self.assertEqual(changelogs[2].version, parse_version("1.3.0"))
28+
self.assertEqual(changelogs[3].version, parse_version("2.0.0"))
29+
30+
last_version_result = last_version(config=cfg, dir=mulitple_dir)
31+
self.assertEqual(last_version_result, parse_version("2.0.0"))
32+
33+
last_version_result = last_version(
34+
config=cfg,
35+
dir=str(Path("test") / "data" / "multiple_changelogs"),
36+
after_version="1.2.3",
37+
before_version="1.3.0",
38+
)
39+
self.assertEqual(last_version_result, parse_version("1.2.4"))
40+
41+
last_version_result = last_version(
42+
config=cfg,
43+
dir=str(Path("test") / "data" / "multiple_changelogs"),
44+
before_version="1.3.0",
45+
)
46+
self.assertEqual(last_version_result, parse_version("1.2.4"))
47+
48+
last_version_result = last_version(
49+
config=cfg,
50+
dir=str(Path("test") / "data" / "multiple_changelogs"),
51+
before_version="1.2.3",
52+
)
53+
self.assertIsNone(last_version_result)
54+
55+
last_version_result = last_version(
56+
config=cfg,
57+
dir=str(Path("test") / "data" / "multiple_changelogs"),
58+
after_version="1.2.3",
59+
)
60+
self.assertEqual(last_version_result, parse_version("2.0.0"))
61+
62+
last_version_result = last_version(
63+
config=cfg,
64+
dir=str(Path("test") / "data" / "multiple_changelogs"),
65+
after_version="2.0.0",
66+
)
67+
self.assertIsNone(last_version_result)
68+
69+
70+
if __name__ == "__main__":
71+
unittest.main()

0 commit comments

Comments
 (0)