Mercurial > libervia-backend
comparison src/memory/memory.py @ 538:2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
- added profile argument to askConfirmation, actionResult, actionResultExt, entityDataUpdated, confirmationAnswer, getProgress
- core, frontends: fixed calls/signals according to new bridge API
- user of proper profile namespace for progression indicators and dialogs
- memory: getParam* now return bool when param type is bool
- memory: added getStringParam* to return string instead of typed value
- core, memory, storage, quick_frontend: getHistory now manage properly multi-profiles
- plugins XEP-0047, XEP-0054, XEP-0065, XEP-0077, XEP-0096; multi-profiles proper handling
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 10 Nov 2012 16:38:16 +0100 |
parents | 862c0d6ab974 |
children | 2b3e3349f6a4 |
comparison
equal
deleted
inserted
replaced
537:28cddc96c4ed | 538:2c4016921403 |
---|---|
225 del node[1].attributes['default_cb'] | 225 del node[1].attributes['default_cb'] |
226 d = defer.maybeDeferred(callback) | 226 d = defer.maybeDeferred(callback) |
227 d.addCallback(self.__default_ok, name, category) | 227 d.addCallback(self.__default_ok, name, category) |
228 d.addErrback(errback or self.__default_ko, name, category) | 228 d.addErrback(errback or self.__default_ko, name, category) |
229 | 229 |
230 def __getAttr(self, node, attr, value): | |
231 """ get attribute value | |
232 @param node: XML param node | |
233 @param attr: name of the attribute to get (e.g.: 'value' or 'type') | |
234 @param value: user defined value""" | |
235 if attr == 'value': | |
236 value_to_use = value if value!=None else node.getAttribute(attr) #we use value (user defined) if it exist, else we use node's default value | |
237 if node.getAttribute('type') == 'bool': | |
238 return value_to_use.lower() not in ('false','0') | |
239 return value_to_use | |
240 return node.getAttribute(attr) | |
241 | |
242 def __type_to_string(self, result): | |
243 """ convert result to string, according to its type """ | |
244 if isinstance(result,bool): | |
245 return "true" if result else "false" | |
246 return result | |
247 | |
248 def getStringParamA(self, name, category, attr="value", profile_key="@DEFAULT@"): | |
249 """ Same as getParamA but for bridge: convert non string value to string """ | |
250 return self.__type_to_string(self.getParamA(name, category, attr, profile_key)) | |
251 | |
230 def getParamA(self, name, category, attr="value", profile_key="@DEFAULT@"): | 252 def getParamA(self, name, category, attr="value", profile_key="@DEFAULT@"): |
231 """Helper method to get a specific attribute | 253 """Helper method to get a specific attribute |
232 @param name: name of the parameter | 254 @param name: name of the parameter |
233 @param category: category of the parameter | 255 @param category: category of the parameter |
234 @param attr: name of the attribute (default: "value") | 256 @param attr: name of the attribute (default: "value") |
235 @param profile: owner of the param (@ALL@ for everyone) | 257 @param profile: owner of the param (@ALL@ for everyone) |
236 | 258 |
237 @return: attribute""" | 259 @return: attribute""" |
260 #FIXME: looks really dirty and buggy, need to be reviewed/refactored | |
238 node = self.__getParamNode(name, category) | 261 node = self.__getParamNode(name, category) |
239 if not node: | 262 if not node: |
240 error(_("Requested param [%(name)s] in category [%(category)s] doesn't exist !") % {'name':name, 'category':category}) | 263 error(_("Requested param [%(name)s] in category [%(category)s] doesn't exist !") % {'name':name, 'category':category}) |
241 return "" | 264 raise exceptions.NotFound |
242 | 265 |
243 if node[0] == 'general': | 266 if node[0] == 'general': |
244 value = self.__getParam(None, category, name, 'general') | 267 value = self.__getParam(None, category, name, 'general') |
245 return value if value!=None else node[1].getAttribute(attr) | 268 return self.__getAttr(node[1], attr, value) |
246 | 269 |
247 assert(node[0] == 'individual') | 270 assert(node[0] == 'individual') |
248 | 271 |
249 profile = self.getProfileName(profile_key) | 272 profile = self.getProfileName(profile_key) |
250 if not profile: | 273 if not profile: |
251 error(_('Requesting a param for an non-existant profile')) | 274 error(_('Requesting a param for an non-existant profile')) |
252 return "" | 275 raise exceptions.ProfileUnknownError |
253 | 276 |
254 if profile not in self.params: | 277 if profile not in self.params: |
255 error(_('Requesting synchronous param for not connected profile')) | 278 error(_('Requesting synchronous param for not connected profile')) |
256 return "" | 279 raise exceptions.ConnectedProfileError |
257 | 280 |
258 if attr == "value": | 281 if attr == "value": |
259 value = self.__getParam(profile, category, name) | 282 value = self.__getParam(profile, category, name) |
260 return value if value!=None else node[1].getAttribute(attr) | 283 return self.__getAttr(node[1], attr, value) |
261 else: | 284 |
262 return node[1].getAttribute(attr) | 285 def asyncGetStringParamA(self, name, category, attr="value", profile_key="@DEFAULT@"): |
286 d = self.asyncGetParamA(name, category, attr, profile_key) | |
287 d.addCallback(self.__type_to_string) | |
288 return d | |
263 | 289 |
264 def asyncGetParamA(self, name, category, attr="value", profile_key="@DEFAULT@"): | 290 def asyncGetParamA(self, name, category, attr="value", profile_key="@DEFAULT@"): |
265 """Helper method to get a specific attribute | 291 """Helper method to get a specific attribute |
266 @param name: name of the parameter | 292 @param name: name of the parameter |
267 @param category: category of the parameter | 293 @param category: category of the parameter |
272 error(_("Requested param [%(name)s] in category [%(category)s] doesn't exist !") % {'name':name, 'category':category}) | 298 error(_("Requested param [%(name)s] in category [%(category)s] doesn't exist !") % {'name':name, 'category':category}) |
273 return None | 299 return None |
274 | 300 |
275 if node[0] == 'general': | 301 if node[0] == 'general': |
276 value = self.__getParam(None, category, name, 'general') | 302 value = self.__getParam(None, category, name, 'general') |
277 return defer.succeed(value if value!=None else node[1].getAttribute(attr)) | 303 return defer.succeed(self.__getAttr(node[1], attr, value)) |
278 | 304 |
279 assert(node[0] == 'individual') | 305 assert(node[0] == 'individual') |
280 | 306 |
281 profile = self.getProfileName(profile_key) | 307 profile = self.getProfileName(profile_key) |
282 if not profile: | 308 if not profile: |
283 error(_('Requesting a param for a non-existant profile')) | 309 error(_('Requesting a param for a non-existant profile')) |
284 return defer.fail() | 310 return defer.fail() |
285 | 311 |
286 if attr != "value": | 312 if attr != "value": |
287 return defer.succeed(node[1].getAttribute(attr)) | 313 return defer.succeed(node[1].getAttribute(attr)) |
288 default = node[1].getAttribute(attr) | |
289 try: | 314 try: |
290 value = self.__getParam(profile, category, name) | 315 value = self.__getParam(profile, category, name) |
291 return defer.succeed(value if value!=None else default) | 316 return defer.succeed(self.__getAttr(node[1], attr, value)) |
292 except exceptions.ProfileNotInCacheError: | 317 except exceptions.ProfileNotInCacheError: |
293 #We have to ask data to the storage manager | 318 #We have to ask data to the storage manager |
294 d = self.storage.getIndParam(category, name, profile) | 319 d = self.storage.getIndParam(category, name, profile) |
295 return d.addCallback(lambda value: value if value!=None else default) | 320 return d.addCallback(lambda value: self.__getAttr(node[1], attr, value)) |
296 | 321 |
297 def __getParam(self, profile, category, name, _type='individual', cache=None): | 322 def __getParam(self, profile, category, name, _type='individual', cache=None): |
298 """Return the param, or None if it doesn't exist | 323 """Return the param, or None if it doesn't exist |
299 @param profile: the profile name (not profile key, i.e. name and not something like @DEFAULT@) | 324 @param profile: the profile name (not profile key, i.e. name and not something like @DEFAULT@) |
300 @param category: param category | 325 @param category: param category |
301 @param name: param name | 326 @param name: param name |
302 @param type: "general" or "individual" | 327 @param _type: "general" or "individual" |
303 @param cache: temporary cache, to use when profile is not logged | 328 @param cache: temporary cache, to use when profile is not logged |
304 @return: param value or None if it doesn't exist | 329 @return: param value or None if it doesn't exist |
305 """ | 330 """ |
306 if _type == 'general': | 331 if _type == 'general': |
307 if self.params_gen.has_key((category, name)): | 332 if self.params_gen.has_key((category, name)): |
612 | 637 |
613 def addToHistory(self, from_jid, to_jid, message, _type='chat', timestamp=None, profile="@NONE@"): | 638 def addToHistory(self, from_jid, to_jid, message, _type='chat', timestamp=None, profile="@NONE@"): |
614 assert(profile!="@NONE@") | 639 assert(profile!="@NONE@") |
615 return self.storage.addToHistory(from_jid, to_jid, message, _type, timestamp, profile) | 640 return self.storage.addToHistory(from_jid, to_jid, message, _type, timestamp, profile) |
616 | 641 |
617 def getHistory(self, from_jid, to_jid, limit=0, between=True): | 642 def getHistory(self, from_jid, to_jid, limit=0, between=True, profile="@NONE@"): |
618 return self.storage.getHistory(jid.JID(from_jid), jid.JID(to_jid), limit, between) | 643 assert(profile != "@NONE@") |
644 return self.storage.getHistory(jid.JID(from_jid), jid.JID(to_jid), limit, between, profile) | |
619 | 645 |
620 def addServerFeature(self, feature, profile): | 646 def addServerFeature(self, feature, profile): |
621 """Add a feature discovered from server | 647 """Add a feature discovered from server |
622 @param feature: string of the feature | 648 @param feature: string of the feature |
623 @param profile: which profile is using this server ?""" | 649 @param profile: which profile is using this server ?""" |
786 if not self.subscriptions.has_key(profile): | 812 if not self.subscriptions.has_key(profile): |
787 return {} | 813 return {} |
788 | 814 |
789 return self.subscriptions[profile] | 815 return self.subscriptions[profile] |
790 | 816 |
817 def getStringParamA(self, name, category, attr="value", profile_key='@DEFAULT@'): | |
818 return self.params.getStringParamA(name, category, attr, profile_key) | |
819 | |
791 def getParamA(self, name, category, attr="value", profile_key='@DEFAULT@'): | 820 def getParamA(self, name, category, attr="value", profile_key='@DEFAULT@'): |
792 return self.params.getParamA(name, category, attr, profile_key) | 821 return self.params.getParamA(name, category, attr, profile_key) |
793 | 822 |
794 def asyncGetParamA(self, name, category, attr="value", profile_key='@DEFAULT@'): | 823 def asyncGetStringParamA(self, name, category, attr="value", profile_key='@DEFAULT@'): |
795 return self.params.asyncGetParamA(name, category, attr, profile_key) | 824 return self.params.asyncGetStringParamA(name, category, attr, profile_key) |
796 | 825 |
797 def getParamsUI(self, profile_key): | 826 def getParamsUI(self, profile_key): |
798 return self.params.getParamsUI(profile_key) | 827 return self.params.getParamsUI(profile_key) |
799 | 828 |
800 def getParams(self, profile_key): | 829 def getParams(self, profile_key): |