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 |     @Lazy | ||||||
|     def params(self): |     def params(self): | ||||||
|         params = dict(self.request.form) |         params = dict(self.request.form) | ||||||
|         params.pop('report_execute', None) |         params = self.parseParams(params) | ||||||
|         return 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 |     @Lazy | ||||||
|     def report(self): |     def report(self): | ||||||
|         return adapted(self.virtualTargetObject) |         return adapted(self.virtualTargetObject) | ||||||
|  |  | ||||||
|  | @ -94,15 +94,20 @@ class ReportInstance(BaseReport): | ||||||
|         crit = self.queryCriteria |         crit = self.queryCriteria | ||||||
|         if crit is None: |         if crit is None: | ||||||
|             return [] |             return [] | ||||||
|  |         limits = self.limits | ||||||
|         if dynaParams is not None: |         if dynaParams is not None: | ||||||
|             for k, v in dynaParams.items(): |             for k, v in dynaParams.items(): | ||||||
|  |                 if k == 'limits': | ||||||
|  |                     limits = v | ||||||
|  |                     break | ||||||
|                 if k in crit.parts.keys(): |                 if k in crit.parts.keys(): | ||||||
|                     crit.parts[k].comparisonValue = v |                     crit.parts[k].comparisonValue = v | ||||||
|         parts = Jeep(crit.parts) |         parts = Jeep(crit.parts) | ||||||
|         result = list(self.selectObjects(parts))  # may modify parts |         result = list(self.selectObjects(parts))  # may modify parts | ||||||
|         qc = CompoundQueryCriteria(parts) |         qc = CompoundQueryCriteria(parts) | ||||||
|         return ResultSet(self, result, rowFactory=self.rowFactory, |         return ResultSet(self, result, rowFactory=self.rowFactory, | ||||||
|                          sortCriteria=self.getSortCriteria(), queryCriteria=qc) |                          sortCriteria=self.getSortCriteria(), queryCriteria=qc, | ||||||
|  |                          limits=limits) | ||||||
| 
 | 
 | ||||||
|     def selectObjects(self, parts): |     def selectObjects(self, parts): | ||||||
|         # to be implemented by subclass |         # to be implemented by subclass | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue