From 49d2401bb45801e35bfb9d6b594e94ef79f753c0 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Mon, 18 Jun 2012 09:30:21 +0200 Subject: [PATCH] processing of 'limits' parameter, esp. when provided as form parameter --- expert/browser/report.py | 25 ++++++++++++++++++++++++- expert/report.py | 7 ++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/expert/browser/report.py b/expert/browser/report.py index fbbb7c2..ccfc26a 100644 --- a/expert/browser/report.py +++ b/expert/browser/report.py @@ -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) diff --git a/expert/report.py b/expert/report.py index 516b21a..2255ce9 100644 --- a/expert/report.py +++ b/expert/report.py @@ -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