Make component works with Account subclasses
darcs-hash:20070117173408-86b55-eaf9be902109c4269dbbfc589e7284e55bc1d3eb.gz
This commit is contained in:
@@ -63,7 +63,7 @@ if __name__ == '__main__':
|
|||||||
jcl_suite = unittest.TestSuite()
|
jcl_suite = unittest.TestSuite()
|
||||||
# jcl_suite.addTest(FeederComponent_TestCase('test_handle_tick'))
|
# jcl_suite.addTest(FeederComponent_TestCase('test_handle_tick'))
|
||||||
# jcl_suite.addTest(JCLComponent_TestCase('test_handle_set_register_new_field_mandatory'))
|
# jcl_suite.addTest(JCLComponent_TestCase('test_handle_set_register_new_field_mandatory'))
|
||||||
# jcl_suite = unittest.TestSuite((feeder_component_suite))
|
# jcl_suite = unittest.TestSuite((component_suite))
|
||||||
# jcl_suite = unittest.TestSuite((presence_account_suite))
|
# jcl_suite = unittest.TestSuite((presence_account_suite))
|
||||||
jcl_suite = unittest.TestSuite((component_suite, \
|
jcl_suite = unittest.TestSuite((component_suite, \
|
||||||
feeder_component_suite, \
|
feeder_component_suite, \
|
||||||
@@ -74,7 +74,8 @@ if __name__ == '__main__':
|
|||||||
option_suite, \
|
option_suite, \
|
||||||
lang_suite, \
|
lang_suite, \
|
||||||
account_module_suite, \
|
account_module_suite, \
|
||||||
account_suite))
|
account_suite, \
|
||||||
|
presence_account_suite))
|
||||||
test_support.run_suite(jcl_suite)
|
test_support.run_suite(jcl_suite)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import re
|
|||||||
|
|
||||||
from Queue import Queue
|
from Queue import Queue
|
||||||
|
|
||||||
|
from sqlobject.inheritance import InheritableSQLObject
|
||||||
from sqlobject.sqlbuilder import AND
|
from sqlobject.sqlbuilder import AND
|
||||||
from sqlobject.dbconnection import connectionForURI
|
from sqlobject.dbconnection import connectionForURI
|
||||||
|
|
||||||
@@ -108,7 +109,12 @@ class JCLComponent(Component, object):
|
|||||||
create associated table via SQLObject"""
|
create associated table via SQLObject"""
|
||||||
self.__account_class = account_class
|
self.__account_class = account_class
|
||||||
self.db_connect()
|
self.db_connect()
|
||||||
self.__account_class.createTable(ifNotExists = True)
|
if account_class._inheritable:
|
||||||
|
while account_class != InheritableSQLObject:
|
||||||
|
account_class.createTable(ifNotExists = True)
|
||||||
|
account_class = account_class.__base__
|
||||||
|
else:
|
||||||
|
self.__account_class.createTable(ifNotExists = True)
|
||||||
self.db_disconnect()
|
self.db_disconnect()
|
||||||
|
|
||||||
def get_account_class(self):
|
def get_account_class(self):
|
||||||
@@ -150,8 +156,11 @@ class JCLComponent(Component, object):
|
|||||||
and self.stream.socket is not None:
|
and self.stream.socket is not None:
|
||||||
current_user_jid = None
|
current_user_jid = None
|
||||||
self.db_connect()
|
self.db_connect()
|
||||||
|
# Explicit reference to account table (clauseTables) to use
|
||||||
|
# "user_jid" column with Account subclasses
|
||||||
for _account in \
|
for _account in \
|
||||||
self.account_class.select(orderBy = "user_jid"):
|
self.account_class.select(clauseTables = ["account"], \
|
||||||
|
orderBy = "user_jid"):
|
||||||
if current_user_jid != _account.user_jid:
|
if current_user_jid != _account.user_jid:
|
||||||
current_user_jid = _account.user_jid
|
current_user_jid = _account.user_jid
|
||||||
self.stream.send(Presence(\
|
self.stream.send(Presence(\
|
||||||
@@ -177,6 +186,7 @@ class JCLComponent(Component, object):
|
|||||||
pool) associated to the current thread"""
|
pool) associated to the current thread"""
|
||||||
account.hub.threadConnection = \
|
account.hub.threadConnection = \
|
||||||
connectionForURI(self.db_connection_str)
|
connectionForURI(self.db_connection_str)
|
||||||
|
# account.hub.threadConnection.debug = True
|
||||||
|
|
||||||
def db_disconnect(self):
|
def db_disconnect(self):
|
||||||
"""Delete connection associated to the current thread"""
|
"""Delete connection associated to the current thread"""
|
||||||
@@ -239,7 +249,8 @@ class JCLComponent(Component, object):
|
|||||||
self.handle_message)
|
self.handle_message)
|
||||||
current_jid = None
|
current_jid = None
|
||||||
self.db_connect()
|
self.db_connect()
|
||||||
for _account in self.account_class.select(orderBy = "user_jid"):
|
for _account in self.account_class.select(clauseTables = ["account"], \
|
||||||
|
orderBy = "user_jid"):
|
||||||
if _account.user_jid != current_jid:
|
if _account.user_jid != current_jid:
|
||||||
presence = Presence(from_jid = unicode(self.jid), \
|
presence = Presence(from_jid = unicode(self.jid), \
|
||||||
to_jid = _account.user_jid, \
|
to_jid = _account.user_jid, \
|
||||||
@@ -662,18 +673,21 @@ class JCLComponent(Component, object):
|
|||||||
|
|
||||||
for (field, field_type, post_func, default_func) in \
|
for (field, field_type, post_func, default_func) in \
|
||||||
self.account_class.get_register_fields():
|
self.account_class.get_register_fields():
|
||||||
lang_label_attr = self.account_class.__name__.lower() \
|
if field is None:
|
||||||
+ "_" + field
|
# TODO : Add page when empty tuple given
|
||||||
if hasattr(lang_class, lang_label_attr):
|
pass
|
||||||
label = getattr(lang_class, lang_label_attr)
|
|
||||||
else:
|
else:
|
||||||
label = field
|
lang_label_attr = self.account_class.__name__.lower() \
|
||||||
field = reg_form.add_field(field_type = field_type, \
|
+ "_" + field
|
||||||
label = label, \
|
if hasattr(lang_class, lang_label_attr):
|
||||||
var = field)
|
label = getattr(lang_class, lang_label_attr)
|
||||||
if default_func == account.mandatory_field:
|
else:
|
||||||
field.required = True
|
label = field
|
||||||
## TODO : Add page when empty tuple given
|
field = reg_form.add_field(field_type = field_type, \
|
||||||
|
label = label, \
|
||||||
|
var = field)
|
||||||
|
if default_func == account.mandatory_field:
|
||||||
|
field.required = True
|
||||||
## TODO : get default value if any
|
## TODO : get default value if any
|
||||||
return reg_form
|
return reg_form
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,8 @@ class FeederComponent(JCLComponent):
|
|||||||
def handle_tick(self):
|
def handle_tick(self):
|
||||||
"""Implement main feed/send behavior"""
|
"""Implement main feed/send behavior"""
|
||||||
self.db_connect()
|
self.db_connect()
|
||||||
for _account in self.account_class.select(orderBy = "user_jid"):
|
for _account in self.account_class.select(clauseTables = ["account"], \
|
||||||
|
orderBy = "user_jid"):
|
||||||
for data in self.feeder.feed(_account):
|
for data in self.feeder.feed(_account):
|
||||||
self.sender.send(_account, data)
|
self.sender.send(_account, data)
|
||||||
self.db_disconnect()
|
self.db_disconnect()
|
||||||
|
|||||||
@@ -183,5 +183,28 @@ class PresenceAccount(Account):
|
|||||||
PresenceAccount.DO_NOTHING)}
|
PresenceAccount.DO_NOTHING)}
|
||||||
|
|
||||||
get_presence_actions_fields = classmethod(_get_presence_actions_fields)
|
get_presence_actions_fields = classmethod(_get_presence_actions_fields)
|
||||||
|
|
||||||
|
|
||||||
|
def _get_register_fields(cls):
|
||||||
|
""" See Account._get_register_fields """
|
||||||
|
def is_action_possible(action):
|
||||||
|
if action in cls.possibles_actions:
|
||||||
|
return action
|
||||||
|
raise FieldError # TODO : add translated message
|
||||||
|
|
||||||
|
# TODO : check is_action_possible with presence_actions_fields (see partial eval function)
|
||||||
|
return Account.get_register_fields() + \
|
||||||
|
[(None, None, None, None), \
|
||||||
|
("chat_action", "list-single", is_action_possible, \
|
||||||
|
mandatory_field), \
|
||||||
|
("online_action", "list-single", is_action_possible, \
|
||||||
|
mandatory_field), \
|
||||||
|
("away_action", "list-single", is_action_possible, \
|
||||||
|
mandatory_field), \
|
||||||
|
("xa_action", "list-single", is_action_possible, \
|
||||||
|
mandatory_field), \
|
||||||
|
("dnd_action", "list-single", is_action_possible, \
|
||||||
|
mandatory_field), \
|
||||||
|
("offline_action", "list-single", is_action_possible, \
|
||||||
|
mandatory_field)]
|
||||||
|
|
||||||
|
get_register_fields = classmethod(_get_register_fields)
|
||||||
|
|||||||
@@ -43,7 +43,8 @@ class AccountExample(Account):
|
|||||||
return None
|
return None
|
||||||
return password
|
return password
|
||||||
|
|
||||||
return [("login", "text-single", account.string_not_null_post_func, \
|
return Account.get_register_fields() + \
|
||||||
|
[("login", "text-single", account.string_not_null_post_func, \
|
||||||
account.mandatory_field), \
|
account.mandatory_field), \
|
||||||
("password", "text-private", password_post_func, \
|
("password", "text-private", password_post_func, \
|
||||||
(lambda field_name: None)), \
|
(lambda field_name: None)), \
|
||||||
@@ -78,3 +79,4 @@ class PresenceAccountExample(PresenceAccount):
|
|||||||
PresenceAccountExample.DO_SOMETHING_ELSE)}
|
PresenceAccountExample.DO_SOMETHING_ELSE)}
|
||||||
|
|
||||||
get_presence_actions_fields = classmethod(_get_presence_actions_fields)
|
get_presence_actions_fields = classmethod(_get_presence_actions_fields)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user