Ticket #349: catwalk-multiple-joins-pages.2.diff
| File catwalk-multiple-joins-pages.2.diff, 4.4 kB (added by bbockelm@math.unl.edu, 3 years ago) |
|---|
-
turbogears/toolbox/catwalk/__init__.py
old new 384 384 values.append(list(tmp)) 385 385 return labels,values 386 386 387 def object_joins(self,objectName,id,join,joinType,joinObjectName=''): 387 def get_selected_joins(self, objectName, id, join, joinType, joinObjectName, start, page_size): 388 start = int(start) 389 page_size = int(page_size) 390 columnObject = getattr( self.model, joinObjectName ) 391 try: 392 for clm in columnObject.sqlmeta.columnList: 393 if type(clm) == sqlobject.SOForeignKey: 394 if objectName == clm.foreignKey: 395 fk = clm 396 fkName = fk.name 397 fkQuery = getattr( columnObject.q, str( fkName ) ) 398 selectResults = columnObject.select( fkQuery == id) 399 count = selectResults.count() 400 end = min(start+page_size,count) 401 return count, selectResults[start:end] 402 except Exception, e: 403 obj = getattr( self.model, objectName ) 404 rowObj = obj.get(id) 405 count = len( getattr( rowObj, join) ) 406 end = min( start + page_size, count ) 407 return count, getattr( rowObj, join )[start:end] 408 409 def object_joins(self,objectName,id,join,joinType,joinObjectName='', start=-1,page_size=10): 388 410 """Collect the joined instances into a dictionary 389 411 390 412 @param objectName: name of the object … … 401 423 hostObject = objectName 402 424 obj = self.load_object(objectName) 403 425 try: 404 rows = getattr(obj.get(id),join) 405 except: 426 if start >= 0: 427 count, rows = self.get_selected_joins( objectName, id, join, joinType, joinObjectName, start, page_size ) 428 else: 429 rows = getattr(obj.get(id),join) 430 count = len( rows ) 431 except Exception, e: 432 print e 406 433 msg='Error, joins objectName: %s, id: %s, join: %s'% (objectName,id,join) 407 434 raise cherrypy.HTTPRedirect(turbogears.url('error', msg=msg)) 408 435 436 print count, start 437 409 438 view = '%s_%s'% (hostObject,joinObjectName) 410 439 hidden_columns = self.load_columns_visibility_state(view) 411 440 … … 417 446 joinType=joinType, 418 447 joinObjectName=joinObjectName, 419 448 hostObject=hostObject, 449 total = count, 450 page_size = page_size, 451 start = start, 452 joinName = join, 420 453 hidden_columns=hidden_columns) 421 454 if not rows: 422 455 return joinsDict … … 866 899 return self.object_instances(objectName) 867 900 updateColumns = turbogears.expose(format="json")(updateColumns) 868 901 869 def updateColumnsJoinView(self,objectName,id,join,joinType,joinObjectName,column ):902 def updateColumnsJoinView(self,objectName,id,join,joinType,joinObjectName,column,start=0,page_size=10): 870 903 """Toggle (and store) the state of the requested column 871 904 in grid view display for a join view. 872 905 … … 885 918 """ 886 919 self.check_access() 887 920 self.save_columns_visibility_state('%s_%s'% (objectName,joinObjectName),column) 888 return self.object_joins(objectName,id,join,joinType,joinObjectName) 921 print start 922 return self.object_joins(objectName,id,join,joinType,joinObjectName, start = start) 889 923 updateColumnsJoinView = turbogears.expose(format="json")(updateColumnsJoinView) 890 924 891 def joins(self,objectName,id,join,joinType,joinObjectName ):925 def joins(self,objectName,id,join,joinType,joinObjectName,start): 892 926 """Return a JSON structure containing a list joins for 893 927 the requested object's joinMethodName 894 928 … … 904 938 @type joinObjectName: string 905 939 """ 906 940 self.check_access() 907 return self.object_joins(objectName,id,join,joinType,joinObjectName) 941 start = int(start) 942 myDict = self.object_joins(objectName,id,join,joinType,joinObjectName, start = start) 943 myDict['objectName'] = objectName 944 myDict['id'] = id 945 myDict['joinName'] = join 946 myDict['joinType'] = joinType 947 myDict['joinObjectName'] = joinObjectName 948 myDict['start'] = start 949 myDict['page_size'] = 10 950 return myDict 908 951 joins = turbogears.expose(format="json")(joins) 909 952 910 953 def instance(self,objectName,id):