Correct get_register_fields inheritance usage

PresenceAccount subclasses called PresenceAccount.get_register_fields but
the "cls" parameter was always PresenceAccount. Now subclasses pass a "real_class"
parameter which contains the class type on which get_register_fields was called.

darcs-hash:20070325122936-86b55-fb6db014fbdeaa2fa1a423b935df5e72ffe6a20a.gz
This commit is contained in:
David Rousselie
2007-03-25 14:29:36 +02:00
parent 289e1f2c36
commit 0fad164e57
5 changed files with 38 additions and 19 deletions

View File

@@ -435,12 +435,11 @@ class JCLComponent(Component, object):
_account = new_account_class(user_jid = unicode(base_from_jid), \
name = name, \
jid = name + u"@" + unicode(self.jid))
self.__logger.debug("Account '" + str(name) + "' created: " + str(_account))
field = None
try:
self.__logger.debug("Populating " + str(_account))
for (field, field_type, field_options, field_post_func, \
field_default_func) in _account.get_register_fields():
self.__logger.debug("Testing " + field)
if field is not None:
if field in x_data:
value = x_data[field].value
@@ -571,9 +570,11 @@ class JCLComponent(Component, object):
accounts = None
self.db_connect()
if not name:
self.__logger.debug("subscribe request on main jid")
accounts = self.account_classes[0].select(\
self.account_classes[0].q.user_jid == base_from_jid)
else:
self.__logger.debug("subscribe request on '" + name + "' account")
accounts = self.account_classes[0].select(\
AND(self.account_classes[0].q.name == name, \
self.account_classes[0].q.user_jid == base_from_jid))
@@ -581,6 +582,10 @@ class JCLComponent(Component, object):
and accounts.count() > 0):
presence = stanza.make_accept_response()
self.stream.send(presence)
else:
self.__logger.debug("Account '" + str(name) + "' for user '" + \
str(base_from_jid) + "' was not found. " + \
"Refusing subscription")
self.db_disconnect()
return 1

View File

@@ -25,7 +25,7 @@
"""
__revision__ = "$Id: account.py,v 1.3 2005/09/18 20:24:07 dax Exp $"
2
from sqlobject.inheritance import InheritableSQLObject
from sqlobject.col import StringCol, EnumCol, IntCol, BoolCol
from sqlobject.dbconnection import ConnectionHub
@@ -111,7 +111,7 @@ class Account(InheritableSQLObject):
status = property(get_status, set_status)
def _get_register_fields(cls):
def _get_register_fields(cls, real_class = None):
"""Return a list of tuples for X Data Form composition
A tuple is composed of:
- field_name: might be the name of one of the class attribut
@@ -181,10 +181,10 @@ class PresenceAccount(Account):
get_presence_actions_fields = classmethod(_get_presence_actions_fields)
def _get_register_fields(cls):
def _get_register_fields(cls, real_class = None):
""" See Account._get_register_fields """
def get_possibles_actions(presence_action_field):
return cls.get_presence_actions_fields()[presence_action_field][0]
return real_class.get_presence_actions_fields()[presence_action_field][0]
def is_action_possible(presence_action_field, action, default_func):
if int(action) in get_possibles_actions(presence_action_field):
@@ -192,9 +192,11 @@ class PresenceAccount(Account):
raise default_func()
def get_default_presence_action(presence_action_field):
return cls.get_presence_actions_fields()[presence_action_field][1]
return real_class.get_presence_actions_fields()[presence_action_field][1]
return Account.get_register_fields() + \
if real_class is None:
real_class = cls
return Account.get_register_fields(real_class) + \
[(None, None, None, None, None), \
("chat_action", "list-single", \
[str(action) for action in get_possibles_actions("chat_action")], \