Changeset 3510

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

fixed #1508 + initial paginate tests

Files:

Legend:

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

    r3446 r3510  
    1414    * sa_rwt (SQLAlchemy run with transaction) refactored to fix some corner  
    1515      cases. 
     16    * Ticket #1508: fixed internal pagination ordering, avoiding a potential  
     17      error when paginating Query objects (sqlalchemy) and ordering by 4 or more 
     18      columns. 
    1619 
    1720*Contributors* 
    1821 
    19 Paul Johnston 
     22Paul Johnston, Roger Demetrescu 
    2023 
    2124 
  • branches/1.0/turbogears/paginate.py

    r3492 r3510  
    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