X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=wizard%2FBProject.py;h=eaff6d62612c6609cbbe2fe9a7de3f5cfb5d6bda;hb=cc03eb93224f06debc7f426acd9374076e8be834;hp=d5fd34bc3fe9b5053f683ef6cfd5f7441e1d5bb4;hpb=bcc49085f310cc8f30075b0f8577767f1668c860;p=bertos.git diff --git a/wizard/BProject.py b/wizard/BProject.py index d5fd34bc..eaff6d62 100644 --- a/wizard/BProject.py +++ b/wizard/BProject.py @@ -33,6 +33,8 @@ # Author: Lorenzo Berni # +import os +import fnmatch import copy class BProject(object): @@ -42,6 +44,7 @@ class BProject(object): def __init__(self): self.infos = {} + self._cached_queries = {} def setInfo(self, key, value): """ @@ -56,6 +59,32 @@ class BProject(object): if key in self.infos: return copy.deepcopy(self.infos[key]) return default - + + def loadSourceTree(self): + # Index only the SOURCES_PATH/bertos content + bertos_sources_dir = os.path.join(self.info("SOURCES_PATH"), 'bertos') + file_dict = {} + if os.path.exists(bertos_sources_dir): + 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) + + def searchFiles(self, filename): + file_dict = self.infos["FILE_DICT"] + return [(filename, dirname) for dirname in file_dict.get(filename, [])] + + def findDefinitions(self, ftype): + definitions = self._cached_queries.get(ftype, None) + if definitions is not None: + return definitions + file_dict = self.infos["FILE_DICT"] + definitions = [] + 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 + return definitions + def __repr__(self): return repr(self.infos) \ No newline at end of file