#!/usr/bin/env python from fuse import Fuse from fuse import DEBUG import os from errno import * from stat import * import os import sys import re import glob count_id = 0; import CompatMysqldb index_dir="/home/esteve/.Index" indexer = 0 db_glob = 0 db = 0 class Index: index = 0 def __init__(self, *args, **kw): print "Initial Indexing" def index_file (self, parsed_str, filename, db): for i in parsed_str: try: cons = "select id from words where word='%s'" % i if db.execute(cons) != 0: #La paraula esta a la llista de words old_id = db.fetchall()[0][0] cons = "insert into occur(file,id) values ('%s',%d)" % (filename,old_id) db.execute(cons); else: cons ="insert into words(word, id) values ('%s',%d)" % (i,self.index) db.execute(cons) cons = "insert into occur(file,id) values ('%s',%d)" % (filename,self.index) db.execute(cons); self.index= self.index + 1 except CompatMysqldb: print "Error en mysql select de words" return 1 print "word:",i,"id:",index def add (self) : self.index=self.index+1 def parse_file(self, filename): file = open (filename,"rt") str = file.read() pattern = re.compile (r"[^\w^\s]") str = pattern.sub(" ",str) pattern = re.compile (r"\s+") str = pattern.sub(" ",str) pattern = re.compile (r"^\s") str = pattern.sub("",str) pattern = re.compile (r"\b\w{1,2}\b") str = pattern.sub("",str) pattern = re.compile (r"\b") str = pattern.sub("X",str) pattern = re.compile (r"X(\w+)X") str = pattern.findall(str) file.close(); return str class Xmp(Fuse): flags = 1 index_var = 0; def __init__(self, *args, **kw): print "INIT" Fuse.__init__(self, *args, **kw) def getattr(self, path): path=index_dir+path print "getattr",path return os.lstat(path) def readlink(self, path): path=index_dir+path print "readlink",path return os.readlink(path) def getdir(self, path): path=index_dir+path print "getdir",path return map(lambda x: (x,0), os.listdir(path)) def unlink(self, path): path=index_dir+path cons = "delete from occur where file='%s'" % path db.execute(cons) print "unlink",path return os.unlink(path) def rmdir(self, path): path=index_dir+path print "rmdir",path return os.rmdir(path) def symlink(self, path, path1): path=index_dir+path print "symlink",path,path1 return os.symlink(path, path1) def rename(self, path, path1): path=index_dir+path print "rename",path,path1 return os.symlink(path, path1) def link(self, path, path1): path=index_dir+path print "link",path,path1 return os.link(path, path1) def chmod(self, path, mode): path=index_dir+path print "chmod",path,mode return os.chmod(path, mode) def chown(self, path, user, group): path=index_dir+path print "chown",path,user,group return os.chown(path, user, group) def truncate(self, path, size): path=index_dir+path cons = "delete from occur where file='%s'" % path db.execute(cons) print "truncate",path,size f = open(path, "w+") aux = f.truncate(size) print "Indexing ",path," ..." str = indexer.parse_file (path) indexer.index_file(str, path, db) indexer.add() return aux def mknod(self, path, mode, dev): path=index_dir+path """ Python has no os.mknod, so we can only do some things """ print "mknod",path,mode,dev if S_ISREG(mode): open(path, "w") else: return -EINVAL def mkdir(self, path, mode): path=index_dir+path print "mkdir",path,mode return os.mkdir(path, mode) def utime(self, path, times): path=index_dir+path print "utime",path,times return os.utime(path, times) def open(self, path, flags): path=index_dir+path print "open",path,flags os.open(path, flags) return 0 def read(self, path, len, offset): path=index_dir+path print "read", (path, len, offset) f = open(path, "r") print f.read() f.seek(offset) return f.read(len) def write(self, path, buf, off): path=index_dir+path f = open(path, "a") f.seek(off) f.write(buf) f.seek(0); print "Indexing ",path," ..." str = indexer.parse_file (path) indexer.index_file(str, path, db) indexer.add() print "write",self,path,buf,off return len(buf) if __name__ == '__main__': server = Xmp() #server.flags = DEBUG server.flags = 0 server.multithreaded = 0 db = CompatMysqldb.mysqldb('prova@localhost python esteve') #User python, pass esteve indexer = Index () #pid = os.fork() #print pid #if pid!=0: #FILL idg = 0 for i in glob.glob(index_dir+"/*"): print "Indexing ",i," ..." str = indexer.parse_file (i) count_id=0; indexer.index_file(str, i, db) indexer.add() print "mounting..." server.main() #else: #PARE # # while 1 : # paraula = sys.stdin.readline() # # # pattern = re.compile (r"\W") # paraula = pattern.sub("",paraula) # print paraula,"a" # cons = "select id from words where word='%s'" % paraula # print cons # if db.execute(cons) != 0: #La paraula esta a la llista de words # # Busca paraula # cons = "select file from occur where id='%d'" % db.fetchall()[0][0] # print cons # db.execute(cons) # print db.fetchall()