Ticket #1582: sorting.patch
| File sorting.patch, 2.4 kB (added by roger.demetrescu, 10 months ago) |
|---|
-
turbogears/paginate.py
old new 339 339 if isinstance(var_data, SelectResults): 340 340 col = getattr(var_data.sourceClass.q, colname, None) 341 341 342 elif isinstance(var_data, SASelectResults) or isinstance(var_data, Query):342 elif isinstance(var_data, SASelectResults): 343 343 col = getattr( 344 344 var_data._query.mapper.c, 345 345 colname[len(var_data._query.mapper.column_prefix or ''):], 346 346 None) 347 347 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) 348 368 else: 349 369 raise StandardError, 'expected SelectResults' 350 370 … … 369 389 return order_col 370 390 371 391 # Ordering re: 372 ordering_expr = re.compile(r"('\w+ '): ?\[(\d+), ?(True|False)\]")392 ordering_expr = re.compile(r"('\w+(\.\w+)*'): ?\[(\d+), ?(True|False)\]") 373 393 374 394 def convert_ordering(ordering): 375 395 """Covert ordering unicode string to dict.""" … … 389 409 assert len(ordering_info_find) > 0, emsg 390 410 for ordering_info in ordering_info_find: 391 411 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') 394 414 new_ordering[ordering_key] = [ordering_order, 395 415 ordering_reverse] 396 416 except StandardError, e: