From 917bc984eb5ba52939b857b3280d2f77334f27bc Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Fri, 1 Jul 2016 14:44:25 -0700 Subject: [PATCH] Make DruidDatasource.version_higher support funky version strings (#706) --- caravel/models.py | 28 +++++++++++++++++++++++++--- tests/core_tests.py | 2 +- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/caravel/models.py b/caravel/models.py index e359044faddef..95c39750692b4 100644 --- a/caravel/models.py +++ b/caravel/models.py @@ -1083,9 +1083,31 @@ def get_metric_obj(self, metric_name): if m.metric_name == metric_name ][0] - def version_higher(self, v1, v2): - v1nums = [int(n) for n in v1.split('.')] - v2nums = [int(n) for n in v2.split('.')] + @staticmethod + def version_higher(v1, v2): + """is v1 higher than v2 + + >>> DruidDatasource.version_higher('0.8.2', '0.9.1') + False + >>> DruidDatasource.version_higher('0.8.2', '0.6.1') + True + >>> DruidDatasource.version_higher('0.8.2', '0.8.2') + False + >>> DruidDatasource.version_higher('0.8.2', '0.9.BETA') + False + >>> DruidDatasource.version_higher('0.8.2', '0.9') + False + """ + def int_or_0(v): + try: + v = int(v) + except Exception as e: + v = 0 + return v + v1nums = [int_or_0(n) for n in v1.split('.')] + v2nums = [int_or_0(n) for n in v2.split('.')] + v1nums = (v1nums + [0, 0, 0])[:3] + v2nums = (v2nums + [0, 0, 0])[:3] return v1nums[0] > v2nums[0] or \ (v1nums[0] == v2nums[0] and v1nums[1] > v2nums[1]) or \ (v1nums[0] == v2nums[0] and v1nums[1] == v2nums[1] and v1nums[2] > v2nums[2]) diff --git a/tests/core_tests.py b/tests/core_tests.py index 6b60a61ade64b..ad39fe6b7c3eb 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -164,7 +164,7 @@ def test_dashboard(self): assert escape(title) in self.client.get(url).data.decode('utf-8') def test_doctests(self): - modules = [utils] + modules = [utils, models] for mod in modules: failed, tests = doctest.testmod(mod) if failed: