Example #1
0
    def removeFile(self, filePath):
        shelve = self._shelve

        if filePath in shelve:
            try:
                for key in shelve[filePath]:
                    
                    if key not in shelve:
                        if self._error_callback != None:
                            message = "Fault in index: key '"+key+"' registered for file '"+filePath+"' does not exist! Skipping..."
                            self._error_callback(message)
                        continue

                    data = shelve[key]

                    if len(data) < 1 or len(data[0]) < 4:
                        if self._error_callback != None:
                            message = "Fault in index: data-block has no type! Skipping..."
                            self._error_callback(message)
                        continue

                    line   = data[0][1]
                    column = data[0][2]
                    typeId = data[0][3]

                    if 'pos:'+filePath+":"+str(line)+":"+str(column) in shelve:
                        del shelve['pos:'+filePath+":"+str(line)+":"+str(column)]

                    namespace = None

                    if typeId == 'function':
                        functionName = data[1][0]
                        namespace    = data[1][1]
                        
                    elif typeId == 'method':
                        methodName = data[1][0]
                        className  = data[1][1]
                        namespace  = data[1][2]
                        classId  = namespace + '\\' + className
                        shelve['classMethods:' + classId].remove(key)
                                
                    elif typeId == 'class':
                        className  = data[1][0]
                        namespace  = data[1][1]
                        parentName = data[2]
                        interfaces = data[3]
                        if parentName != None:
                            shelve['parent:'+parentName].remove(key)
                        for interface in interfaces:
                            shelve['implements:'+interface].remove(key)
                        
                    shelve['namespace:'+namespace].remove(key)
                    if key in shelve:
                        del shelve[key]

                del shelve['mtime:'+filePath]
                del shelve[filePath]
            except (_bsddb.DBNotFoundError, KeyError, ValueError) as exception:
                type_, value_, traceback_ = sys.exc_info()
                if self._error_callback != None:
                    message = str(type_) + ": " + str(exception) + "\n" + "".join(traceback.format_tb(traceback_))
                    self._error_callback(message)
        shelve.sync()
Example #2
0
 def sync(self):
     shelve = self._shelve
     shelve.sync()