processing of 'limits' parameter, esp. when provided as form parameter

This commit is contained in:
Helmut Merz 2012-06-18 09:30:21 +02:00
parent 2e8618b375
commit 49d2401bb4
2 changed files with 30 additions and 2 deletions

View file

@ -75,9 +75,32 @@ class ResultsView(NodeView):
@Lazy
def params(self):
params = dict(self.request.form)
params.pop('report_execute', None)
params = self.parseParams(params)
return params
def parseParams(self, params):
params.pop('report_execute', None)
if 'limits' in params:
params['limits'] = self.parseLimitsParam(params['limits'])
return params
def parseLimitsParam(self, value):
if not value:
return None
if isinstance(value, basestring):
limits = value.split(',')
else:
limits = value
if len(limits) < 2:
limits.append(None)
result = []
for p in limits[:2]:
if not p:
result.append(None)
else:
result.append(int(p))
return result
@Lazy
def report(self):
return adapted(self.virtualTargetObject)

View file

@ -94,15 +94,20 @@ class ReportInstance(BaseReport):
crit = self.queryCriteria
if crit is None:
return []
limits = self.limits
if dynaParams is not None:
for k, v in dynaParams.items():
if k == 'limits':
limits = v
break
if k in crit.parts.keys():
crit.parts[k].comparisonValue = v
parts = Jeep(crit.parts)
result = list(self.selectObjects(parts)) # may modify parts
qc = CompoundQueryCriteria(parts)
return ResultSet(self, result, rowFactory=self.rowFactory,
sortCriteria=self.getSortCriteria(), queryCriteria=qc)
sortCriteria=self.getSortCriteria(), queryCriteria=qc,
limits=limits)
def selectObjects(self, parts):
# to be implemented by subclass