2008-01-11

fuzzytraverser.py

  2008-01-11 20:14

...


from zope.publisher.interfaces import NotFound 
from zope.app import zapi 
from zope.app.container.traversal import ContainerTraverser 
import difflib
from interfaces import IFuzzyFolder

class FuzzyTraverser(ContainerTraverser) :
   
    __used_for__ = IFuzzyFolder 

    nmax = None
   
    def publishTraverse(self, request, name): 
        """See zope.publisher.interfaces.browser.IBrowserPublisher""" 
        print "Traverse!!"
        subob = self.get(name) 

        if subob is not None: 
            if self.nmax :
                request.annotations.setdefault("fuzzytraverser",[]).append({'name':name,'nmax':self.nmax,'imax':self.imax})
            return subob 

        
        return super(FuzzyTraverser, self).publishTraverse(request, name)

    def get(self,name) :
        res = self.context.get(name,None)
        
        if res is not None :
            return res
            
        imax = 0.5
        nmax = None
        for key in self.context.keys() :
            i = difflib.SequenceMatcher(None,name,key).ratio()
            #print "===",i,name,key
            if i >= imax :
                imax = i
                nmax = key
        
        self.nmax = nmax
        self.imax = imax
        
        return self.context.get(nmax,None)
        
        
Официальный сайт Zope3 Московская группа изучения реактивного движения The Dream Bot Site noooxml