From 42a54556a5bda6f87b12cb7fe83f128abcf51de2 Mon Sep 17 00:00:00 2001 From: duplo Date: Wed, 4 Feb 2009 11:29:32 +0000 Subject: [PATCH] Add the new parsing exception infrastructure git-svn-id: https://src.develer.com/svnoss/bertos/trunk@2258 38d2e660-2303-0410-9eaa-f027e97ec537 --- wizard/BModulePage.py | 29 ++++++++-------- wizard/bertos_utils.py | 76 ++++++++++++++++++++++++------------------ 2 files changed, 56 insertions(+), 49 deletions(-) diff --git a/wizard/BModulePage.py b/wizard/BModulePage.py index f3edd0e6..deed395e 100644 --- a/wizard/BModulePage.py +++ b/wizard/BModulePage.py @@ -15,6 +15,7 @@ from PyQt4.QtGui import * from BWizardPage import * import bertos_utils +from DefineException import * from const import * class BModulePage(BWizardPage): @@ -39,25 +40,21 @@ class BModulePage(BWizardPage): def _loadModuleData(self): try: modules = bertos_utils.loadModuleInfosDict(self._projectInfoRetrieve("SOURCES_PATH")) - except SyntaxError: - self._exceptionOccurred(self.tr("Wrong syntax in module definitions")) - return - try: lists = bertos_utils.loadDefineListsDict(self._projectInfoRetrieve("SOURCES_PATH")) - except SyntaxError: - self._exceptionOccurred(self.tr("Wrong syntax in enum definitions")) - return - configurations = {} - for module, informations in modules.items(): - try: + configurations = {} + for module, informations in modules.items(): configurations[informations["configuration"]] = bertos_utils.loadConfigurationInfos(self._projectInfoRetrieve("SOURCES_PATH") + "/" + informations["configuration"]) - except SyntaxError: - self._exceptionOccurred(self.tr("Wrong syntax in %1 configuration file").arg(informations["configuration"])) - return - self._projectInfoStore("MODULES", modules) - self._projectInfoStore("LISTS", lists) - self._projectInfoStore("CONFIGURATIONS", configurations) + except ModuleDefineException, e: + self._exceptionOccurred(self.tr("Error parsing module information in file %1").arg(e.parameter)) + except EnumDefineException, e: + self._exceptionOccurred(self.tr("Error parsing enum informations in file %1").arg(e.parameter)) + except ConfigurationDefineException, e: + self._exceptionOccurred(self.tr("Error parsing configuration informations in file %1").arg(e.parameter)) + else: + self._projectInfoStore("MODULES", modules) + self._projectInfoStore("LISTS", lists) + self._projectInfoStore("CONFIGURATIONS", configurations) def _fillModuleTable(self): modules = self._projectInfoRetrieve("MODULES") diff --git a/wizard/bertos_utils.py b/wizard/bertos_utils.py index a687bfe0..d405130f 100644 --- a/wizard/bertos_utils.py +++ b/wizard/bertos_utils.py @@ -16,6 +16,7 @@ import re import shutil import const +import DefineException def isBertosDir(directory): return os.path.exists(directory + "/VERSION") @@ -201,15 +202,18 @@ def loadConfigurationInfos(path): "long": boolean indicating if the num is a long "value_list": the name of the enum for enum parameters """ - configurationInfos = {} - for comment, define in getDefinitionBlocks(open(path, "r").read()): - name, value = formatParamNameValue(define) - description, informations = getDescriptionInformations(comment) - configurationInfos[name] = {} - configurationInfos[name]["value"] = value - configurationInfos[name]["informations"] = informations - configurationInfos[name]["description"] = description - return configurationInfos + try: + configurationInfos = {} + for comment, define in getDefinitionBlocks(open(path, "r").read()): + name, value = formatParamNameValue(define) + description, informations = getDescriptionInformations(comment) + configurationInfos[name] = {} + configurationInfos[name]["value"] = value + configurationInfos[name]["informations"] = informations + configurationInfos[name]["description"] = description + return configurationInfos + except SyntaxError: + raise DefineException.ConfigurationDefineException(path) def loadModuleInfos(path): """ @@ -222,20 +226,23 @@ def loadModuleInfos(path): "enabled": contains False but the wizard will change if the user select the module """ - moduleInfos = {} - string = open(path, "r").read() - commentList = re.findall(r"/\*{2}\s*([^*]*\*(?:[^/*][^*]*\*+)*)/", string) - commentList = [" ".join(re.findall(r"^\s*\*?\s*(.*?)\s*?(?:/{2}.*?)?$", comment, re.MULTILINE)).strip() for comment in commentList] - for comment in commentList: - index = comment.find("$WIZARD_MODULE") - if index != -1: - exec(comment[index + 1:]) - moduleInfos[WIZARD_MODULE["name"]] = {"depends": WIZARD_MODULE["depends"], - "configuration": WIZARD_MODULE["configuration"], - "description": "", - "enabled": False} - return moduleInfos - return {} + try: + moduleInfos = {} + string = open(path, "r").read() + commentList = re.findall(r"/\*{2}\s*([^*]*\*(?:[^/*][^*]*\*+)*)/", string) + commentList = [" ".join(re.findall(r"^\s*\*?\s*(.*?)\s*?(?:/{2}.*?)?$", comment, re.MULTILINE)).strip() for comment in commentList] + for comment in commentList: + index = comment.find("$WIZARD_MODULE") + if index != -1: + exec(comment[index + 1:]) + moduleInfos[WIZARD_MODULE["name"]] = {"depends": WIZARD_MODULE["depends"], + "configuration": WIZARD_MODULE["configuration"], + "description": "", + "enabled": False} + return moduleInfos + return {} + except SyntaxError: + raise DefineException.ModuleDefineException(path) def loadModuleInfosDict(path): """ @@ -250,16 +257,19 @@ def loadDefineLists(path): """ Return a dict with the name of the list as key and a list of string as value """ - string = open(path, "r").read() - commentList = re.findall(r"/\*{2}\s*([^*]*\*(?:[^/*][^*]*\*+)*)/", string) - commentList = [" ".join(re.findall(r"^\s*\*?\s*(.*?)\s*?(?:/{2}.*?)?$", comment, re.MULTILINE)).strip() for comment in commentList] - listDict = {} - for comment in commentList: - index = comment.find("$WIZARD_LIST") - if index != -1: - exec(comment[index + 1:]) - listDict.update(WIZARD_LIST) - return listDict + try: + string = open(path, "r").read() + commentList = re.findall(r"/\*{2}\s*([^*]*\*(?:[^/*][^*]*\*+)*)/", string) + commentList = [" ".join(re.findall(r"^\s*\*?\s*(.*?)\s*?(?:/{2}.*?)?$", comment, re.MULTILINE)).strip() for comment in commentList] + listDict = {} + for comment in commentList: + index = comment.find("$WIZARD_LIST") + if index != -1: + exec(comment[index + 1:]) + listDict.update(WIZARD_LIST) + return listDict + except SyntaxError: + raise DefineException.EnumDefineException(path) def loadDefineListsDict(path): """ -- 2.25.1