Changeset 1186 for trunk/camelot/view/proxy/queryproxy.py
- Timestamp:
- 03/13/10 12:31:24 (6 months ago)
- Files:
-
- 1 modified
-
trunk/camelot/view/proxy/queryproxy.py (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/camelot/view/proxy/queryproxy.py
r1170 r1186 33 33 logger = logging.getLogger('camelot.view.proxy.queryproxy') 34 34 35 from collection_proxy import CollectionProxy, stripped_data_to_unicode, \ 36 strip_data_from_object, tool_tips_from_object, \ 37 background_colors_from_object 38 from camelot.view.model_thread import model_function, gui_function 35 from collection_proxy import CollectionProxy, strip_data_from_object 36 from camelot.view.model_thread import model_function, gui_function, post 39 37 40 38 … … 50 48 logger.debug('initialize query table') 51 49 self._query_getter = query_getter 50 self._sort_decorator = None 52 51 #rows appended to the table which have not yet been flushed to the 53 52 #database, and as such cannot be a result of the query … … 56 55 columns_getter, max_number_of_rows=10, edits=None) 57 56 57 def get_query_getter(self): 58 if not self._sort_decorator: 59 return self._query_getter 60 else: 61 62 def sorted_query_getter(): 63 return self._sort_decorator(self._query_getter()) 64 65 return sorted_query_getter 66 58 67 @model_function 59 68 def _clean_appended_rows(self): … … 69 78 def getRowCount(self): 70 79 self._clean_appended_rows() 71 return self. _query_getter().count() + len(self._appended_rows)80 return self.get_query_getter()().count() + len(self._appended_rows) 72 81 73 82 @gui_function … … 80 89 81 90 def collection_getter(): 82 return self. _query_getter().all()91 return self.get_query_getter()().all() 83 92 84 93 return collection_getter … … 86 95 @gui_function 87 96 def sort( self, column, order ): 88 pass 97 98 def create_set_sort_decorator(column, order): 99 100 def set_sort_decorator(): 101 from sqlalchemy import orm 102 from sqlalchemy.exceptions import InvalidRequestError 103 field_name = self._columns[column][0] 104 class_attribute = getattr(self.admin.entity, field_name) 105 mapper = orm.class_mapper(self.admin.entity) 106 try: 107 property = mapper.get_property( 108 field_name, 109 resolve_synonyms=True 110 ) 111 except InvalidRequestError: 112 # 113 # If the field name is not a property of the mapper, we cannot 114 # sort it using sql 115 # 116 return self.rows 117 118 def create_sort_decorator(class_attribute, order): 119 120 def sort_decorator(query): 121 if order: 122 return query.order_by(class_attribute.desc()) 123 else: 124 return query.order_by(class_attribute) 125 126 return sort_decorator 127 128 129 self._sort_decorator = create_sort_decorator(class_attribute, order) 130 return self.rows 131 132 return set_sort_decorator 133 134 post( create_set_sort_decorator(column, order), self._refresh_content ) 89 135 90 136 def append(self, o): … … 103 149 def getData(self): 104 150 """Generator for all the data queried by this proxy""" 105 for _i,o in enumerate(self. _query_getter().all()):151 for _i,o in enumerate(self.get_query_getter()().all()): 106 152 yield strip_data_from_object(o, self.getColumns()) 107 153 … … 109 155 def _extend_cache(self, offset, limit): 110 156 """Extend the cache around row""" 111 q = self. _query_getter().offset(offset).limit(limit)157 q = self.get_query_getter()().offset(offset).limit(limit) 112 158 columns = self.getColumns() 113 159 for i, o in enumerate(q.all()): … … 136 182 pass 137 183 # momentary hack for list error that prevents forms to be closed 138 res = self. _query_getter().offset(row)184 res = self.get_query_getter()().offset(row) 139 185 if isinstance(res, list): 140 186 res = res[0]
