[Zope3-Users] zc.table - how does sorting work?

Gary Poster gary at zope.com
Tue Mar 14 13:29:08 EST 2006


On Mar 14, 2006, at 11:54 AM, Laurence Rowe wrote:

> Hi there,
>
> I'm trying to use zc.table to format the output of one of my forms.  
> it seems to work ok for the unsorted formatter, but not for the  
> StandalonSortFormatter. Here is the code that works with plain  
> formatter:
>
>> columns = (
>>     GetterColumn(name=u'dn', title=u'Distinguished Name',  
>> getter=lambda i, f: i.dn, subsort=True),
>>     GetterColumn(name=u'displayName', title=u'Name', getter=lambda  
>> i, f: i.displayName, subsort=True),
>>     GetterColumn(name=u'mail', title=u'Email Address',  
>> getter=lambda i, f: i.mail, subsort=True),
>>     )
>> class LDAPFilterForm(form.Form):
>>     form_fields = form.Fields(interfaces.ILDAPFilter)
>>     @form.action("Search")
>>     def handle_search_action(self, action, data):
>>         search = interfaces.ILDAPSearch(self.context, None)
>>         results = search.search(data['filter'])
>>         self.table = table.Formatter(self.context, self.request,  
>> list(results), columns=columns)
>>         return self.table()
>
> but when I change the Formatter to StandaloneSortFormatter, I still  
> get the same html output. I have tried adding in this from the  
> zc.table readme:
>
>> for c in columns:
>>     directlyProvides(c, zc.table.interfaces.ISortableColumn)

Yes, you want this.

>> @adapter(IRequest)
>> @implementer(Interface)
>> def dummyResource(request):
>>     return lambda:'/@@/zc.table'
>> provideAdapter(dummyResource, name='zc.table')

No, you don't want this.

> But then I get the following traceback:
>
>> 2006-03-14T16:34:32 ERROR SiteError http://localhost:8080/@@/zc.table
>> Traceback (most recent call last):
>>   File "/usr/lib/python2.4/site-packages/zope/publisher/ 
>> publish.py", line 135, in publish
>>     object = request.traverse(object)
>>   File "/usr/lib/python2.4/site-packages/zope/publisher/ 
>> browser.py", line 500, in traverse
>>     ob = super(BrowserRequest, self).traverse(object)
>>   File "/usr/lib/python2.4/site-packages/zope/publisher/http.py",  
>> line 451, in traverse
>>     ob = super(HTTPRequest, self).traverse(object)
>>   File "/usr/lib/python2.4/site-packages/zope/publisher/base.py",  
>> line 289, in traverse
>>     subobject = publication.traverseName(
>>   File "/usr/lib/python2.4/site-packages/zope/app/publication/ 
>> publicationtraverse.py", line 56, in traverseName
>>     ob2 = ob.publishTraverse(request, nm)
>>   File "/usr/lib/python2.4/site-packages/zope/app/publisher/ 
>> browser/resources.py", line 40, in publishTraverse
>>     locate(resource, sm, name)
>>   File "/usr/lib/python2.4/site-packages/zope/app/location/ 
>> location.py", line 72, in locate
>>     object.__name__ = name
>> TypeError: func_name must be set to a string object
>> exceptions.TypeError:
>> func_name must be set to a string object
>>> /usr/lib/python2.4/site-packages/zope/app/location/location.py(72) 
>>> locate()
>> -> object.__name__ = name
>
> Using the debugger I can see:
>
>> (Pdb) name
>> u'zc.table
>
> Any ideas? I'm stumped.

Not sure, but I'm guessing it is the dummy adapter.  Try again  
without it.

Also, as I wrote yesterday, we have an alternate sorting  
implementation that we ought to get in zc.table.  I sent it to  
Martijn Faassen; if you think you might look at it and maybe merge  
it, I could send it to you too. :-)

Gary


More information about the Zope3-users mailing list