I was trying to understand why my custom identity provider was
initialyzed so many times!
I raised an exception in __init__ at 3th object creation an get this:
job.py is ran in a scheduled task, and create users from external
events.
Traceback (most recent call last):
File "/s0/asx/src/emailgency/trunk/emailgency/jobs.py", line 273, in
__call__
user=model.User(user_name=user_name, email_addr=user_name,
display_name=user_name, password='ldap')
File "/kolab/lib/python/site-packages/SQLAlchemy-0.4.0-py2.5.egg/
sqlalchemy/orm/attributes.py", line 1021, in init
extra_init(class_, oldinit, instance, args, kwargs)
File "/kolab/lib/python/site-packages/SQLAlchemy-0.4.0-py2.5.egg/
sqlalchemy/orm/mapper.py", line 669, in extra_init
self.extension.init_instance(self, class_, oldinit, instance,
args, kwargs)
File "/kolab/lib/python/site-packages/SQLAlchemy-0.4.0-py2.5.egg/
sqlalchemy/orm/util.py", line 138, in _do
ret = getattr(elem, funcname)(*args, **kwargs)
File "/kolab/lib/python/site-packages/SQLAlchemy-0.4.0-py2.5.egg/
sqlalchemy/orm/scoping.py", line 127, in init_instance
setattr(instance, key, value)
File "/s0/asx/src/emailgency/trunk/emailgency/model.py", line 280,
in _set_password
self._password = identity.encrypt_password(password)
File "build\bdist.win32\egg\turbogears\identity\__init__.py", line
156, in encrypt_password
File "build\bdist.win32\egg\turbogears\identity\__init__.py", line
98, in __getattr__
The error is here at line 98
class ProviderWrapper(object):
def __getattr__(self, name):
try:
provider= cherrypy.request.identityProvider
except AttributeError:
try:
provider = create_default_provider() <-- LINE 92
except:
provider= None
if provider is None:
if not request_available():
raise RequestRequiredException() <-- LINE 98
raise IdentityManagementNotEnabledException()
return getattr(provider, name)
But the problem is at line 92 !
Tg should always reuse the same provider !
And not create a new one every time I create a new user !
Any comment ?
I solved this by removing the password property from my User class in
model.py
class User(object):
...
def _set_password(self, password):
"""
encrypts password on the fly using the encryption
algo defined in the configuration
"""
self._password = identity.encrypt_password(password)
def _get_password(self):
"""
returns password
"""
return self._password
# password = property(_get_password, _set_password)
Another problem is :
TG create already 2 provider at startup!
in identity/visitor.py
def start_extension():
# Bail out if the application hasn't enabled this extension
if not turbogears.config.get("identity.on", False):
return
# Identity requires that Visit tracking be enabled
if not turbogears.config.get("visit.on", False):
raise IdentityConfigurationException(
"Visit tracking must be enabled (visit.on)")
log.info("Identity starting")
# Temporary until tg-admin can call create_extension_model
* create_extension_model()
# Register the plugin for the Visit Tracking framework
* visit.enable_visit_plugin(IdentityVisitPlugin())
both * lines creat an identity provider !
I thing the first one shoul be reused by the second one.
Regards.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/turbogears?hl=en
-~----------~----~----~----~------~----~------~--~---