diff --git a/dev/archery/archery/release.py b/dev/archery/archery/release.py index a6b9ecc4225..acfe3fc2373 100644 --- a/dev/archery/archery/release.py +++ b/dev/archery/archery/release.py @@ -37,18 +37,21 @@ def cached_property(fn): class Version(SemVer): - __slots__ = SemVer.__slots__ + ('released', 'release_date') + __slots__ = ('released', 'release_date') - def __init__(self, version_string, released=False, release_date=None): - semver = SemVer.parse(version_string) - super().__init__(**semver.to_dict()) + def __init__(self, released=False, release_date=None, **kwargs): + super().__init__(**kwargs) self.released = released self.release_date = release_date + @classmethod + def parse(cls, version, **kwargs): + return cls(**SemVer.parse(version).to_dict(), **kwargs) + @classmethod def from_jira(cls, jira_version): - return cls( - version_string=jira_version.name, + return cls.parse( + jira_version.name, released=jira_version.released, release_date=getattr(jira_version, 'releaseDate', None) ) diff --git a/dev/archery/archery/tests/test_release.py b/dev/archery/archery/tests/test_release.py index ed7732df480..75aac892123 100644 --- a/dev/archery/archery/tests/test_release.py +++ b/dev/archery/archery/tests/test_release.py @@ -69,17 +69,17 @@ def __init__(self): def project_versions(self, project='ARROW'): return [ - Version("3.0.0", released=False), - Version("2.0.0", released=False), - Version("1.1.0", released=False), - Version("1.0.1", released=False), - Version("1.0.0", released=True), - Version("0.17.1", released=True), - Version("0.17.0", released=True), - Version("0.16.0", released=True), - Version("0.15.2", released=True), - Version("0.15.1", released=True), - Version("0.15.0", released=True), + Version.parse("3.0.0", released=False), + Version.parse("2.0.0", released=False), + Version.parse("1.1.0", released=False), + Version.parse("1.0.1", released=False), + Version.parse("1.0.0", released=True), + Version.parse("0.17.1", released=True), + Version.parse("0.17.0", released=True), + Version.parse("0.16.0", released=True), + Version.parse("0.15.2", released=True), + Version.parse("0.15.1", released=True), + Version.parse("0.15.0", released=True), ] def project_issues(self, version, project='ARROW'): @@ -92,7 +92,7 @@ def fake_jira(): def test_version(fake_jira): - v = Version("1.2.5") + v = Version.parse("1.2.5") assert str(v) == "1.2.5" assert v.major == 1 assert v.minor == 2 @@ -100,7 +100,7 @@ def test_version(fake_jira): assert v.released is False assert v.release_date is None - v = Version("1.0.0", released=True, release_date="2020-01-01") + v = Version.parse("1.0.0", released=True, release_date="2020-01-01") assert str(v) == "1.0.0" assert v.major == 1 assert v.minor == 0 @@ -228,43 +228,43 @@ def test_release_basics(fake_jira): def test_previous_and_next_release(fake_jira): r = Release.from_jira("3.0.0", jira=fake_jira) assert isinstance(r.previous, MajorRelease) - assert r.previous.version == Version("2.0.0") + assert r.previous.version == Version.parse("2.0.0") with pytest.raises(ValueError, match="There is no upcoming release set"): assert r.next r = Release.from_jira("2.0.0", jira=fake_jira) assert isinstance(r.previous, MajorRelease) assert isinstance(r.next, MajorRelease) - assert r.previous.version == Version("1.0.0") - assert r.next.version == Version("3.0.0") + assert r.previous.version == Version.parse("1.0.0") + assert r.next.version == Version.parse("3.0.0") r = Release.from_jira("1.1.0", jira=fake_jira) assert isinstance(r.previous, MajorRelease) assert isinstance(r.next, MajorRelease) - assert r.previous.version == Version("1.0.0") - assert r.next.version == Version("2.0.0") + assert r.previous.version == Version.parse("1.0.0") + assert r.next.version == Version.parse("2.0.0") r = Release.from_jira("1.0.0", jira=fake_jira) assert isinstance(r.next, MajorRelease) assert isinstance(r.previous, MajorRelease) - assert r.previous.version == Version("0.17.0") - assert r.next.version == Version("2.0.0") + assert r.previous.version == Version.parse("0.17.0") + assert r.next.version == Version.parse("2.0.0") r = Release.from_jira("0.17.0", jira=fake_jira) assert isinstance(r.previous, MajorRelease) - assert r.previous.version == Version("0.16.0") + assert r.previous.version == Version.parse("0.16.0") r = Release.from_jira("0.15.2", jira=fake_jira) assert isinstance(r.previous, PatchRelease) assert isinstance(r.next, MajorRelease) - assert r.previous.version == Version("0.15.1") - assert r.next.version == Version("0.16.0") + assert r.previous.version == Version.parse("0.15.1") + assert r.next.version == Version.parse("0.16.0") r = Release.from_jira("0.15.1", jira=fake_jira) assert isinstance(r.previous, MajorRelease) assert isinstance(r.next, PatchRelease) - assert r.previous.version == Version("0.15.0") - assert r.next.version == Version("0.15.2") + assert r.previous.version == Version.parse("0.15.0") + assert r.next.version == Version.parse("0.15.2") def test_release_issues(fake_jira):