Ticket #40: keys-fix.diff

File keys-fix.diff, 1.3 kB (added by athomas, 2 years ago)

Using .keys() turns out to be excruciatingly slow. Try a key lookup and catch KeyError.

  • pyndexter/indexers/builtin.py

    old new  
    2727 
    2828    def update(self, key, values): 
    2929        key = key.encode('utf-8') 
    30         if key in self.db
     30        try
    3131            v = pickle.loads(self.db[key]) 
    32         else
     32        except KeyError
    3333            v = set() 
    3434        v.update(values) 
    3535        self.db[key] = pickle.dumps(v, 2) 
    3636 
    3737    def remove(self, key, values=None): 
    3838        key = key.encode('utf-8') 
    39         if key in self.db
    40             if values is None
     39        if values is None
     40            try
    4141                del self.db[key] 
    42             else: 
     42            except KeyError: 
     43                pass 
     44        else: 
     45            try: 
    4346                v = pickle.loads(self.db[key]) 
    4447                v.remove(values) 
    4548                self.db[key] = pickle.dumps(v, 2) 
     49            except KeyError: 
     50                pass 
    4651 
    4752    def replace(self, key, values): 
    4853        key = key.encode('utf-8') 
     
    5055 
    5156    def get(self, key): 
    5257        key = key.encode('utf-8') 
    53         if key in self.db
     58        try
    5459            return pickle.loads(self.db[key]) 
    55         else
     60        except KeyError
    5661            return set() 
    5762 
    5863    def keys(self):