• Remember Mailing List

  • membrane assertion error in getUserAuthProvider

    from Jim Baack on Jul 02, 2008 06:36 PM
    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.
    
    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
    
    
    Thread Outline:
  • 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.
    >