Re: membrane assertion error in getUserAuthProvider
from
ra
on Jul 02, 2008 06:57 PM
Jim Baack wrote:
> When I attempt to copy/paste or import a Plone site where I've created a single member of a remember-derived type I get the following assertion error (relevant code also included below). When I change the offending line
> assert len(members) == 1
> to
> assert len(members) >= 1
> reflecting the possibility of more than one result in the query, everything works fine and the cloned member works fine, retains proper ownership, etc.
>
> Clearly, this isn't a real fix. Any ideas on why this happens and a proper way to deal with it. Thanks.
i'm not exactly sure what's going on. the assertion seems valid; there should
only ever be one user auth provider for a specific login id. this has to be
the case, otherwise the system won't know which one to use when you try to login.
what i don't know is why you're getting more than one result back from the
query. maybe there's something unusual about the state of the catalog during
the paste that is causing the problem.
i'll have to try to reproduce... if you want to dig deeper, i'd recommend
putting a break point right where the failure is and examining the query
results, so you can see exactly what the extra result might be.
-r
>
> Jim Baack
>
> -------------------------------------------------------
>
>
> Traceback (innermost last):
>
> * Module ZPublisher.Publish, line 119, in publish
> * Module ZPublisher.mapply, line 88, in mapply
> * Module ZPublisher.Publish, line 42, in call_object
> * Module OFS.ObjectManager, line 609, in manage_importObject
> * Module OFS.ObjectManager, line 631, in _importObjectFromFile
> * Module OFS.ObjectManager, line 347, in _setObject
> * Module zope.event, line 23, in notify
> * Module zope.component.event, line 26, in dispatch
> * Module zope.component._api, line 130, in subscribers
> * Module zope.component.registry, line 290, in subscribers
> * Module zope.interface.adapter, line 535, in subscribers
> * Module zope.component.event, line 33, in objectEventNotify
> * Module zope.component._api, line 130, in subscribers
> * Module zope.component.registry, line 290, in subscribers
> * Module zope.interface.adapter, line 535, in subscribers
> * Module OFS.subscribers, line 119, in dispatchObjectMovedEvent
> * Module zope.app.container.contained, line 182, in dispatchToSublocations
> * Module zope.component._api, line 130, in subscribers
> * Module zope.component.registry, line 290, in subscribers
> * Module zope.interface.adapter, line 535, in subscribers
> * Module OFS.subscribers, line 119, in dispatchObjectMovedEvent
> * Module zope.app.container.contained, line 182, in dispatchToSublocations
> * Module zope.component._api, line 130, in subscribers
> * Module zope.component.registry, line 290, in subscribers
> * Module zope.interface.adapter, line 535, in subscribers
> * Module OFS.subscribers, line 119, in dispatchObjectMovedEvent
> * Module zope.app.container.contained, line 182, in dispatchToSublocations
> * Module zope.component._api, line 130, in subscribers
> * Module zope.component.registry, line 290, in subscribers
> * Module zope.interface.adapter, line 535, in subscribers
> * Module Products.remember.utils, line 103, in fixOwnership
> * Module Products.remember.content.member, line 115, in fixOwnership
> * Module Products.remember.content.member, line 131, in getUser
> * Module Products.PluggableAuthService.PluggableAuthService, line 223, in getUserById
> * Module Products.PluggableAuthService.PluggableAuthService, line 730, in _findUser
> * Module Products.membrane.plugins.propertymanager, line 89, in getPropertiesForUser
> * Module Products.membrane.tools.membrane, line 228, in getUserAuthProvider
>
> AssertionError
>
>
> --------------------------------------------------------------
>
> def getUserAuthProvider(self, login):
> """
> Return the unique object that is the authentication provider
> for the provided login.
> """
> if not login: # could be either '' or None
> return None
> uSR = self.unrestrictedSearchResults
> idxname = 'getUserName'
> if self.case_sensitive_auth and \
> ('exact_getUserName' in self._catalog.indexes):
> idxname = 'exact_getUserName'
> query = {idxname: login,
> 'object_implements': IMembraneUserAuth.__identifier__}
> members = uSR(**query)
>
> if not members:
> return None
>
> --> assert len(members) == 1
> member = members[0]._unrestrictedGetObject()
> return member
>
>
>
> --
> Archive: http://www.openplans.org/projects/remember/lists/remember/archive/2008/07/1215038176436
> To unsubscribe send an email with subject "unsubscribe" to remember@.... Please contact remember-manager@... for questions.
>