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
-~----------~----~----~----~------~----~------~--~---

Reply via email to