From 7b1c798b4cd687e300668e7a812246bf0dabc7aa Mon Sep 17 00:00:00 2001 From: mthiesse Date: Wed, 10 Dec 2014 09:13:41 -0800 Subject: [PATCH] [Telemetry] Version checking code for optional dependencies. BUG=437525 Review URL: https://codereview.chromium.org/777313003 Cr-Commit-Position: refs/heads/master@{#307722} --- tools/telemetry/telemetry/util/external_modules.py | 43 ++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 tools/telemetry/telemetry/util/external_modules.py diff --git a/tools/telemetry/telemetry/util/external_modules.py b/tools/telemetry/telemetry/util/external_modules.py new file mode 100644 index 000000000000..4d2bc83515db --- /dev/null +++ b/tools/telemetry/telemetry/util/external_modules.py @@ -0,0 +1,43 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import importlib + +from distutils import version + +MODULES = { + 'cv2': (version.StrictVersion('2.4.8'), version.StrictVersion('3.0.0')), + 'numpy': (version.StrictVersion('1.6.1'), None), +} + +def ImportOptionalModule(module): + """Tries to import the desired module. + + Raises: + ImportError: The import failed.""" + versions = MODULES.get(module) + if versions is None: + raise NotImplementedError('Please teach telemetry about module %s.' % + module) + min_version, max_version = versions + + module = importlib.import_module(module) + try: + if ((min_version is not None and + version.StrictVersion(module.__version__) < min_version) or + (max_version is not None and + version.StrictVersion(module.__version__) >= max_version)): + raise ImportError(('Incorrect {0} version found, expected {1} <= version ' + '< {2}, found version {3}').format( + module, min_version, max_version, module.__version__)) + except ValueError as e: + # This error is raised when a module returns and incorrectly formatted + # version string. ex. '$build 1456a' + if 'invalid version number' in str(e): + raise ImportError(('Incorrectly formatted {0} version found, expected ' + '{1} <= version < {2}, found version {3}').format( + module, min_version, max_version, module.__version__)) + else: + raise + return module -- 2.11.4.GIT