From 3d0d70c97674f96c811ba5fe46c1057cdd2125a2 Mon Sep 17 00:00:00 2001 From: David Rousselie Date: Tue, 8 Jun 2010 19:32:30 +0200 Subject: Add post processing boolean field function to take into account boolean sent as strings --- src/jcl/jabber/component.py | 14 +++++++------- src/jcl/model/account.py | 11 +++++++++++ src/jcl/model/tests/account.py | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/jcl/jabber/component.py b/src/jcl/jabber/component.py index d8ce64d..e82e1a3 100644 --- a/src/jcl/jabber/component.py +++ b/src/jcl/jabber/component.py @@ -258,7 +258,7 @@ class AccountManager(object): lang_class, x_data): """Update account""" - self.__logger.debug("Updating account " + account_name) + self.__logger.debug("Updating account " + str(account_name)) bare_from_jid = unicode(from_jid.bare()) _account = account.get_account(bare_from_jid, account_name) @@ -341,7 +341,7 @@ class AccountManager(object): presence)) for _account in account.get_all_accounts(): result.extend(getattr(self, "get_account_presence_" + - presence)(_account.user.jid, _account)) + str(presence))(_account.user.jid, _account)) return result def get_root_presence(self, to_jid, presence_type, @@ -418,8 +418,8 @@ class AccountManager(object): if account_class is None: account_class = self.account_classes[0] if account_type is not None and account_type != "": - resource = "/" + account_type - account_type = account_type + "/" + resource = "/" + str(account_type) + account_type = str(account_type) + "/" else: resource = "" model.db_connect() @@ -432,7 +432,7 @@ class AccountManager(object): def list_account_types(self, lang_class): """List account supported types""" for account_type in self.account_types: - type_label_attr = "type_" + account_type.lower() + "_name" + type_label_attr = "type_" + str(account_type).lower() + "_name" if hasattr(lang_class, type_label_attr): type_label = getattr(lang_class, type_label_attr) else: @@ -519,7 +519,7 @@ class AccountManager(object): def get_account_jid(self, name): """Compose account jid from account name""" - return name + u"@" + unicode(self.component.jid) + return unicode(name) + u"@" + unicode(self.component.jid) def ask_password(self, to_jid, _account, lang_class): """Send a Jabber message to ask for account password @@ -1079,7 +1079,7 @@ class JCLComponent(Component, object): """Handle new message Handle password response message """ - self.__logger.debug("MESSAGE: " + message.get_body()) + self.__logger.debug("MESSAGE: " + str(message.get_body())) self.apply_registered_behavior(self.msg_handlers, message) return 1 diff --git a/src/jcl/model/account.py b/src/jcl/model/account.py index 439de82..fc2fcbc 100644 --- a/src/jcl/model/account.py +++ b/src/jcl/model/account.py @@ -49,6 +49,17 @@ def default_post_func(field_value, default_func, bare_from_jid): return default_func(bare_from_jid) return field_value +def boolean_post_func(field_value, default_func, bare_from_jid): + """Return a boolean for boolean field""" + if field_value is None or str(field_value) == "": + return default_func(bare_from_jid) + if isinstance(field_value, str) or isinstance(field_value, unicode): + field_value = field_value.lower() + bool_value = (field_value == "true" or field_value == "1") + else: + bool_value = field_value + return bool_value + def int_post_func(field_value, default_func, bare_from_jid): """Return an integer from integer field value""" if field_value is None or str(field_value) == "": diff --git a/src/jcl/model/tests/account.py b/src/jcl/model/tests/account.py index 9910866..964d776 100644 --- a/src/jcl/model/tests/account.py +++ b/src/jcl/model/tests/account.py @@ -137,6 +137,42 @@ class AccountModule_TestCase(JCLTestCase): "user1@jcl.test.com") self.assertEquals(result, "test") + def test_boolean_post_func_with_1_str(self): + result = account.boolean_post_func("1", None, "user1@jcl.test.com") + self.assertEquals(result, True) + + def test_boolean_post_func_with_True_str(self): + result = account.boolean_post_func("True", None, "user1@jcl.test.com") + self.assertEquals(result, True) + + def test_boolean_post_func_with_False_str(self): + result = account.boolean_post_func("False", None, "user1@jcl.test.com") + self.assertEquals(result, False) + + def test_boolean_post_func_with_1_unicode(self): + result = account.boolean_post_func(u"1", None, "user1@jcl.test.com") + self.assertEquals(result, True) + + def test_boolean_post_func_with_True_unicode(self): + result = account.boolean_post_func(u"true", None, "user1@jcl.test.com") + self.assertEquals(result, True) + + def test_boolean_post_func_with_False_unicode(self): + result = account.boolean_post_func(u"False", None, "user1@jcl.test.com") + self.assertEquals(result, False) + + def test_boolean_post_func_with_1(self): + result = account.boolean_post_func(1, None, "user1@jcl.test.com") + self.assertEquals(result, False) + + def test_boolean_post_func_with_True(self): + result = account.boolean_post_func(True, None, "user1@jcl.test.com") + self.assertEquals(result, True) + + def test_boolean_post_func_with_False(self): + result = account.boolean_post_func(False, None, "user1@jcl.test.com") + self.assertEquals(result, False) + def test_int_post_func(self): result = account.int_post_func("42", None, "user1@jcl.test.com") self.assertEquals(result, 42) -- cgit v1.2.3