mirror of
https://github.com/khoaliber/khoj.git
synced 2026-03-02 21:19:12 +00:00
Create LRU helper class for caching
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
import pathlib
|
import pathlib
|
||||||
import sys
|
import sys
|
||||||
from os.path import join
|
from os.path import join
|
||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
|
|
||||||
def is_none_or_empty(item):
|
def is_none_or_empty(item):
|
||||||
@@ -60,4 +61,21 @@ def load_model(model_name, model_dir, model_type, device:str=None):
|
|||||||
|
|
||||||
def is_pyinstaller_app():
|
def is_pyinstaller_app():
|
||||||
"Returns true if the app is running from Native GUI created by PyInstaller"
|
"Returns true if the app is running from Native GUI created by PyInstaller"
|
||||||
return getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS')
|
return getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS')
|
||||||
|
|
||||||
|
|
||||||
|
class LRU(OrderedDict):
|
||||||
|
def __init__(self, *args, capacity=128, **kwargs):
|
||||||
|
self.capacity = capacity
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
def __getitem__(self, key):
|
||||||
|
value = super().__getitem__(key)
|
||||||
|
self.move_to_end(key)
|
||||||
|
return value
|
||||||
|
|
||||||
|
def __setitem__(self, key, value):
|
||||||
|
super().__setitem__(key, value)
|
||||||
|
if len(self) > self.capacity:
|
||||||
|
oldest = next(iter(self))
|
||||||
|
del self[oldest]
|
||||||
|
|||||||
@@ -28,3 +28,18 @@ def test_merge_dicts():
|
|||||||
|
|
||||||
# do not override existing key in priority_dict with default dict
|
# do not override existing key in priority_dict with default dict
|
||||||
assert helpers.merge_dicts(priority_dict={'a': 1}, default_dict={'a': 2}) == {'a': 1}
|
assert helpers.merge_dicts(priority_dict={'a': 1}, default_dict={'a': 2}) == {'a': 1}
|
||||||
|
|
||||||
|
|
||||||
|
def test_lru_cache():
|
||||||
|
# Test initializing cache
|
||||||
|
cache = helpers.LRU({'a': 1, 'b': 2}, capacity=2)
|
||||||
|
assert cache == {'a': 1, 'b': 2}
|
||||||
|
|
||||||
|
# Test capacity overflow
|
||||||
|
cache['c'] = 3
|
||||||
|
assert cache == {'b': 2, 'c': 3}
|
||||||
|
|
||||||
|
# Test delete least recently used item from LRU cache on capacity overflow
|
||||||
|
cache['b'] # accessing 'b' makes it the most recently used item
|
||||||
|
cache['d'] = 4 # so 'c' is deleted from the cache instead of 'b'
|
||||||
|
assert cache == {'b': 2, 'd': 4}
|
||||||
|
|||||||
Reference in New Issue
Block a user