From f46851a3b4a1c00fa807266e061cc5128a7059c4 Mon Sep 17 00:00:00 2001 From: Marc Bonnici Date: Fri, 28 Jun 2019 11:58:41 +0100 Subject: [PATCH] utils/types: Add `version_tuple` Allow for `version_tuple` to be used more generically to enable natural comparing of versions encoded as strings. --- wa/framework/resource.py | 4 ++-- wa/framework/workload.py | 2 +- wa/utils/types.py | 7 +++++++ wa/workloads/geekbench/__init__.py | 7 ++----- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/wa/framework/resource.py b/wa/framework/resource.py index a8ae1909..4faec080 100644 --- a/wa/framework/resource.py +++ b/wa/framework/resource.py @@ -284,8 +284,8 @@ def apk_version_matches(path, version): def loose_version_matching(config_version, apk_version): - config_version = config_version.split('.') - apk_version = apk_version.split('.') + config_version = version_tuple(config_version) + apk_version = version_tuple(apk_version) if len(apk_version) < len(config_version): return False # More specific version requested than available diff --git a/wa/framework/workload.py b/wa/framework/workload.py index 16185d8a..8b15ce1c 100644 --- a/wa/framework/workload.py +++ b/wa/framework/workload.py @@ -28,7 +28,7 @@ from wa.framework.plugin import TargetedPlugin, Parameter from wa.framework.resource import (ApkFile, ReventFile, File, loose_version_matching) from wa.framework.exception import WorkloadError, ConfigError -from wa.utils.types import ParameterDict, list_or_string +from wa.utils.types import ParameterDict, list_or_string, version_tuple from wa.utils.revent import ReventRecorder from wa.utils.exec_control import once_per_instance diff --git a/wa/utils/types.py b/wa/utils/types.py index 751e0bbf..68caec93 100644 --- a/wa/utils/types.py +++ b/wa/utils/types.py @@ -208,6 +208,13 @@ def regex(value): return re.compile(value) +def version_tuple(v): + """ + Converts a version string into a tuple of ints that can be used for natural comparison. + """ + return tuple(map(int, (v.split(".")))) + + __counters = defaultdict(int) diff --git a/wa/workloads/geekbench/__init__.py b/wa/workloads/geekbench/__init__.py index 82a01ed0..5c8066e1 100644 --- a/wa/workloads/geekbench/__init__.py +++ b/wa/workloads/geekbench/__init__.py @@ -23,6 +23,7 @@ from collections import defaultdict from wa import ApkUiautoWorkload, Parameter from wa.framework.exception import ConfigError, WorkloadError from wa.utils.misc import capitalize +from wa.utils.types import version_tuple class Geekbench(ApkUiautoWorkload): @@ -101,7 +102,7 @@ class Geekbench(ApkUiautoWorkload): def update_output(self, context): super(Geekbench, self).update_output(context) if not self.disable_update_result: - major_version = versiontuple(self.version)[0] + major_version = version_tuple(self.version)[0] update_method = getattr(self, 'update_result_{}'.format(major_version)) update_method(context) @@ -367,7 +368,3 @@ class GeekbenchCorproate(Geekbench): # pylint: disable=too-many-ancestors def namemify(basename, i): return basename + (' {}'.format(i) if i else '') - - -def versiontuple(v): - return tuple(map(int, (v.split("."))))