~ubuntu-branches/ubuntu/wily/spyder/wily

« back to all changes in this revision

Viewing changes to spyderlib/widgets/dataframeeditor.py

  • Committer: Package Import Robot
  • Author(s): Benjamin Drung
  • Date: 2015-01-15 12:20:11 UTC
  • mfrom: (18.1.7 experimental)
  • Revision ID: package-import@ubuntu.com-20150115122011-cc7j5dhy2h9uo13m
Tags: 2.3.2+dfsg-1ubuntu1
Backport patch to support pylint3.

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
_bool_false = ['false', '0']
40
40
 
41
41
 
 
42
LARGE_NROWS = 1e5
 
43
 
 
44
 
42
45
def bool_false_check(value):
43
46
    """
44
47
    Used to convert bool intrance to false since any string in bool('')
57
60
 
58
61
class DataFrameModel(QAbstractTableModel):
59
62
    """ DataFrame Table Model"""
 
63
    
 
64
    ROWS_TO_LOAD = 500
 
65
    
60
66
    def __init__(self, dataFrame, format="%.3g", parent=None):
61
67
        QAbstractTableModel.__init__(self)
62
68
        self.dialog = parent
63
69
        self.df = dataFrame
 
70
        self.df_index = dataFrame.index.tolist()
64
71
        self._format = format
65
72
        self.bgcolor_enabled = True
66
73
        self.complex_intran = None
76
83
        self.colum_avg_enabled = True
77
84
        self.colum_avg(1)
78
85
 
 
86
        # To define paging when the number of rows is large
 
87
        self.total_rows = self.df.shape[0]
 
88
        if self.total_rows > LARGE_NROWS:
 
89
            self.rows_loaded = self.ROWS_TO_LOAD
 
90
        else:
 
91
            self.rows_loaded = self.total_rows
 
92
 
79
93
    def max_min_col_update(self):
80
94
        """Determines the maximum and minimum number in each column"""
81
95
        max_r = self.df.max(numeric_only=True)
175
189
            value = self.df.iloc[row, column]
176
190
        return value
177
191
 
 
192
    def update_df_index(self):
 
193
        """"Update the DataFrame index"""
 
194
        self.df_index = self.df.index.tolist()
 
195
 
178
196
    def data(self, index, role=Qt.DisplayRole):
179
197
        """Cell content"""
180
198
        if not index.isValid():
183
201
            column = index.column()
184
202
            row = index.row()
185
203
            if column == 0:
186
 
                return to_qvariant(to_text_string(self.df.index.tolist()[row]))
 
204
                return to_qvariant(to_text_string(self.df_index[row]))
187
205
            else:
188
206
                value = self.get_value(row, column-1)
189
207
                if isinstance(value, float):
211
229
            if column > 0:
212
230
                self.df.sort(columns=self.df.columns[column-1],
213
231
                             ascending=order, inplace=True)
 
232
                self.update_df_index()
214
233
            else:
215
234
                self.df.sort_index(inplace=True, ascending=order)
 
235
                self.update_df_index()
216
236
        except TypeError as e:
217
237
            QMessageBox.critical(self.dialog, "Error",
218
238
                                 "TypeError error: %s" % str(e))
269
289
 
270
290
    def rowCount(self, index=QModelIndex()):
271
291
        """DataFrame row number"""
272
 
        return self.df.shape[0]
 
292
        if self.total_rows <= self.rows_loaded:
 
293
            return self.total_rows
 
294
        else:
 
295
            return self.rows_loaded
 
296
    
 
297
    def canFetchMore(self, index=QModelIndex()):
 
298
        if self.total_rows > self.rows_loaded:
 
299
            return True
 
300
        else:
 
301
            return False
 
302
 
 
303
    def fetchMore(self, index=QModelIndex()):
 
304
        reminder = self.total_rows - self.rows_loaded
 
305
        items_to_fetch = min(reminder, self.ROWS_TO_LOAD)
 
306
        self.beginInsertRows(QModelIndex(), self.rows_loaded,
 
307
                             self.rows_loaded + items_to_fetch - 1)
 
308
        self.rows_loaded += items_to_fetch
 
309
        self.endInsertRows()
273
310
 
274
311
    def columnCount(self, index=QModelIndex()):
275
312
        """DataFrame column number"""
378
415
        Setup DataFrameEditor:
379
416
        return False if data is not supported, True otherwise
380
417
        """
381
 
        size = 1
382
 
        for dim in data.shape:
383
 
            size *= dim
384
 
        if size > 1e6:
385
 
            answer = QMessageBox.warning(self, _("%s editor")
386
 
                                                 % data.__class__.__name__,
387
 
                                         _("Opening and browsing this "
388
 
                                           "%s can be slow\n\n"
389
 
                                           "Do you want to continue anyway?")
390
 
                                           % data.__class__.__name__,
391
 
                                         QMessageBox.Yes | QMessageBox.No)
392
 
            if answer == QMessageBox.No:
393
 
                return
394
 
 
395
418
        self.layout = QGridLayout()
396
419
        self.setLayout(self.layout)
397
420
        self.setWindowIcon(get_icon('arredit.png'))