[Grok-dev] hurry.query, batching the results

Sebastian Ware sebastian at urbantalk.se
Tue Jul 3 10:00:39 EDT 2007


For what it's worth, I eventually added the following code to  
hurry.query.query. Maybe someone can do it a lot better :)

     def searchResultsBatched(self, query, start_at=1, batch_size=None):
         start_at -= 1
         results = query.apply()
         if results is not None:
             total = len(results)
             if batch_size is None:
                 if start_at > 0: prev_batch = start_at
                 else: prev_batch = 0
                 next_batch = 0
                 end_at = total - 1
             else:
                 if start_at < batch_size: prev_batch = start_at
                 else: prev_batch = batch_size
                 if total - start_at < batch_size: next_batch = total  
- start_at
                 else: next_batch = batch_size
                 end_at = start_at + next_batch - 1
             outp = {'start_at': start_at + 1, 'end_at': end_at + 1,
                     'batch_size': batch_size, 'total': total,
                     'prev_batch': prev_batch, 'next_batch': next_batch}
             uidutil = zapi.getUtility(IIntIds)
             results = ResultSet(results, uidutil)
             res = []
             i = 0
             for item in results:
                 if i >= start_at and i <= end_at:
                     res.append(item)
                 elif i > end_at: break
                 i += 1
             outp['result'] = res
             return outp




Mvh Sebastian


3 jul 2007 kl. 14.28 skrev Sebastian Ware:

> It seems as though "result" is of type BTrees._IFBTree.IFSet, maybe  
> this doesn't support slicing etc. I did a work around but I am  
> worried that it instantiates a lot of objects. I'll be happy to  
> post it when I feel that it works.
>
> Mvh Sebastian
>
> 3 jul 2007 kl. 13.17 skrev Sebastian Ware:
>
>> Hi
>>
>> I am trying to batch the results of hurry.query but I get an error...
>>
>>   TypeError: sequence index must be integer
>>
>> ...I am modifying the serachResult() method in effect doing this:
>>
>>     def searchResults(self, query):
>>         results = query.apply()
>>         if results is not None:
>>             uidutil = zapi.getUtility(IIntIds)
>>             results = ResultSet(results[0:1], uidutil)
>>         return results
>>
>> ...but it chokes on the results[0:1] slicing. From what I  
>> understand of the rest of the code, it is only a list of integers,  
>> so I don't understand why I can't slice it.
>>
>> Any help would be much appreciated!
>>
>> Mvh Sebastian
>>
>>
>> _______________________________________________
>> Grok-dev mailing list
>> Grok-dev at zope.org
>> http://mail.zope.org/mailman/listinfo/grok-dev
>



More information about the Grok-dev mailing list