From 08da56721e6e421bb34094964a5137c687584c14 Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Thu, 22 Oct 2020 05:25:28 +0900 Subject: [PATCH 1/3] ARROW-10364: [Dev][Archery] Add support for semver 2.13.0 --- dev/archery/archery/release.py | 13 +++++++----- dev/archery/archery/tests/test_release.py | 26 +++++++++++------------ 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/dev/archery/archery/release.py b/dev/archery/archery/release.py index a6b9ecc4225..2839412cca8 100644 --- a/dev/archery/archery/release.py +++ b/dev/archery/archery/release.py @@ -39,16 +39,19 @@ class Version(SemVer): __slots__ = SemVer.__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..f64ab4b3a4b 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 From d6f3258b45e2f907fbdbaec94e2a4bd74aa6d276 Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Fri, 30 Oct 2020 11:05:07 +0900 Subject: [PATCH 2/3] Remove needless parent __slots__ --- dev/archery/archery/release.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/archery/archery/release.py b/dev/archery/archery/release.py index 2839412cca8..acfe3fc2373 100644 --- a/dev/archery/archery/release.py +++ b/dev/archery/archery/release.py @@ -37,7 +37,7 @@ def cached_property(fn): class Version(SemVer): - __slots__ = SemVer.__slots__ + ('released', 'release_date') + __slots__ = ('released', 'release_date') def __init__(self, released=False, release_date=None, **kwargs): super().__init__(**kwargs) From 67b225762be501c42e0fdcc2e69c410f32650cf8 Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Fri, 30 Oct 2020 11:11:38 +0900 Subject: [PATCH 3/3] Use parse --- dev/archery/archery/tests/test_release.py | 24 +++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/dev/archery/archery/tests/test_release.py b/dev/archery/archery/tests/test_release.py index f64ab4b3a4b..75aac892123 100644 --- a/dev/archery/archery/tests/test_release.py +++ b/dev/archery/archery/tests/test_release.py @@ -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):