X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=wizard%2FBProject.py;h=eaff6d62612c6609cbbe2fe9a7de3f5cfb5d6bda;hb=cc03eb93224f06debc7f426acd9374076e8be834;hp=f2c1e9a1f376f3ed9d618cf08d3ebd39d4be0827;hpb=c97fa9a3c18281e501fe37eb169df8b3d476cad2;p=bertos.git diff --git a/wizard/BProject.py b/wizard/BProject.py index f2c1e9a1..eaff6d62 100644 --- a/wizard/BProject.py +++ b/wizard/BProject.py @@ -1,21 +1,90 @@ #!/usr/bin/env python # encoding: utf-8 # +# This file is part of BeRTOS. +# +# Bertos is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +# As a special exception, you may use this file as part of a free software +# library without restriction. Specifically, if other files instantiate +# templates or use macros or inline functions from this file, or you compile +# this file and link it with other files to produce an executable, this +# file does not by itself cause the resulting executable to be covered by +# the GNU General Public License. This exception does not however +# invalidate any other reasons why the executable file might be covered by +# the GNU General Public License. +# # Copyright 2008 Develer S.r.l. (http://www.develer.com/) -# All rights reserved. # -# $Id:$ +# $Id$ # # Author: Lorenzo Berni # +import os +import fnmatch +import copy + class BProject(object): + """ + Simple class for store and retrieve project informations. + """ def __init__(self): self.infos = {} + self._cached_queries = {} def setInfo(self, key, value): + """ + Store the given value with the name key. + """ self.infos[key] = value - def info(self, key): - return self.infos[key] \ No newline at end of file + def info(self, key, default=None): + """ + Retrieve the value associated with the name key. + """ + 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