changeset 3253:1af840e84af7

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
author Goffi <goffi@goffi.org>
date Tue, 14 Apr 2020 20:36:24 +0200
parents 54934ee3f69c
children 6cf4bd6972c2
files sat/memory/persistent.py sat/plugins/plugin_misc_email_invitation.py
diffstat 2 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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
 
--- 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}