~wgrant/launchpad/bugs-stormrangefactory

« back to all changes in this revision

Viewing changes to lib/lp/services/webapp/batching.py

  • Committer: William Grant
  • Date: 2012-02-14 05:37:07 UTC
  • Revision ID: william.grant@canonical.com-20120214053707-1imq9ftc6ddonfes
Initial mostly working attempt at StormRangeFactory for bug listings.

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
    )
14
14
import lazr.batchnavigator
15
15
from lazr.batchnavigator.interfaces import IRangeFactory
 
16
from lazr.enum import DBItem
16
17
import simplejson
17
18
from storm import Undef
18
19
from storm.expr import (
146
147
    """See lp.services.webapp.interfaces.ITableBatchNavigator."""
147
148
    implements(ITableBatchNavigator)
148
149
 
149
 
    def __init__(self, results, request, start=0, size=None,
150
 
                 columns_to_show=None, callback=None):
151
 
        BatchNavigator.__init__(self, results, request, start, size, callback)
 
150
    def __init__(self, results, request,
 
151
                 columns_to_show=None, callback=None, range_factory=None):
 
152
        BatchNavigator.__init__(
 
153
            self, results, request, callback=callback,
 
154
            range_factory=range_factory)
152
155
 
153
156
        self.show_column = {}
154
157
        if columns_to_show:
164
167
    def default(self, obj):
165
168
        if isinstance(obj, datetime):
166
169
            return obj.isoformat()
 
170
        if isinstance(obj, DBItem):
 
171
            return obj.value
167
172
        return simplejson.JSONEncoder.default(self, obj)
168
173
 
169
174
 
397
402
                        # like May 35.
398
403
                        self.reportError('Invalid datetime value: %r' % value)
399
404
                        return None
 
405
                elif (str(error).startswith('Not a DBItem') and
 
406
                      isinstance(value, int)):
 
407
                    value = expression.variable_factory().parse_set(
 
408
                        value=value, from_db=True)
400
409
                else:
 
410
                    import pdb; pdb.set_trace()
 
411
                    raise Exception('foo')
401
412
                    self.reportError(
402
413
                        'Invalid parameter: %r' % value)
403
414
                    return None