@@ -42,16 +42,28 @@ def _symbol_name(column_name, is_asc):
4242 return column_name + ('_asc' if is_asc else '_desc' )
4343
4444
45+ class EnumValue (str ):
46+ '''Subclass of str that stores a string value and the sort order of the column'''
47+ def __new__ (cls , str_value , order ):
48+ return super (EnumValue , cls ).__new__ (cls , str_value )
49+
50+ def __init__ (self , str_value , order ):
51+ super (EnumValue , self ).__init__ ()
52+ self .order = order
53+
54+
4555def _sort_enum_for_model (cls , name = None , symbol_name = _symbol_name ):
4656 name = name or cls .__name__ + 'SortEnum'
4757 items = []
4858 default = []
4959 for column in inspect (cls ).columns .values ():
50- asc = symbol_name (column .name , True ), [column .name , 'asc' ]
51- desc = symbol_name (column .name , False ), [column .name , 'desc' ]
60+ asc_name = symbol_name (column .name , True )
61+ asc_value = EnumValue (asc_name , column .asc ())
62+ desc_name = symbol_name (column .name , False )
63+ desc_value = EnumValue (desc_name , column .desc ())
5264 if column .primary_key :
53- default .append (asc [ 1 ] )
54- items .extend ((asc , desc ))
65+ default .append (asc_value )
66+ items .extend ((( asc_name , asc_value ), ( desc_name , desc_value ) ))
5567 return Enum (name , items ), default
5668
5769
0 commit comments