Ticket #349: catwalk-multiple-joins-pages.diff
| File catwalk-multiple-joins-pages.diff, 3.5 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 count = len(getattr(columnObject.get(id),join)) 404 end = min(start+page_size,count) 405 return count, getattr(columnObject.get(id),join)[start:end] 406 407 def object_joins(self,objectName,id,join,joinType,joinObjectName='', start=-1,page_size=10): 388 408 """Collect the joined instances into a dictionary 389 409 390 410 @param objectName: name of the object … … 401 421 hostObject = objectName 402 422 obj = self.load_object(objectName) 403 423 try: 404 rows = getattr(obj.get(id),join) 405 except: 424 if start >= 0: 425 count, rows = self.get_selected_joins( objectName, id, join, joinType, joinObjectName, start, page_size ) 426 else: 427 count, rows = getattr(obj.get(id),join) 428 except Exception, e: 429 print e 406 430 msg='Error, joins objectName: %s, id: %s, join: %s'% (objectName,id,join) 407 431 raise cherrypy.HTTPRedirect(turbogears.url('error', msg=msg)) 408 432 433 409 434 view = '%s_%s'% (hostObject,joinObjectName) 410 435 hidden_columns = self.load_columns_visibility_state(view) 411 436 … … 417 442 joinType=joinType, 418 443 joinObjectName=joinObjectName, 419 444 hostObject=hostObject, 445 total = count, 420 446 hidden_columns=hidden_columns) 421 447 if not rows: 422 448 return joinsDict … … 888 914 return self.object_joins(objectName,id,join,joinType,joinObjectName) 889 915 updateColumnsJoinView = turbogears.expose(format="json")(updateColumnsJoinView) 890 916 891 def joins(self,objectName,id,join,joinType,joinObjectName ):917 def joins(self,objectName,id,join,joinType,joinObjectName,start): 892 918 """Return a JSON structure containing a list joins for 893 919 the requested object's joinMethodName 894 920 … … 904 930 @type joinObjectName: string 905 931 """ 906 932 self.check_access() 907 return self.object_joins(objectName,id,join,joinType,joinObjectName) 933 start = int(start) 934 myDict = self.object_joins(objectName,id,join,joinType,joinObjectName, start = start) 935 myDict['objectName'] = objectName 936 myDict['id'] = id 937 myDict['joinName'] = join 938 myDict['joinType'] = joinType 939 myDict['joinObjectName'] = joinObjectName 940 myDict['start'] = start 941 myDict['page_size'] = 10 942 return myDict 908 943 joins = turbogears.expose(format="json")(joins) 909 944 910 945 def instance(self,objectName,id):