Example #1
0
 def setUp(self):
     self.testClass = CheckResources()
     self.toolsSystem = ToolsSystem()
     self.distutils = distutils.util
Example #2
0
class CheckResources():


    toolsSystem = None  # Ссылка на объект ToolsSystem.
    distutils = None  # Ссылка на объект distutils.util

    def __init__(self):
        self.toolsSystem = ToolsSystem()
        self.distutils = distutils.util


    def check(self, type_, resources):
        """
        Проверка наличия указанного ресурса.

        Аргументы:
            type_ - (string) тип обрабатываемого ресурса.
            resources - (list) ресурс(ы) (ссылки на файлы или параметро операционной системы)
        Возвращает:
            При отсутсвии ошибок:
                None
            При возникновении ошибки:
                (string) - описание результата.
        Исключения:
            ValueError - переданы некорректное значение переменной.
            TypeError - переданн некорректный тип значений описания ресурсов.
        """

        # Проверка принадлежности resource к list()
        if not isinstance(resources, list):
            raise TypeError(u"Параметр resource не относится к типу list()")

        # Тип операционной системы (windows|linux):
        if type_ == "OS_TYPE":
            return self._checkOsType(resources)
        # Версия операционной сисмены конкретной платформы (для Windows: 5.1, 5.2, 6.0 и т.п.)
        elif type_ == "OS_VER":
            return self._checkOsVersion(resources)
        elif type_ == "OS_ARCH":
            return self._checkOsArch(resources)
        elif type_ == "FILE_EXIST":
            return self._checkFileExist(resources)
        else:
            raise TypeError(u"Передан неописанный тип ресурса %s" % type_)


    def _checkFileExist(self, resources):
        """ Проверка наличия файла.

        ВНИМАНИЕ: только для платформы Windows.

        Аргументв:
            resources (list) - список файлов, которые необходимо проверить.
        Возвращает:
            None - все файлы присутсвуют.
            (string) - описание ошибки, если хотя бы один файл отсутсвует.
        Исключения:
            ValueError - недопустимые аргументы.
        """
        if not len(resources):  # Если список пуст.
            raise ValueError(u"Список проверяемых на наличие файлов отсутсвует.")
        for item in resources:
            if not len(item):
                raise ValueError(u"Передано пустое имя файла.")
            if not os.path.exists(item):
                return u"Не обнаружен файл %s" % item


    def _checkOsArch(self, resources):
        """ Проверка архитектуры операционной системы.

        ВНИМАНИЕ: только для платформы Windows.

        Аргументы:
            resources (list) - список проверки принадлежности к архитектуре - x32|x64
        Возвращает:
            None - текущая архитектура в проверяемом списке есть.
            (string) - описание несоответствия.
        Исколючения:
            ValueError - указана недопустимая архитектура.
        """
        osArch = ["x32", "x64"]
        curArch = "x64" if self.distutils.get_platform().find("64") else "x32"  # Текущая архитектура комьпютера.
        if not len(resources):  # Если список пуст.
            return u"Неподдерживаемая архитектура " + curArch
        result = None  # Если при выходе остался None, значит архитектура есть в списке.
        for item in resources:
            if item not in osArch:  # Переданы некорректные параметры:
                raise ValueError(u"Передан неправильный идентификатор архитектуры: " + item)
            if item == curArch:
                result = None
                break
            else:
                result = u"Неподдерживаемая архитектура операционной системы: " + curArch
        if result:
            return result
        return None




    def _checkOsVersion(self, resources):
        """ Проверка версии операционной системы.

        ВНИМАНИЕ: только для платформы Windows.

        Аргументы:
            resources - (list) список проверямых на принадлежность версий платформы:
                        win2000, winxp, win2003, winvista, win7, win2008, win8
        Возвращает:
            None - текущая версия есть в проверяемом списке.
            (string) - сообщение о несоответсвии.
        Исключения:
            ValueError - указан некорректный идентификатор операционной системы.
        """
        result = None  # Если result останется None, значит указанная версия есть в списке.
        osVer = {  # Идентификаторы и номера версий Windows.
            "win2000": "5.0",
            "winxp": "5.1",
            "win2003": "5.2",
            "winvista": "6.0",
            "win7": "6.1",
            "win2008": "6.1",
            "win8": "6.2",
        }
        curVer = self.toolsSystem.getWindowsVersion()

        if not len(resources):  # Проверка на заполненность списка.
            return u"Неподдерживаемая версия Windows: " + curVer

        for item in resources:
            if item not in osVer:
                raise ValueError(u"Указан несуществующий иденификатор версии Windows: " + item)
            if sys.platform == "win32":
                if curVer != osVer[item]:
                    result = u"Неподдерживаемая версия Windows: " + curVer
                else:
                    result = None
                    break
            else:
                raise ValueError(u"Платформа %s не поддерживается для опознавания." % sys.platform)
        if result:
            return result
        return None


    def _checkOsType(self, resources):
        """ Проверка платформы операционной системы.

        Аргументы:
            resources - (list) список проверямых на принадлежность платформ (windows, linux)
        Возвращает:
            None - текущая платформа соответсвует проверяемой.
            (string) - сообщение о несоответсвии.
        """
        result = None  # Если result останется None, значит указанная платформа существует.
        for item in resources:
            if item.upper() == "WINDOWS":
                if sys.platform != "win32":
                    result = u"Не предназначено для платформы " + sys.platform
                else:
                    result = None
                    break
            elif item.upper() == "LINUX":
                if sys.platform.find("linux") == -1:
                    result = u"Не предназначен для пратформы " + sys.platform
                else:
                    result = None
                    break
            else:
                raise ValueError(u"Передан необрабатываемый или некорректный параметр: " + item)
        if result:
            return result
        return None
Example #3
0
class TestCheckResources(unittest.TestCase):
    """ Тестирование класса CheckResources.  """

    testClass = None  # Ссылка на тестируемый класс.
    toolsSystem = None  # Ссылка на класс toolSystem.
    distutils = None  # Ссылка на объект distutils.util


    def setUp(self):
        self.testClass = CheckResources()
        self.toolsSystem = ToolsSystem()
        self.distutils = distutils.util


    def testCheck(self):
        """ Тест класса check() """

        # Проверка типа:
        self.assertRaises(TypeError, self.testClass.check, "ERROR_TYPE", "Non list value")

        # Проверка OS_TYPE:
        self.assertRaises(TypeError, self.testClass.check, "OS_TYPE", "Non list value")
        self.assertRaises(ValueError, self.testClass.check, "OS_TYPE", ["error_value"])
        if sys.platform == "win32":
            self.assertNotEqual(self.testClass.check("OS_TYPE", ["linux"]), None)
            self.assertEqual(self.testClass.check("OS_TYPE", ["linux", "windows"]), None)
            self.assertEqual(self.testClass.check("OS_TYPE", ["windows"]), None)

        # Провека OS_VER:
        if sys.platform == "win32":
            osVer = {  # Идентификаторы и номера версий Windows.
                "5.0": "win2000",
                "5.1": "winxp",
                "5.2": "win2003",
                "6.0": "winvista",
                "6.1": "win7",
                "6.2": "win8",
               }
            curVer = self.toolsSystem.getWindowsVersion()
            self.assertRaises(ValueError, self.testClass.check, "OS_VER", ["error_value"])
            self.assertEqual(self.testClass.check("OS_VER", ["win2000", "win2003", osVer[curVer]]), None)
            if osVer[curVer] != "win2000":
                self.assertNotEqual(self.testClass.check("OS_VER", ["win2000"]), None)
            else:
                self.assertNotEqual(self.testClass.check("OS_VER", ["win2008"]), None)
            self.assertNotEqual(self.testClass.check("OS_VER", []), None)

        # Проверка OS_ARCH:
        if sys.platform == "win32":
            curArch = "x64" if self.distutils.get_platform().find("64") else "x32"  # Текущая архитектура комьпютера.
            self.assertNotEqual(self.testClass.check("OS_ARCH", []), None)
            self.assertRaises(ValueError, self.testClass.check, "OS_ARCH", ["error_value"])
            self.assertEqual(self.testClass.check("OS_ARCH", [curArch]), None)
            if curArch == "x64":
                self.assertNotEqual(self.testClass.check("OS_ARCH", ["x32"]), None)
            else:
                self.assertNotEqual(self.testClass.check("OS_ARCH", ["x64"]), None)

        # Прверка FILE_EXIST:
        self.assertRaises(ValueError, self.testClass.check, "FILE_EXIST", [])
        if os.path.exists("c:\\Windows\\explorer.exe"):
            self.assertEqual(self.testClass.check("FILE_EXIST", ["c:\\Windows\\explorer.exe"]), None)
            self.assertEqual(self.testClass.check("FILE_EXIST", ["c:\\Windows\\explorer.exe", "c:\\Windows\\explorer.exe"]), None)
            self.assertNotEqual(self.testClass.check("FILE_EXIST", ["c:\\Windows\\explorer.exe", "c:\\Windows\\NonFileExist.exe"]), None)
            self.assertRaises(ValueError, self.testClass.check, "FILE_EXIST", ["c:\\Windows\\explorer.exe", ""])
        self.assertNotEqual(self.testClass.check("FILE_EXIST", ["c:\\Windows\\NonFileExist.exe"]), None)
Example #4
0
 def __init__(self):
     self.toolsSystem = ToolsSystem()
     self.distutils = distutils.util