From 4ac969c8a89a50c72f91347b06a1cfffee1c9829 Mon Sep 17 00:00:00 2001 From: gpotter2 <gabriel@potter.fr> Date: Thu, 24 Aug 2017 12:34:06 +0200 Subject: [PATCH] Fix iter functions in config --- scapy/config.py | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/scapy/config.py b/scapy/config.py index b0f54d4c..925cd667 100755 --- a/scapy/config.py +++ b/scapy/config.py @@ -171,7 +171,8 @@ class CommandsList(list): def lsc(): print(repr(conf.commands)) -class CacheInstance(dict): +class CacheInstance(dict, object): + __slots__ = ["timeout", "name", "_timetable", "__dict__"] def __init__(self, name="noname", timeout=None): self.timeout = timeout self.name = name @@ -179,6 +180,8 @@ class CacheInstance(dict): def flush(self): self.__init__(name=self.name, timeout=self.timeout) def __getitem__(self, item): + if item in self.__slots__: + return object.__getattribute__(self, item) val = dict.__getitem__(self,item) if self.timeout is not None: t = self._timetable[item] @@ -193,6 +196,8 @@ class CacheInstance(dict): except KeyError: return default def __setitem__(self, item, v): + if item in self.__slots__: + return object.__setattr__(self, item, v) self._timetable[item] = time.time() dict.__setitem__(self, item,v) def update(self, other): @@ -200,36 +205,36 @@ class CacheInstance(dict): self._timetable.update(other._timetable) def iteritems(self): if self.timeout is None: - return dict.iteritems(self) + return six.iteritems(self.__dict__) t0=time.time() - return ((k,v) for (k,v) in dict.iteritems(self) if t0-self._timetable[k] < self.timeout) + return ((k,v) for (k,v) in six.iteritems(self.__dict__) if t0-self._timetable[k] < self.timeout) def iterkeys(self): if self.timeout is None: - return dict.iterkeys(self) + return six.iterkeys(self.__dict__) t0=time.time() - return (k for k in dict.iterkeys(self) if t0-self._timetable[k] < self.timeout) + return (k for k in six.iterkeys(self.__dict__) if t0-self._timetable[k] < self.timeout) def __iter__(self): - return six.iterkeys(self) + return six.iterkeys(self.__dict__) def itervalues(self): if self.timeout is None: - return dict.itervalues(self) + return six.itervalues(self.__dict__) t0=time.time() - return (v for (k,v) in dict.iteritems(self) if t0-self._timetable[k] < self.timeout) + return (v for (k,v) in six.iteritems(self.__dict__) if t0-self._timetable[k] < self.timeout) def items(self): if self.timeout is None: return dict.items(self) t0=time.time() - return [(k,v) for (k,v) in dict.iteritems(self) if t0-self._timetable[k] < self.timeout] + return [(k,v) for (k,v) in six.iteritems(self.__dict__) if t0-self._timetable[k] < self.timeout] def keys(self): if self.timeout is None: return dict.keys(self) t0=time.time() - return [k for k in dict.iterkeys(self) if t0-self._timetable[k] < self.timeout] + return [k for k in six.iterkeys(self.__dict__) if t0-self._timetable[k] < self.timeout] def values(self): if self.timeout is None: - return dict.values(self) + return six.values(self) t0=time.time() - return [v for (k,v) in dict.iteritems(self) if t0-self._timetable[k] < self.timeout] + return [v for (k,v) in six.iteritems(self.__dict__) if t0-self._timetable[k] < self.timeout] def __len__(self): if self.timeout is None: return dict.__len__(self) @@ -239,9 +244,9 @@ class CacheInstance(dict): def __repr__(self): s = [] if self: - mk = max(len(k) for k in six.iterkeys(self)) + mk = max(len(k) for k in six.iterkeys(self.__dict__)) fmt = "%%-%is %%s" % (mk+1) - for item in six.iteritems(self): + for item in six.iteritems(self.__dict__): s.append(fmt % item) return "\n".join(s) @@ -467,4 +472,3 @@ def crypto_validator(func): "Please install python-cryptography v1.7 or later.") return func(*args, **kwargs) return func_in - -- GitLab