X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=wizard%2FBProject.py;h=866d5be977f15650e86e7fdff941002cd6d2a394;hb=e47f203a5648786cd782d921880a77a395570059;hp=2eb1bdcfb32fd714d3f393937f97629199649fb9;hpb=e5652672a648b1a8b77e497f1dfc7239c382811f;p=bertos.git diff --git a/wizard/BProject.py b/wizard/BProject.py index 2eb1bdcf..866d5be9 100644 --- a/wizard/BProject.py +++ b/wizard/BProject.py @@ -40,12 +40,16 @@ import pickle import DefineException +from LoadException import VersionException, ToolchainException + +import const + from bertos_utils import ( # Utility functions - isBertosDir, loadCpuInfos, getTagSet, setEnabledModules, + isBertosDir, getTagSet, setEnabledModules, getInfos, loadConfigurationInfos, loadDefineLists, loadModuleDefinition, getCommentList, updateConfigurationValues, - + # Custom exceptions ParseError, SupportedException ) @@ -54,7 +58,7 @@ class BProject(object): """ Simple class for store and retrieve project informations. """ - + def __init__(self, project_file="", info_dict={}): self.infos = {} self._cached_queries = {} @@ -84,7 +88,7 @@ class BProject(object): self.loadSourceTree() cpu_name = project_data["CPU_NAME"] self.infos["CPU_NAME"] = cpu_name - cpu_info = loadCpuInfos(self) + cpu_info = self.loadCpuInfos() for cpu in cpu_info: if cpu["CPU_NAME"] == cpu_name: self.infos["CPU_INFOS"] = cpu @@ -112,6 +116,12 @@ class BProject(object): self.loadModuleData(True) setEnabledModules(self, project_data["ENABLED_MODULES"]) + def loadProjectPresets(self, preset_directory): + # This method will save: + # "CPU_NAME" + # ... + pass + def loadModuleData(self, edit=False): module_info_dict = {} list_info_dict = {} @@ -165,13 +175,23 @@ class BProject(object): self.infos["CONFIGURATIONS"] = configuration_info_dict self.infos["FILES"] = file_dict + def loadCpuInfos(self): + cpuInfos = [] + for definition in self.findDefinitions(const.CPU_DEFINITION): + cpuInfos.append(getInfos(definition)) + return cpuInfos + + def reloadCpuInfo(self): + for cpu_info in self.loadCpuInfos(): + if cpu_info["CPU_NAME"] == self.infos["CPU_NAME"]: + self.infos["CPU_INFOS"] = cpu_info def setInfo(self, key, value): """ Store the given value with the name key. """ self.infos[key] = value - + def info(self, key, default=None): """ Retrieve the value associated with the name key. @@ -195,7 +215,9 @@ class BProject(object): return [(filename, dirname) for dirname in file_dict.get(filename, [])] def findDefinitions(self, ftype): - definitions = self._cached_queries.get(ftype, None) + # Maintain a cache for every scanned SOURCES_PATH + definitions_dict = self._cached_queries.get(self.infos["SOURCES_PATH"], {}) + definitions = definitions_dict.get(ftype, None) if definitions is not None: return definitions file_dict = self.infos["FILE_DICT"] @@ -203,7 +225,12 @@ class BProject(object): for filename in file_dict: if fnmatch.fnmatch(filename, ftype): definitions += [(filename, dirname) for dirname in file_dict.get(filename, [])] - self._cached_queries[ftype] = definitions + + # If no cache for the current SOURCES_PATH create an empty one + if not definitions_dict: + self._cached_queries[self.infos["SOURCES_PATH"]] = {} + # Fill the empty cache with the result + self._cached_queries[self.infos["SOURCES_PATH"]][ftype] = definitions return definitions def __repr__(self):