Esempio n. 1
0
 def __getitem__(self, key):
     frozen_key = freeze(key)
     if frozen_key in self:
         return WeakValueDictionary.__getitem__(self, frozen_key)
     value = self.lookup(key)
     self[frozen_key] = value
     return value
Esempio n. 2
0
 def __getitem__(self, key):
     frozen_key = freeze(key)
     if frozen_key in self:
         return WeakValueDictionary.__getitem__(self, frozen_key)
     value = self.lookup(key)
     self[frozen_key] = value
     return value
class LRUCache:
	def __init__(self, max_size):
		self.LRU = [Node(time(), "none%s"%i) for i in range(max_size)]
		self.search = WeakValueDictionary()
		for i in self.LRU:
			self.search[i.name] = i
		
	def __setitem__(self, name, value):
		q = self.search.get(name, None)
		if q:
			q.data = value
			q.time = time()
		else:
			lru = self.LRU[0]
			self.search.pop(lru.name)
			lru.data = value
			lru.time = time()
			lru.name = name
			self.search[lru.name] = lru
		self.LRU.sort()
		
	def get(self, name, default=None):
		pos = None
		try:
			pos = self.search.__getitem__(name)
			pos.time = time()
			return pos.data
		except KeyError:
			if default is not None:
				return default
			else:
				raise
Esempio n. 4
0
    def __getitem__(self, key):
        value = WeakValueDictionary.__getitem__(self, key)
        # check boundaries to minimiza duplicate references
        while len(self.queue) > 0 and self.queue[0][0] == key:
            # item at left end of queue pop it since it'll be appended
            # to right
            self.queue.popleft()

        # only append if item is not at right end of queue
        if not (len(self.queue) and self.queue[-1][0] == key):
            self.queue.append((key, value))

        return value
Esempio n. 5
0
    def __getitem__(self, key):
        value = WeakValueDictionary.__getitem__(self, key)
        # check boundaries to minimiza duplicate references
        while len(self.queue) > 0  and self.queue[0][0] == key:
            # item at left end of queue pop it since it'll be appended
            # to right
            self.queue.popleft()

        # only append if item is not at right end of queue
        if not (len(self.queue) and self.queue[-1][0] == key):
            self.queue.append((key, value))

        return value
Esempio n. 6
0
 def __getitem__(self, k):
     v = WeakValueDictionary.__getitem__(self, k) # KeyError if not found
     self.keep_this(v)
     return v
Esempio n. 7
0
 def __getitem__(self, k):
     v = WeakValueDictionary.__getitem__(self, k)  # KeyError if not found
     self.keep_this(v)
     return v
Esempio n. 8
0
 def __getitem__(self, key):
     if isinstance(key, bytes):
         key = key.decode("utf-8")
     return WeakValueDictionary.__getitem__(self, key)