Path: blob/master/src/SentinelUtilities/SentinelUtils/version_management.py
3255 views
# -------------------------------------------------------------------------1# Copyright (c) Microsoft Corporation. All rights reserved.2# Licensed under the MIT License. See License.txt in the project root for3# license information.4# --------------------------------------------------------------------------5"""6Version Management:7This module is used to validate installed Python packages8that are required by Microsoft Sentinel Notebooks.9"""1011import sys12import pkg_resources1314# pylint: disable-msg=R090315class VersionInformation:16""" object model for version information """17name = ''18current_version = ''19required_version = ''20requirement_met = False21message = ''2223# pylint: disable-msg=R020124class ModuleVersionCheck:25""" class implements version checking """2627# pylint: disable=line-too-long28def validate_python(self, required_version):29""" validating Python version """30version = VersionInformation()31version.name = 'Python'32version.current_version = sys.version33version.required_version = required_version34version.requirement_met = sys.version_info >= tuple(int(x) for x in required_version.split("."))35version.message = VersionInformation.name + required_version + ' is required' if not VersionInformation.requirement_met else ''36return version3738# pylint: disable-msg=W070239def validate_installed_modules(self, module_list):40""" validating installed modules' version """41module_versions = []42for mod_info in module_list:43version = VersionInformation()44version.name, version.required_version = mod_info.split(">=")45try:46pkg_resources.require(mod_info)47version.requirement_met = True48except:49version.requirement_met = False50try:51version.message = str(sys.exc_info()[0].report)52except:53version.message = 'Unknown error'54finally:55if 'azure' in version.name and version.message.find("VersionConflict") >= 0:56version.requirement_met = True57elif version.message == '' or version.message.find("DistributionNotFound") < 0:58version = self.get_version_information(version, mod_info)5960module_versions.append(version)61return module_versions6263# pylint: disable-msg=W061364def get_version_information(self, version, mod_info):65""" get version information """66mod_list = pkg_resources.WorkingSet()67items = list(filter(lambda x: x.project_name.startswith(version.name), mod_list))68if not items:69version.current_version = items[0].version70return version7172# end of the class737475