# HG changeset patch # User Goffi # Date 1586889384 -7200 # Node ID 1af840e84af728b7767f9068a81ac26a8ee07040 # Parent 54934ee3f69c73b9566a2c4c59220c8a30c38355 core (memory/persistent): fixed "items", added "all" + "adel" to LazyPersistentBinaryDict: - `items` was returning the dict with all values, it now returns a Deferred with actual dict items() - `all` new method does return the dict with all values (in a Deferred) - `adel` has been added to LazyPersistentBinaryDict diff -r 54934ee3f69c -r 1af840e84af7 sat/memory/persistent.py --- a/sat/memory/persistent.py Tue Apr 14 20:29:37 2020 +0200 +++ b/sat/memory/persistent.py Tue Apr 14 20:36:24 2020 +0200 @@ -66,7 +66,7 @@ return iter(self._cache.items()) def items(self): - return list(self._cache.items()) + return self._cache.items() def __repr__(self): return self._cache.__repr__() @@ -178,6 +178,11 @@ raise NotImplementedError def items(self): + d = self.storage.getPrivates(self.namespace, binary=self.binary, profile=self.profile) + d.addCallback(lambda data_dict: data_dict.items()) + return d + + def all(self): return self.storage.getPrivates(self.namespace, binary=self.binary, profile=self.profile) def __repr__(self): @@ -257,6 +262,12 @@ return self.storage.setPrivateValue(self.namespace, key, value, self.binary, self.profile) + def adel(self, key): + """Async del, return a Deferred fired when value is actually deleted""" + # XXX: similar as PersistentDict.adel, but doesn't use cache + return self.storage.delPrivateValue( + self.namespace, key, self.binary, self.profile) + def setdefault(self, key, default): raise NotImplementedError diff -r 54934ee3f69c -r 1af840e84af7 sat/plugins/plugin_misc_email_invitation.py --- a/sat/plugins/plugin_misc_email_invitation.py Tue Apr 14 20:29:37 2020 +0200 +++ b/sat/plugins/plugin_misc_email_invitation.py Tue Apr 14 20:36:24 2020 +0200 @@ -401,7 +401,7 @@ C.PROF_KEY_NONE: don't filter invitations @return list(unicode): invitations uids """ - invitations = yield self.invitations.items() + invitations = yield self.invitations.all() if profile != C.PROF_KEY_NONE: invitations = {id_:data for id_, data in invitations.items() if data.get('profile') == profile}