Expose feature "commands"

darcs-hash:20070626060756-86b55-245bae8c7527b595e9786995582adff31072828e.gz
This commit is contained in:
David Rousselie
2007-06-26 08:07:56 +02:00
parent 4bf2efa6eb
commit 04a0292285
3 changed files with 54 additions and 33 deletions

View File

@@ -331,10 +331,6 @@ class JCLComponent(Component, object):
self.stream.send(info_query)
return 1
def disco_get_commands_list():
"""Return Ad-Hoc commands list"""
return None
def disco_get_info(self, node, info_query):
"""Discovery get info handler
"""
@@ -370,7 +366,8 @@ class JCLComponent(Component, object):
self.account_manager.account_type_disco_get_items(from_jid,
account_type),
lambda name, from_jid, account_type, lang_class: \
self.account_manager.root_disco_get_items(from_jid,
self.account_manager.root_disco_get_items(node,
from_jid,
lang_class))
if result is None:
lang_class = self.lang.get_lang_class_from_node(info_query.get_node())
@@ -644,6 +641,7 @@ class AccountManager(object):
if not node:
disco_info = DiscoInfo()
disco_info.add_feature("jabber:iq:version")
disco_info.add_feature("http://jabber.org/protocol/commands")
if not self.has_multiple_account_type:
disco_info.add_feature("jabber:iq:register")
DiscoIdentity(disco_info, name,
@@ -667,27 +665,24 @@ class AccountManager(object):
+ " class not in account_classes")
return None
def root_disco_get_items(self, from_jid, lang_class):
def root_disco_get_items(self, node, from_jid, lang_class):
"""Discovery get_items on root node"""
if node is not None:
return None
disco_items = None
if self.has_multiple_account_type: # list accounts with only one type declared
def _list_account_types(disco_items, account_class, bare_from_jid, account_type):
disco_items = DiscoItems()
for account_type in self.account_types:
type_label_attr = "type_" + account_type.lower() + "_name"
if hasattr(lang_class, type_label_attr):
type_label = getattr(lang_class, type_label_attr)
else:
type_label = account_type
return DiscoItem(disco_items,
JID(unicode(self.component.jid) + "/" +
account_type),
account_type,
type_label)
disco_items = DiscoItems()
for account_type in self.account_types:
_list_account_types(disco_items,
self._get_account_class(account_type
+ "Account"),
from_jid.bare(), account_type)
DiscoItem(disco_items,
JID(unicode(self.component.jid) + "/" +
account_type),
account_type,
type_label)
else:
disco_items = self._list_accounts(self.account_classes[0],
from_jid.bare())

View File

@@ -568,7 +568,7 @@ class JCLComponent_TestCase(unittest.TestCase):
info_query = Iq(stanza_type = "get", \
from_jid = "user1@test.com", \
to_jid = "jcl.test.com")
disco_items = self.comp.disco_get_items("unknown", info_query)
disco_items = self.comp.disco_get_items(None, info_query)
self.assertEquals(len(disco_items.get_items()), 1)
disco_item = disco_items.get_items()[0]
self.assertEquals(disco_item.get_jid(), account1.jid)
@@ -576,10 +576,33 @@ class JCLComponent_TestCase(unittest.TestCase):
self.assertEquals(disco_item.get_name(), account1.long_name)
def test_disco_get_items_unknown_node(self):
self.comp.account_manager.account_classes = (ExampleAccount, )
account.hub.threadConnection = connectionForURI('sqlite://' + DB_URL)
account11 = ExampleAccount(user_jid="user1@test.com",
name="account11",
jid="account11@jcl.test.com")
del account.hub.threadConnection
info_query = Iq(stanza_type="get",
from_jid="user1@test.com",
to_jid="jcl.test.com")
disco_items = self.comp.disco_get_items(None, info_query)
disco_items = self.comp.disco_get_items("unknown", info_query)
self.assertEquals(disco_items, None)
def test_disco_get_items_unknown_node_multiple_account_types(self):
self.comp.account_manager.account_classes = (ExampleAccount, Example2Account)
account.hub.threadConnection = connectionForURI('sqlite://' + DB_URL)
account11 = ExampleAccount(user_jid="user1@test.com",
name="account11",
jid="account11@jcl.test.com")
account21 = Example2Account(user_jid="user1@test.com",
name="account21",
jid="account21@jcl.test.com")
del account.hub.threadConnection
info_query = Iq(stanza_type="get",
from_jid="user1@test.com",
to_jid="jcl.test.com")
self.comp.account_manager.has_multiple_account_type = True
disco_items = self.comp.disco_get_items("unknown", info_query)
self.assertEquals(disco_items, None)
def test_disco_get_items_1type_with_node(self):
@@ -600,24 +623,27 @@ class JCLComponent_TestCase(unittest.TestCase):
self.comp.lang = LangExample()
self.comp.account_manager.account_classes = (ExampleAccount, Example2Account)
account.hub.threadConnection = connectionForURI('sqlite://' + DB_URL)
account11 = ExampleAccount(user_jid = "user1@test.com", \
name = "account11", \
jid = "account11@jcl.test.com")
account21 = Example2Account(user_jid = "user1@test.com", \
name = "account21", \
jid = "account21@jcl.test.com")
account11 = ExampleAccount(user_jid="user1@test.com",
name="account11",
jid="account11@jcl.test.com")
account21 = Example2Account(user_jid="user1@test.com",
name="account21",
jid="account21@jcl.test.com")
del account.hub.threadConnection
info_query = Iq(stanza_type = "get", \
from_jid = "user1@test.com", \
to_jid = "jcl.test.com")
info_query = Iq(stanza_type="get",
from_jid="user1@test.com",
to_jid="jcl.test.com")
disco_items = self.comp.disco_get_items(None, info_query)
self.assertEquals(len(disco_items.get_items()), 2)
disco_item = disco_items.get_items()[0]
self.assertEquals(unicode(disco_item.get_jid()), unicode(self.comp.jid) + "/Example")
self.assertEquals(unicode(disco_item.get_jid()),
unicode(self.comp.jid) + "/Example")
self.assertEquals(disco_item.get_node(), "Example")
self.assertEquals(disco_item.get_name(), LangExample.en.type_example_name)
self.assertEquals(disco_item.get_name(),
LangExample.en.type_example_name)
disco_item = disco_items.get_items()[1]
self.assertEquals(unicode(disco_item.get_jid()), unicode(self.comp.jid) + "/Example2")
self.assertEquals(unicode(disco_item.get_jid()),
unicode(self.comp.jid) + "/Example2")
self.assertEquals(disco_item.get_node(), "Example2")
# no name in language class for type Example2, so fallback on type name
self.assertEquals(disco_item.get_name(), "Example2")

View File

@@ -153,7 +153,7 @@ class Lang:
get_gateway_desc = u"Entrer l'adresse email de votre contact"
get_gateway_prompt = u"Adresse email"
command_list = u"List les comptes"
command_list = u"Liste les comptes"
class nl:
# TODO: when finish, delete this line and uncomment in tests/lang.py the makeSuite(Language_nl_TestCase, 'test') line