Ticket #1582: sorting.patch

File sorting.patch, 2.4 kB (added by roger.demetrescu, 10 months ago)
  • turbogears/paginate.py

    old new  
    339339    if isinstance(var_data, SelectResults): 
    340340        col = getattr(var_data.sourceClass.q, colname, None) 
    341341 
    342     elif isinstance(var_data, SASelectResults) or isinstance(var_data, Query)
     342    elif isinstance(var_data, SASelectResults)
    343343        col = getattr( 
    344344                var_data._query.mapper.c, 
    345345                colname[len(var_data._query.mapper.column_prefix or ''):], 
    346346                None) 
    347347 
     348    elif isinstance(var_data, Query): 
     349        col = getattr( 
     350                var_data.mapper.c, 
     351                colname[len(var_data.mapper.column_prefix or ''):], 
     352                None) 
     353        #if no attribute is found, let's try searching for 'foreign' objects... 
     354        # eg.: address.user.occupation.name 
     355        if not col and colname.find('.'): 
     356            seq = colname.split('.') 
     357            mapper = var_data.mapper 
     358            for propname in seq[:-1]: 
     359                prop = mapper.properties.get(propname) 
     360                if not prop: 
     361                    break 
     362                mapper = prop.mapper 
     363            # last item from split should be a simple attribute 
     364            col = getattr( 
     365                    mapper.c, 
     366                    seq[-1][len(mapper.column_prefix or ''):], 
     367                    None) 
    348368    else: 
    349369        raise StandardError, 'expected SelectResults' 
    350370 
     
    369389    return order_col 
    370390 
    371391# Ordering re: 
    372 ordering_expr = re.compile(r"('\w+'): ?\[(\d+), ?(True|False)\]") 
     392ordering_expr = re.compile(r"('\w+(\.\w+)*'): ?\[(\d+), ?(True|False)\]") 
    373393 
    374394def convert_ordering(ordering): 
    375395    """Covert ordering unicode string to dict.""" 
     
    389409            assert len(ordering_info_find) > 0, emsg 
    390410            for ordering_info in ordering_info_find: 
    391411                ordering_key = str(ordering_info[0]).strip("'") 
    392                 ordering_order = int(ordering_info[1]) 
    393                 ordering_reverse = bool(ordering_info[2] == 'True') 
     412                ordering_order = int(ordering_info[2]) 
     413                ordering_reverse = bool(ordering_info[3] == 'True') 
    394414                new_ordering[ordering_key] = [ordering_order, 
    395415                                              ordering_reverse] 
    396416        except StandardError, e: