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)

Updated patch

  • turbogears/toolbox/catwalk/__init__.py

    old new  
    384384            values.append(list(tmp)) 
    385385        return labels,values 
    386386 
    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): 
    388410        """Collect the joined instances into a dictionary 
    389411 
    390412           @param objectName: name of the object  
     
    401423        hostObject = objectName 
    402424        obj = self.load_object(objectName) 
    403425        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 
    406433            msg='Error, joins objectName: %s, id: %s, join: %s'% (objectName,id,join) 
    407434            raise cherrypy.HTTPRedirect(turbogears.url('error', msg=msg)) 
    408          
     435  
     436        print count, start        
     437 
    409438        view = '%s_%s'% (hostObject,joinObjectName) 
    410439        hidden_columns = self.load_columns_visibility_state(view) 
    411440 
     
    417446                         joinType=joinType, 
    418447                         joinObjectName=joinObjectName, 
    419448                         hostObject=hostObject, 
     449                         total = count, 
     450                         page_size = page_size, 
     451                         start = start, 
     452                         joinName = join, 
    420453                         hidden_columns=hidden_columns) 
    421454        if not rows: 
    422455            return joinsDict 
     
    866899        return self.object_instances(objectName) 
    867900    updateColumns = turbogears.expose(format="json")(updateColumns) 
    868901 
    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): 
    870903        """Toggle (and store) the state of the requested column  
    871904           in grid view display for a join view.  
    872905            
     
    885918        """ 
    886919        self.check_access() 
    887920        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) 
    889923    updateColumnsJoinView = turbogears.expose(format="json")(updateColumnsJoinView) 
    890924 
    891     def joins(self,objectName,id,join,joinType,joinObjectName): 
     925    def joins(self,objectName,id,join,joinType,joinObjectName,start): 
    892926        """Return a JSON structure containing a list joins for  
    893927           the requested object's joinMethodName 
    894928 
     
    904938           @type joinObjectName: string 
    905939        """ 
    906940        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 
    908951    joins = turbogears.expose(format="json")(joins) 
    909952 
    910953    def instance(self,objectName,id):