Changeset 3511

Show
Ignore:
Timestamp:
10/11/07 05:36:01 (1 year ago)
Author:
roger
Message:

fixed #1508 + initial paginate tests

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/1.1/CHANGELOG.txt

    r3447 r3511  
    1515    * sa_rwt (SQLAlchemy run with transaction) refactored to fix some corner  
    1616      cases. 
     17    * Ticket #1508: fixed internal pagination ordering, avoiding a potential  
     18      error when paginating Query objects (sqlalchemy) and ordering by 4 or more 
     19      columns. 
    1720 
    1821*Contributors* 
    1922 
    20 Paul Johnston 
     23Paul Johnston, Roger Demetrescu 
    2124 
    2225 
  • branches/1.1/turbogears/paginate.py

    r3490 r3511  
    323323    """Rearrange ordering based on sort_name.""" 
    324324    log.debug('sort called with %s and %s' % (ordering, sort_name)) 
    325     if sort_name not in ordering: 
    326         ordering[sort_name] = [-1, True] 
    327     if ordering[sort_name][0] == 0: 
     325    if ordering.setdefault(sort_name, [-1, True])[0] == 0: 
    328326        # Flip 
    329327        ordering[sort_name][1] = not ordering[sort_name][1] 
    330328    else: 
    331         ordering[sort_name][0] = 0 
    332         for key in ordering.keys(): 
    333             if key != sort_name and ordering[key][0] < len(ordering) - 1: 
    334                 ordering[key][0] += 1 
     329        ordering[sort_name][0] = -1 
     330     
     331    # re-sort dictionary 
     332    items = ordering.items() 
     333    items.sort(lambda x,y: cmp(x[1],y[1])) 
     334    for i,v in enumerate(items): 
     335        ordering[v[0]][0] = i 
     336 
    335337    log.debug('sort results is %s and %s' % (ordering, sort_name)) 
    336338