Mercurial > libervia-backend
annotate sat/memory/persistent.py @ 3254:6cf4bd6972c2
core, frontends: avatar refactoring:
/!\ huge commit
Avatar logic has been reworked around the IDENTITY plugin: plugins able to handle avatar
or other identity related metadata (like nicknames) register to IDENTITY plugin in the
same way as for other features like download/upload. Once registered, IDENTITY plugin will
call them when suitable in order of priority, and handle caching.
Methods to manage those metadata from frontend now use serialised data.
For now `avatar` and `nicknames` are handled:
- `avatar` is now a dict with `path` + metadata like `media_type`, instead of just a string
path
- `nicknames` is now a list of nicknames in order of priority. This list is never empty,
and `nicknames[0]` should be the preferred nickname to use by frontends in most cases.
In addition to contact specified nicknames, user set nickname (the one set in roster) is
used in priority when available.
Among the side changes done with this commit, there are:
- a new `contactGet` bridge method to get roster metadata for a single contact
- SatPresenceProtocol.send returns a Deferred to check when it has actually been sent
- memory's methods to handle entities data now use `client` as first argument
- metadata filter can be specified with `getIdentity`
- `getAvatar` and `setAvatar` are now part of the IDENTITY plugin instead of XEP-0054 (and
there signature has changed)
- `isRoom` and `getBareOrFull` are now part of XEP-0045 plugin
- jp avatar/get command uses `xdg-open` first when available for `--show` flag
- `--no-cache` has been added to jp avatar/get and identity/get
- jp identity/set has been simplified, explicit options (`--nickname` only for now) are
used instead of `--field`. `--field` may come back in the future if necessary for extra
data.
- QuickContactList `SetContact` now handle None as a value, and doesn't use it to delete the
metadata anymore
- improved cache handling for `metadata` and `nicknames` in quick frontend
- new `default` argument in QuickContactList `getCache`
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 14 Apr 2020 21:00:33 +0200 |
parents | 1af840e84af7 |
children | be6d91572633 |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
592
diff
changeset
|
4 # SAT: a jabber client |
3136 | 5 # Copyright (C) 2009-2020 Jérôme Poisson (goffi@goffi.org) |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
592
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
592
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
592
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
592
diff
changeset
|
10 # (at your option) any later version. |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
592
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
592
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
592
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
592
diff
changeset
|
15 # GNU Affero General Public License for more details. |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
592
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
592
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 |
771 | 20 from sat.core.i18n import _ |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
21 from sat.core.log import getLogger |
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
22 log = getLogger(__name__) |
2644
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
23 from twisted.python import failure |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
24 |
592
e5a875a3311b
Fix pep8 support in src/memory.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
25 |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
26 class MemoryNotInitializedError(Exception): |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
27 pass |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
28 |
592
e5a875a3311b
Fix pep8 support in src/memory.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
29 |
3234
78fea49735c5
core (memory/persistent): added `aset` method in LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3225
diff
changeset
|
30 class PersistentDict: |
592
e5a875a3311b
Fix pep8 support in src/memory.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
31 r"""A dictionary which save persistently each value assigned |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
32 |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
33 /!\ be careful, each assignment means a database write |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
34 /!\ Memory must be initialised before loading/setting value with instances of this class""" |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
35 storage = None |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
36 binary = False |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 def __init__(self, namespace, profile=None): |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
39 """ |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
40 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
41 @param namespace: unique namespace for this dictionary |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
42 @param profile(unicode, None): profile which *MUST* exists, or None for general values |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
43 """ |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 if not self.storage: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
979
diff
changeset
|
45 log.error(_("PersistentDict can't be used before memory initialisation")) |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
46 raise MemoryNotInitializedError |
2890
c652d079a9a1
core (memory/persistent): added clear method + initialise with a dict:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
47 self._cache = {} |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 self.namespace = namespace |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
49 self.profile = profile |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
50 |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
51 def _setCache(self, data): |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
52 self._cache = data |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
53 |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
54 def load(self): |
1029
f6182f6418ea
memory: add class ProfileSessions based on Sessions
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
55 """Load persistent data from storage. |
f6182f6418ea
memory: add class ProfileSessions based on Sessions
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
56 |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
57 need to be called before any other operation |
1029
f6182f6418ea
memory: add class ProfileSessions based on Sessions
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
58 @return: defers the PersistentDict instance itself |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 """ |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
60 d = self.storage.getPrivates(self.namespace, binary=self.binary, profile=self.profile) |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
61 d.addCallback(self._setCache) |
2765
378188abe941
misc: replaced all "dummy" by the more conventional and readable "__" ("_" being used for gettext)
Goffi <goffi@goffi.org>
parents:
2734
diff
changeset
|
62 d.addCallback(lambda __: self) |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
63 return d |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
64 |
1292
b29a065a66f0
core: added items() and iteritems() methods to PersistentDict
Goffi <goffi@goffi.org>
parents:
1029
diff
changeset
|
65 def iteritems(self): |
3028 | 66 return iter(self._cache.items()) |
1292
b29a065a66f0
core: added items() and iteritems() methods to PersistentDict
Goffi <goffi@goffi.org>
parents:
1029
diff
changeset
|
67 |
b29a065a66f0
core: added items() and iteritems() methods to PersistentDict
Goffi <goffi@goffi.org>
parents:
1029
diff
changeset
|
68 def items(self): |
3253
1af840e84af7
core (memory/persistent): fixed "items", added "all" + "adel" to LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3234
diff
changeset
|
69 return self._cache.items() |
1292
b29a065a66f0
core: added items() and iteritems() methods to PersistentDict
Goffi <goffi@goffi.org>
parents:
1029
diff
changeset
|
70 |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
71 def __repr__(self): |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
72 return self._cache.__repr__() |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
73 |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
74 def __str__(self): |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
75 return self._cache.__str__() |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
76 |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
77 def __lt__(self, other): |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
78 return self._cache.__lt__(other) |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
79 |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
80 def __le__(self, other): |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
81 return self._cache.__le__(other) |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
82 |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
83 def __eq__(self, other): |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
84 return self._cache.__eq__(other) |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
85 |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
86 def __ne__(self, other): |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
87 return self._cache.__ne__(other) |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
88 |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
89 def __gt__(self, other): |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
90 return self._cache.__gt__(other) |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
91 |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
92 def __ge__(self, other): |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
93 return self._cache.__ge__(other) |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
94 |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
95 def __cmp__(self, other): |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
96 return self._cache.__cmp__(other) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
585
diff
changeset
|
97 |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
98 def __hash__(self): |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
99 return self._cache.__hash__() |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
100 |
3028 | 101 def __bool__(self): |
102 return self._cache.__len__() != 0 | |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
103 |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
104 def __contains__(self, key): |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
105 return self._cache.__contains__(key) |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
106 |
979
8f8bdd31375a
core (memory): added __iter__ to PersistentDict
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
107 def __iter__(self): |
8f8bdd31375a
core (memory): added __iter__ to PersistentDict
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
108 return self._cache.__iter__() |
8f8bdd31375a
core (memory): added __iter__ to PersistentDict
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
109 |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
110 def __getitem__(self, key): |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
111 return self._cache.__getitem__(key) |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
112 |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
113 def __setitem__(self, key, value): |
2890
c652d079a9a1
core (memory/persistent): added clear method + initialise with a dict:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
114 self.storage.setPrivateValue(self.namespace, key, value, self.binary, |
c652d079a9a1
core (memory/persistent): added clear method + initialise with a dict:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
115 self.profile) |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
116 return self._cache.__setitem__(key, value) |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
117 |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
118 def __delitem__(self, key): |
2302
f824b6026b73
core (memory/persistent): fixed calls to delPrivateValue
Goffi <goffi@goffi.org>
parents:
2209
diff
changeset
|
119 self.storage.delPrivateValue(self.namespace, key, self.binary, self.profile) |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
120 return self._cache.__delitem__(key) |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
121 |
2890
c652d079a9a1
core (memory/persistent): added clear method + initialise with a dict:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
122 def clear(self): |
c652d079a9a1
core (memory/persistent): added clear method + initialise with a dict:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
123 """Delete all values from this namespace""" |
c652d079a9a1
core (memory/persistent): added clear method + initialise with a dict:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
124 self._cache.clear() |
c652d079a9a1
core (memory/persistent): added clear method + initialise with a dict:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
125 return self.storage.delPrivateNamespace(self.namespace, self.binary, self.profile) |
c652d079a9a1
core (memory/persistent): added clear method + initialise with a dict:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
126 |
442
ab9ddf6c7eaf
core: added get method to PersistentDictionary
Goffi <goffi@goffi.org>
parents:
439
diff
changeset
|
127 def get(self, key, default=None): |
ab9ddf6c7eaf
core: added get method to PersistentDictionary
Goffi <goffi@goffi.org>
parents:
439
diff
changeset
|
128 return self._cache.get(key, default) |
ab9ddf6c7eaf
core: added get method to PersistentDictionary
Goffi <goffi@goffi.org>
parents:
439
diff
changeset
|
129 |
3225
843a9279fb5a
core (memory/persistent): implemented `aset` and `adel`:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
130 def aset(self, key, value): |
843a9279fb5a
core (memory/persistent): implemented `aset` and `adel`:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
131 """Async set, return a Deferred fired when value is actually stored""" |
843a9279fb5a
core (memory/persistent): implemented `aset` and `adel`:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
132 self._cache.__setitem__(key, value) |
843a9279fb5a
core (memory/persistent): implemented `aset` and `adel`:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
133 return self.storage.setPrivateValue(self.namespace, key, value, |
843a9279fb5a
core (memory/persistent): implemented `aset` and `adel`:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
134 self.binary, self.profile) |
843a9279fb5a
core (memory/persistent): implemented `aset` and `adel`:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
135 |
843a9279fb5a
core (memory/persistent): implemented `aset` and `adel`:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
136 def adel(self, key): |
843a9279fb5a
core (memory/persistent): implemented `aset` and `adel`:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
137 """Async del, return a Deferred fired when value is actually deleted""" |
843a9279fb5a
core (memory/persistent): implemented `aset` and `adel`:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
138 self._cache.__delitem__(key) |
843a9279fb5a
core (memory/persistent): implemented `aset` and `adel`:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
139 return self.storage.delPrivateValue( |
843a9279fb5a
core (memory/persistent): implemented `aset` and `adel`:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
140 self.namespace, key, self.binary, self.profile) |
843a9279fb5a
core (memory/persistent): implemented `aset` and `adel`:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
141 |
1340
91e72da1d093
core (persistent dict): added setdefault method
Goffi <goffi@goffi.org>
parents:
1292
diff
changeset
|
142 def setdefault(self, key, default): |
91e72da1d093
core (persistent dict): added setdefault method
Goffi <goffi@goffi.org>
parents:
1292
diff
changeset
|
143 try: |
91e72da1d093
core (persistent dict): added setdefault method
Goffi <goffi@goffi.org>
parents:
1292
diff
changeset
|
144 return self._cache[key] |
91e72da1d093
core (persistent dict): added setdefault method
Goffi <goffi@goffi.org>
parents:
1292
diff
changeset
|
145 except: |
91e72da1d093
core (persistent dict): added setdefault method
Goffi <goffi@goffi.org>
parents:
1292
diff
changeset
|
146 self.__setitem__(key, default) |
91e72da1d093
core (persistent dict): added setdefault method
Goffi <goffi@goffi.org>
parents:
1292
diff
changeset
|
147 return default |
91e72da1d093
core (persistent dict): added setdefault method
Goffi <goffi@goffi.org>
parents:
1292
diff
changeset
|
148 |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
149 def force(self, name): |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
150 """Force saving of an attribute to storage |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
151 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
152 @return: deferred fired when data is actually saved |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
153 """ |
2890
c652d079a9a1
core (memory/persistent): added clear method + initialise with a dict:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
154 return self.storage.setPrivateValue(self.namespace, name, self._cache[name], |
c652d079a9a1
core (memory/persistent): added clear method + initialise with a dict:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
155 self.binary, self.profile) |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
156 |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
157 |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
158 class PersistentBinaryDict(PersistentDict): |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
159 """Persistent dict where value can be any python data (instead of string only)""" |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
160 binary = True |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
161 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
162 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
163 class LazyPersistentBinaryDict(PersistentBinaryDict): |
3028 | 164 r"""PersistentBinaryDict which get key/value when needed |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
165 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
166 This Persistent need more database access, it is suitable for largest data, |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
167 to save memory. |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
168 /!\ most of methods return a Deferred |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
169 """ |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
170 # TODO: missing methods should be implemented using database access |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
171 # TODO: a cache would be useful (which is deleted after a timeout) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
585
diff
changeset
|
172 |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
173 def load(self): |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
174 # we show a warning as calling load on LazyPersistentBinaryDict sounds like a code mistake |
3028 | 175 log.warning(_("Calling load on LazyPersistentBinaryDict while it's not needed")) |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
176 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
177 def iteritems(self): |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
178 raise NotImplementedError |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
179 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
180 def items(self): |
3253
1af840e84af7
core (memory/persistent): fixed "items", added "all" + "adel" to LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3234
diff
changeset
|
181 d = self.storage.getPrivates(self.namespace, binary=self.binary, profile=self.profile) |
1af840e84af7
core (memory/persistent): fixed "items", added "all" + "adel" to LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3234
diff
changeset
|
182 d.addCallback(lambda data_dict: data_dict.items()) |
1af840e84af7
core (memory/persistent): fixed "items", added "all" + "adel" to LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3234
diff
changeset
|
183 return d |
1af840e84af7
core (memory/persistent): fixed "items", added "all" + "adel" to LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3234
diff
changeset
|
184 |
1af840e84af7
core (memory/persistent): fixed "items", added "all" + "adel" to LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3234
diff
changeset
|
185 def all(self): |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
186 return self.storage.getPrivates(self.namespace, binary=self.binary, profile=self.profile) |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
187 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
188 def __repr__(self): |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
189 raise NotImplementedError |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
190 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
191 def __str__(self): |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
192 return "LazyPersistentBinaryDict (namespace: {})".format(self.namespace) |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
193 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
194 def __lt__(self, other): |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
195 raise NotImplementedError |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
196 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
197 def __le__(self, other): |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
198 raise NotImplementedError |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
199 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
200 def __eq__(self, other): |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
201 raise NotImplementedError |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
202 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
203 def __ne__(self, other): |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
204 raise NotImplementedError |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
205 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
206 def __gt__(self, other): |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
207 raise NotImplementedError |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
208 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
209 def __ge__(self, other): |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
210 raise NotImplementedError |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
211 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
212 def __cmp__(self, other): |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
213 raise NotImplementedError |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
214 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
215 def __hash__(self): |
3028 | 216 return hash(str(self.__class__) + self.namespace + (self.profile or '')) |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
217 |
3028 | 218 def __bool__(self): |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
219 raise NotImplementedError |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
220 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
221 def __contains__(self, key): |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
222 raise NotImplementedError |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
223 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
224 def __iter__(self): |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
225 raise NotImplementedError |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
226 |
2644
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
227 def _data2value(self, data, key): |
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
228 try: |
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
229 return data[key] |
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
230 except KeyError as e: |
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
231 # we return a Failure here to avoid the jump |
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
232 # into debugger in debug mode. |
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
233 raise failure.Failure(e) |
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
234 |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
235 def __getitem__(self, key): |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
236 """get the value as a Deferred""" |
2644
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
237 d = self.storage.getPrivates(self.namespace, keys=[key], binary=self.binary, |
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
238 profile=self.profile) |
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
239 d.addCallback(self._data2value, key) |
2209
ea41cf1e6d29
memory (persistent, sqlite): fixed getPrivates bug with keys arguments and its use in LazyPersistentBinaryDict
Goffi <goffi@goffi.org>
parents:
2182
diff
changeset
|
240 return d |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
241 |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
242 def __setitem__(self, key, value): |
2644
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
243 self.storage.setPrivateValue(self.namespace, key, value, self.binary, |
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
244 self.profile) |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
245 |
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
246 def __delitem__(self, key): |
2302
f824b6026b73
core (memory/persistent): fixed calls to delPrivateValue
Goffi <goffi@goffi.org>
parents:
2209
diff
changeset
|
247 self.storage.delPrivateValue(self.namespace, key, self.binary, self.profile) |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
248 |
2644
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
249 def _defaultOrException(self, failure_, default): |
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
250 failure_.trap(KeyError) |
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
251 return default |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
252 |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
253 def get(self, key, default=None): |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
254 d = self.__getitem__(key) |
2644
e107089d6640
core (memory/persistent): better default value handling in LazyPersistentBinaryDict (don't jump to debugger in debug mode if value is not found)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
255 d.addErrback(self._defaultOrException, default=default) |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
256 return d |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
257 |
3234
78fea49735c5
core (memory/persistent): added `aset` method in LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3225
diff
changeset
|
258 def aset(self, key, value): |
78fea49735c5
core (memory/persistent): added `aset` method in LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3225
diff
changeset
|
259 """Async set, return a Deferred fired when value is actually stored""" |
78fea49735c5
core (memory/persistent): added `aset` method in LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3225
diff
changeset
|
260 # FIXME: redundant with force, force must be removed |
78fea49735c5
core (memory/persistent): added `aset` method in LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3225
diff
changeset
|
261 # XXX: similar as PersistentDict.aset, but doesn't use cache |
78fea49735c5
core (memory/persistent): added `aset` method in LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3225
diff
changeset
|
262 return self.storage.setPrivateValue(self.namespace, key, value, |
78fea49735c5
core (memory/persistent): added `aset` method in LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3225
diff
changeset
|
263 self.binary, self.profile) |
78fea49735c5
core (memory/persistent): added `aset` method in LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3225
diff
changeset
|
264 |
3253
1af840e84af7
core (memory/persistent): fixed "items", added "all" + "adel" to LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3234
diff
changeset
|
265 def adel(self, key): |
1af840e84af7
core (memory/persistent): fixed "items", added "all" + "adel" to LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3234
diff
changeset
|
266 """Async del, return a Deferred fired when value is actually deleted""" |
1af840e84af7
core (memory/persistent): fixed "items", added "all" + "adel" to LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3234
diff
changeset
|
267 # XXX: similar as PersistentDict.adel, but doesn't use cache |
1af840e84af7
core (memory/persistent): fixed "items", added "all" + "adel" to LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3234
diff
changeset
|
268 return self.storage.delPrivateValue( |
1af840e84af7
core (memory/persistent): fixed "items", added "all" + "adel" to LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3234
diff
changeset
|
269 self.namespace, key, self.binary, self.profile) |
1af840e84af7
core (memory/persistent): fixed "items", added "all" + "adel" to LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3234
diff
changeset
|
270 |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
271 def setdefault(self, key, default): |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
272 raise NotImplementedError |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
273 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
274 def force(self, name, value): |
432
31e8c48b5f5d
core: - memory refactoring (moved memory.py and sqlite.py from tools to memory)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
275 """Force saving of an attribute to storage |
2182
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
276 |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
277 @param value(object): value is needed for LazyPersistentBinaryDict |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
278 @return: deferred fired when data is actually saved |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
279 """ |
087eec4c6c07
memory (persistent, sqlite): better private values handling + new LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
280 return self.storage.setPrivateValue(self.namespace, name, value, self.binary, self.profile) |
2734
9702025f6dff
core (memory/persistent): new LazyPersistentBinaryDict.remove method
Goffi <goffi@goffi.org>
parents:
2644
diff
changeset
|
281 |
9702025f6dff
core (memory/persistent): new LazyPersistentBinaryDict.remove method
Goffi <goffi@goffi.org>
parents:
2644
diff
changeset
|
282 def remove(self, key): |
9702025f6dff
core (memory/persistent): new LazyPersistentBinaryDict.remove method
Goffi <goffi@goffi.org>
parents:
2644
diff
changeset
|
283 """Delete a key from sotrage, and return a deferred called when it's done |
9702025f6dff
core (memory/persistent): new LazyPersistentBinaryDict.remove method
Goffi <goffi@goffi.org>
parents:
2644
diff
changeset
|
284 |
9702025f6dff
core (memory/persistent): new LazyPersistentBinaryDict.remove method
Goffi <goffi@goffi.org>
parents:
2644
diff
changeset
|
285 @param key(unicode): key to delete |
9702025f6dff
core (memory/persistent): new LazyPersistentBinaryDict.remove method
Goffi <goffi@goffi.org>
parents:
2644
diff
changeset
|
286 @return (D): A deferred fired when delete is done |
9702025f6dff
core (memory/persistent): new LazyPersistentBinaryDict.remove method
Goffi <goffi@goffi.org>
parents:
2644
diff
changeset
|
287 """ |
9702025f6dff
core (memory/persistent): new LazyPersistentBinaryDict.remove method
Goffi <goffi@goffi.org>
parents:
2644
diff
changeset
|
288 return self.storage.delPrivateValue(self.namespace, key, self.binary, self.profile) |