processing of 'limits' parameter, esp. when provided as form parameter
This commit is contained in:
		
							parent
							
								
									2e8618b375
								
							
						
					
					
						commit
						49d2401bb4
					
				
					 2 changed files with 30 additions and 2 deletions
				
			
		|  | @ -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) | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue