MCPcopy Index your code
hub / github.com/secdev/scapy / CacheInstance

Class CacheInstance

scapy/config.py:369–499  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

367
368
369class CacheInstance(Dict[str, Any]):
370 __slots__ = ["timeout", "name", "_timetable"]
371
372 def __init__(self, name="noname", timeout=None):
373 # type: (str, Optional[int]) -> None
374 self.timeout = timeout
375 self.name = name
376 self._timetable = {} # type: Dict[str, float]
377
378 def flush(self):
379 # type: () -> None
380 self._timetable.clear()
381 self.clear()
382
383 def __getitem__(self, item):
384 # type: (str) -> Any
385 if item in self.__slots__:
386 return object.__getattribute__(self, item)
387 if not self.__contains__(item):
388 raise KeyError(item)
389 return super(CacheInstance, self).__getitem__(item)
390
391 def __contains__(self, item):
392 if not super(CacheInstance, self).__contains__(item):
393 return False
394 if self.timeout is not None:
395 t = self._timetable[item]
396 if time.time() - t > self.timeout:
397 return False
398 return True
399
400 def get(self, item, default=None):
401 # type: (str, Optional[Any]) -> Any
402 # overloading this method is needed to force the dict to go through
403 # the timetable check
404 try:
405 return self[item]
406 except KeyError:
407 return default
408
409 def __setitem__(self, item, v):
410 # type: (str, str) -> None
411 if item in self.__slots__:
412 return object.__setattr__(self, item, v)
413 self._timetable[item] = time.time()
414 super(CacheInstance, self).__setitem__(item, v)
415
416 def update(self,
417 other, # type: Any
418 **kwargs # type: Any
419 ):
420 # type: (...) -> None
421 for key, value in other.items():
422 # We only update an element from `other` either if it does
423 # not exist in `self` or if the entry in `self` is older.
424 if key not in self or self._timetable[key] < other._timetable[key]:
425 dict.__setitem__(self, key, value)
426 self._timetable[key] = other._timetable[key]

Callers 1

new_cacheMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected