From: duplo Date: Wed, 31 Mar 2010 10:49:51 +0000 (+0000) Subject: Change the loadBertosProject function to be a BProject method (and call it from the... X-Git-Tag: 2.5.0~566 X-Git-Url: https://codewiz.org/gitweb?a=commitdiff_plain;h=df9d729fb8f0f2d34197215920576381b895c7f7;p=bertos.git Change the loadBertosProject function to be a BProject method (and call it from the __init__ when needed). git-svn-id: https://src.develer.com/svnoss/bertos/trunk@3342 38d2e660-2303-0410-9eaa-f027e97ec537 --- diff --git a/wizard/BEditingDialog.py b/wizard/BEditingDialog.py index cc8a80aa..1ae0fd86 100644 --- a/wizard/BEditingDialog.py +++ b/wizard/BEditingDialog.py @@ -42,6 +42,9 @@ from PyQt4.QtGui import * from bertos_utils import loadBertosProject, bertosVersion, getToolchainName, createBertosProject from BToolchainPage import BToolchainPage from BVersionPage import BVersionPage + +from BProject import BProject + import qvariant_converter import BModulePage import bertos_utils @@ -235,7 +238,7 @@ def main(): print "Invalid usage: use project_file" sys.exit() app = QApplication([]) - app.project = loadBertosProject(project_file) + app.project = BProject(project_file) app.settings = QSettings("Develer", "Bertos Configurator") dialog = BEditingDialog() dialog.show() diff --git a/wizard/BProject.py b/wizard/BProject.py index eaff6d62..697355e8 100644 --- a/wizard/BProject.py +++ b/wizard/BProject.py @@ -37,15 +37,70 @@ import os import fnmatch import copy +from bertos_utils import * + class BProject(object): """ Simple class for store and retrieve project informations. """ - def __init__(self): + def __init__(self, project_file="", info_dict={}): self.infos = {} self._cached_queries = {} - + if project_file: + self.loadBertosProject(project_file, info_dict) + + def loadBertosProject(self, project_file, info_dict): + project_dir = os.path.dirname(project_file) + project_data = pickle.loads(open(project_file, "r").read()) + # If PROJECT_NAME is not defined it use the directory name as PROJECT_NAME + # NOTE: this can throw an Exception if the user has changed the directory containing the project + self.infos["PROJECT_NAME"] = project_data.get("PROJECT_NAME", os.path.basename(project_dir)) + self.infos["PROJECT_PATH"] = os.path.dirname(project_file) + # Check for the Wizard version + wizard_version = project_data.get("WIZARD_VERSION", 0) + # Ignore the SOURCES_PATH inside the project file + project_data["SOURCES_PATH"] = project_dir + if "SOURCES_PATH" in info_dict: + project_data["SOURCES_PATH"] = info_dict["SOURCES_PATH"] + if os.path.exists(project_data["SOURCES_PATH"]): + self.infos["SOURCES_PATH"] = project_data["SOURCES_PATH"] + else: + raise VersionException(self) + if not isBertosDir(project_dir): + version_file = open(os.path.join(const.DATA_DIR, "vtemplates/VERSION"), "r").read() + open(os.path.join(project_dir, "VERSION"), "w").write(version_file.replace("$version", "").strip()) + self.loadSourceTree() + cpu_name = project_data["CPU_NAME"] + self.infos["CPU_NAME"] = cpu_name + cpu_info = loadCpuInfos(self) + for cpu in cpu_info: + if cpu["CPU_NAME"] == cpu_name: + self.infos["CPU_INFOS"] = cpu + break + tag_list = getTagSet(cpu_info) + # Create, fill and store the dict with the tags + tag_dict = {} + for element in tag_list: + tag_dict[element] = False + infos = self.info("CPU_INFOS") + for tag in tag_dict: + if tag in infos["CPU_TAGS"] + [infos["CPU_NAME"], infos["TOOLCHAIN"]]: + tag_dict[tag] = True + else: + tag_dict[tag] = False + self.infos["ALL_CPU_TAGS"] = tag_dict + if "TOOLCHAIN" in info_dict: + project_data["TOOLCHAIN"] = info_dict["TOOLCHAIN"] + if os.path.exists(project_data["TOOLCHAIN"]["path"]): + self.infos["TOOLCHAIN"] = project_data["TOOLCHAIN"] + else: + raise ToolchainException(self) + self.infos["SELECTED_FREQ"] = project_data["SELECTED_FREQ"] + self.infos["OUTPUT"] = project_data["OUTPUT"] + loadModuleData(self, True) + setEnabledModules(self, project_data["ENABLED_MODULES"]) + def setInfo(self, key, value): """ Store the given value with the name key. @@ -68,7 +123,7 @@ class BProject(object): for element in os.walk(bertos_sources_dir): for f in element[2]: file_dict[f] = file_dict.get(f, []) + [element[0]] - self.setInfo("FILE_DICT", file_dict) + self.infos["FILE_DICT"] = file_dict def searchFiles(self, filename): file_dict = self.infos["FILE_DICT"] diff --git a/wizard/bertos.py b/wizard/bertos.py index 2d4b523d..91646b74 100755 --- a/wizard/bertos.py +++ b/wizard/bertos.py @@ -86,7 +86,7 @@ def editProject(project_file): info_dict = {} while(True): try: - QApplication.instance().project = bertos_utils.loadBertosProject(project_file, info_dict) + QApplication.instance().project = BProject.BProject(project_file, info_dict) except VersionException: QMessageBox.critical( None, diff --git a/wizard/bertos_utils.py b/wizard/bertos_utils.py index e291f56b..84a88257 100644 --- a/wizard/bertos_utils.py +++ b/wizard/bertos_utils.py @@ -57,59 +57,6 @@ def isBertosDir(directory): def bertosVersion(directory): return open(directory + "/VERSION").readline().strip() -def loadBertosProject(project_file, info_dict): - project_dir = os.path.dirname(project_file) - project_data = pickle.loads(open(project_file, "r").read()) - project_info = BProject.BProject() - # If PROJECT_NAME is not defined it use the directory name as PROJECT_NAME - # NOTE: this can throw an Exception if the user has changed the directory containing the project - project_info.setInfo("PROJECT_NAME", project_data.get("PROJECT_NAME", os.path.basename(project_dir))) - project_info.setInfo("PROJECT_PATH", os.path.dirname(project_file)) - # Check for the Wizard version - wizard_version = project_data.get("WIZARD_VERSION", 0) - # Ignore the SOURCES_PATH inside the project file - project_data["SOURCES_PATH"] = project_dir - if "SOURCES_PATH" in info_dict: - project_data["SOURCES_PATH"] = info_dict["SOURCES_PATH"] - if os.path.exists(project_data["SOURCES_PATH"]): - project_info.setInfo("SOURCES_PATH", project_data["SOURCES_PATH"]) - else: - raise VersionException(project_info) - if not isBertosDir(project_dir): - version_file = open(os.path.join(const.DATA_DIR, "vtemplates/VERSION"), "r").read() - open(os.path.join(project_dir, "VERSION"), "w").write(version_file.replace("$version", "").strip()) - project_info.loadSourceTree() - cpu_name = project_data["CPU_NAME"] - project_info.setInfo("CPU_NAME", cpu_name) - cpu_info = loadCpuInfos(project_info) - for cpu in cpu_info: - if cpu["CPU_NAME"] == cpu_name: - project_info.setInfo("CPU_INFOS", cpu) - break - tag_list = getTagSet(cpu_info) - # Create, fill and store the dict with the tags - tag_dict = {} - for element in tag_list: - tag_dict[element] = False - infos = project_info.info("CPU_INFOS") - for tag in tag_dict: - if tag in infos["CPU_TAGS"] + [infos["CPU_NAME"], infos["TOOLCHAIN"]]: - tag_dict[tag] = True - else: - tag_dict[tag] = False - project_info.setInfo("ALL_CPU_TAGS", tag_dict) - if "TOOLCHAIN" in info_dict: - project_data["TOOLCHAIN"] = info_dict["TOOLCHAIN"] - if os.path.exists(project_data["TOOLCHAIN"]["path"]): - project_info.setInfo("TOOLCHAIN", project_data["TOOLCHAIN"]) - else: - raise ToolchainException(project_info) - project_info.setInfo("SELECTED_FREQ", project_data["SELECTED_FREQ"]) - project_info.setInfo("OUTPUT", project_data["OUTPUT"]) - loadModuleData(project_info, True) - setEnabledModules(project_info, project_data["ENABLED_MODULES"]) - return project_info - def setEnabledModules(project_info, enabled_modules): modules = project_info.info("MODULES") files = {}