11
11
12
12
import qgis # NOQA switch sip api
13
13
from qgis .PyQt import sip
14
- from qgis .PyQt .QtCore import QDate , QDateTime
14
+ from qgis .PyQt .QtCore import (
15
+ QDate ,
16
+ QDateTime ,
17
+ QTime ,
18
+ QModelIndex
19
+ )
15
20
from qgis .PyQt .QtTest import QSignalSpy
16
21
17
22
from qgis .core import Qgis
21
26
QgsHistoryProviderRegistry ,
22
27
QgsGui ,
23
28
QgsHistoryEntryNode ,
24
- QgsHistoryEntryGroup
29
+ QgsHistoryEntryGroup ,
30
+ QgsHistoryEntryModel
25
31
)
26
32
from qgis .testing import start_app , unittest
27
33
28
34
start_app ()
29
35
30
36
37
+ class TestEntryNode (QgsHistoryEntryGroup ):
38
+
39
+ def __init__ (self , entry ):
40
+ super ().__init__ ()
41
+ self .entry = entry
42
+
43
+ def data (self , role ):
44
+ return self .entry
45
+
46
+
31
47
class TestHistoryProvider (QgsAbstractHistoryProvider ):
32
48
33
49
def id (self ) -> str :
34
50
return 'test_provider'
35
51
52
+ def createNodeForEntry (self , entry ):
53
+ return TestEntryNode (entry )
54
+
55
+ def updateNodeForEntry (self , node , entry ):
56
+ node .entry = entry
57
+
58
+ new_child_node = TestEntryNode ('my child' )
59
+ node .addChild (new_child_node )
60
+ new_child_node = TestEntryNode ('my child 2' )
61
+ node .addChild (new_child_node )
62
+
36
63
37
64
class TestHistoryProvider2 (QgsAbstractHistoryProvider ):
38
65
@@ -66,20 +93,23 @@ def test_entry(self):
66
93
entry = QgsHistoryEntry ()
67
94
self .assertFalse (entry .isValid ())
68
95
69
- entry = QgsHistoryEntry ('my provider' , QDateTime (2021 , 1 , 2 , 3 , 4 , 5 ), {'somevar' : 5 })
96
+ entry = QgsHistoryEntry ('my provider' , QDateTime (2021 , 1 , 2 , 3 , 4 , 5 ),
97
+ {'somevar' : 5 })
70
98
self .assertTrue (entry .isValid ())
71
99
72
100
self .assertEqual (entry .providerId , 'my provider' )
73
101
self .assertEqual (entry .timestamp , QDateTime (2021 , 1 , 2 , 3 , 4 , 5 ))
74
102
self .assertEqual (entry .entry , {'somevar' : 5 })
75
103
76
- self .assertEqual (str (entry ), '<QgsHistoryEntry: my provider 2021-01-02T03:04:05>' )
104
+ self .assertEqual (str (entry ),
105
+ '<QgsHistoryEntry: my provider 2021-01-02T03:04:05>' )
77
106
78
107
entry = QgsHistoryEntry ({'somevar' : 7 })
79
108
self .assertTrue (entry .isValid ())
80
109
81
110
self .assertFalse (entry .providerId )
82
- self .assertEqual (entry .timestamp .date (), QDateTime .currentDateTime ().date ())
111
+ self .assertEqual (entry .timestamp .date (),
112
+ QDateTime .currentDateTime ().date ())
83
113
self .assertEqual (entry .entry , {'somevar' : 7 })
84
114
85
115
def test_registry_providers (self ):
@@ -98,7 +128,8 @@ def test_registry_providers(self):
98
128
self .assertFalse (reg .addProvider (provider1 ))
99
129
100
130
self .assertTrue (reg .addProvider (provider2 ))
101
- self .assertCountEqual (reg .providerIds (), ['test_provider' , 'test_provider2' ])
131
+ self .assertCountEqual (reg .providerIds (),
132
+ ['test_provider' , 'test_provider2' ])
102
133
103
134
self .assertFalse (reg .removeProvider ('x' ))
104
135
self .assertTrue (reg .removeProvider ('test_provider' ))
@@ -117,15 +148,19 @@ def test_registry_entries(self):
117
148
added_spy = QSignalSpy (reg .entryAdded )
118
149
updated_spy = QSignalSpy (reg .entryUpdated )
119
150
120
- id_1 , ok = reg .addEntry ('my provider' , {'some var' : 5 , 'other_var' : [1 , 2 , 3 ], 'final_var' : {'a' : 'b' }},
151
+ id_1 , ok = reg .addEntry ('my provider' ,
152
+ {'some var' : 5 , 'other_var' : [1 , 2 , 3 ],
153
+ 'final_var' : {'a' : 'b' }},
121
154
QgsHistoryProviderRegistry .HistoryEntryOptions ())
122
155
self .assertTrue (ok )
123
156
124
157
self .assertEqual (len (added_spy ), 1 )
125
158
self .assertEqual (added_spy [- 1 ][0 ], id_1 )
126
159
self .assertEqual (added_spy [- 1 ][1 ].providerId , 'my provider' )
127
160
self .assertEqual (added_spy [- 1 ][1 ].id , id_1 )
128
- self .assertEqual (added_spy [- 1 ][1 ].entry , {'some var' : 5 , 'other_var' : [1 , 2 , 3 ], 'final_var' : {'a' : 'b' }})
161
+ self .assertEqual (added_spy [- 1 ][1 ].entry ,
162
+ {'some var' : 5 , 'other_var' : [1 , 2 , 3 ],
163
+ 'final_var' : {'a' : 'b' }})
129
164
130
165
id_2 , ok = reg .addEntry ('my provider 2' , {'some var' : 6 },
131
166
QgsHistoryProviderRegistry .HistoryEntryOptions ())
@@ -139,12 +174,16 @@ def test_registry_entries(self):
139
174
self .assertEqual (len (reg .queryEntries ()), 2 )
140
175
self .assertEqual (reg .queryEntries ()[0 ].providerId , 'my provider' )
141
176
self .assertEqual (reg .queryEntries ()[0 ].id , id_1 )
142
- self .assertEqual (reg .queryEntries ()[0 ].timestamp .date (), QDateTime .currentDateTime ().date ())
143
- self .assertEqual (reg .queryEntries ()[0 ].entry , {'some var' : 5 , 'other_var' : [1 , 2 , 3 ], 'final_var' : {'a' : 'b' }})
177
+ self .assertEqual (reg .queryEntries ()[0 ].timestamp .date (),
178
+ QDateTime .currentDateTime ().date ())
179
+ self .assertEqual (reg .queryEntries ()[0 ].entry ,
180
+ {'some var' : 5 , 'other_var' : [1 , 2 , 3 ],
181
+ 'final_var' : {'a' : 'b' }})
144
182
145
183
self .assertEqual (reg .queryEntries ()[1 ].providerId , 'my provider 2' )
146
184
self .assertEqual (reg .queryEntries ()[1 ].id , id_2 )
147
- self .assertEqual (reg .queryEntries ()[1 ].timestamp .date (), QDateTime .currentDateTime ().date ())
185
+ self .assertEqual (reg .queryEntries ()[1 ].timestamp .date (),
186
+ QDateTime .currentDateTime ().date ())
148
187
self .assertEqual (reg .queryEntries ()[1 ].entry , {'some var' : 6 })
149
188
150
189
entry , ok = reg .entry (1111 )
@@ -153,16 +192,20 @@ def test_registry_entries(self):
153
192
self .assertTrue (ok )
154
193
self .assertEqual (entry .providerId , 'my provider' )
155
194
self .assertEqual (entry .id , id_1 )
156
- self .assertEqual (entry .timestamp .date (), QDateTime .currentDateTime ().date ())
157
- self .assertEqual (entry .entry , {'some var' : 5 , 'other_var' : [1 , 2 , 3 ], 'final_var' : {'a' : 'b' }})
195
+ self .assertEqual (entry .timestamp .date (),
196
+ QDateTime .currentDateTime ().date ())
197
+ self .assertEqual (entry .entry , {'some var' : 5 , 'other_var' : [1 , 2 , 3 ],
198
+ 'final_var' : {'a' : 'b' }})
158
199
entry , ok = reg .entry (id_2 )
159
200
self .assertTrue (ok )
160
201
self .assertEqual (entry .providerId , 'my provider 2' )
161
202
self .assertEqual (entry .id , id_2 )
162
- self .assertEqual (entry .timestamp .date (), QDateTime .currentDateTime ().date ())
203
+ self .assertEqual (entry .timestamp .date (),
204
+ QDateTime .currentDateTime ().date ())
163
205
self .assertEqual (entry .entry , {'some var' : 6 })
164
206
165
- entry = QgsHistoryEntry ('my provider 3' , QDateTime (2021 , 1 , 2 , 3 , 4 , 5 ), {'var' : 7 })
207
+ entry = QgsHistoryEntry ('my provider 3' ,
208
+ QDateTime (2021 , 1 , 2 , 3 , 4 , 5 ), {'var' : 7 })
166
209
id_3 , ok = reg .addEntry (entry )
167
210
self .assertTrue (ok )
168
211
self .assertEqual (len (added_spy ), 3 )
@@ -174,41 +217,52 @@ def test_registry_entries(self):
174
217
self .assertEqual (len (reg .queryEntries ()), 3 )
175
218
self .assertEqual (reg .queryEntries ()[0 ].providerId , 'my provider' )
176
219
self .assertEqual (reg .queryEntries ()[0 ].id , id_1 )
177
- self .assertEqual (reg .queryEntries ()[0 ].timestamp .date (), QDateTime .currentDateTime ().date ())
178
- self .assertEqual (reg .queryEntries ()[0 ].entry , {'some var' : 5 , 'other_var' : [1 , 2 , 3 ], 'final_var' : {'a' : 'b' }})
220
+ self .assertEqual (reg .queryEntries ()[0 ].timestamp .date (),
221
+ QDateTime .currentDateTime ().date ())
222
+ self .assertEqual (reg .queryEntries ()[0 ].entry ,
223
+ {'some var' : 5 , 'other_var' : [1 , 2 , 3 ],
224
+ 'final_var' : {'a' : 'b' }})
179
225
self .assertEqual (reg .queryEntries ()[1 ].providerId , 'my provider 2' )
180
226
self .assertEqual (reg .queryEntries ()[1 ].id , id_2 )
181
- self .assertEqual (reg .queryEntries ()[1 ].timestamp .date (), QDateTime .currentDateTime ().date ())
227
+ self .assertEqual (reg .queryEntries ()[1 ].timestamp .date (),
228
+ QDateTime .currentDateTime ().date ())
182
229
self .assertEqual (reg .queryEntries ()[1 ].entry , {'some var' : 6 })
183
230
self .assertEqual (reg .queryEntries ()[2 ].providerId , 'my provider 3' )
184
231
self .assertEqual (reg .queryEntries ()[2 ].id , id_3 )
185
- self .assertEqual (reg .queryEntries ()[2 ].timestamp .date (), QDate (2021 , 1 , 2 ))
232
+ self .assertEqual (reg .queryEntries ()[2 ].timestamp .date (),
233
+ QDate (2021 , 1 , 2 ))
186
234
self .assertEqual (reg .queryEntries ()[2 ].entry , {'var' : 7 })
187
235
188
236
# query by provider
189
237
entries = reg .queryEntries (providerId = 'my provider' )
190
238
self .assertEqual (len (entries ), 1 )
191
239
self .assertEqual (entries [0 ].providerId , 'my provider' )
192
240
self .assertEqual (entries [0 ].id , id_1 )
193
- self .assertEqual (entries [0 ].timestamp .date (), QDateTime .currentDateTime ().date ())
194
- self .assertEqual (entries [0 ].entry , {'some var' : 5 , 'other_var' : [1 , 2 , 3 ], 'final_var' : {'a' : 'b' }})
241
+ self .assertEqual (entries [0 ].timestamp .date (),
242
+ QDateTime .currentDateTime ().date ())
243
+ self .assertEqual (entries [0 ].entry ,
244
+ {'some var' : 5 , 'other_var' : [1 , 2 , 3 ],
245
+ 'final_var' : {'a' : 'b' }})
195
246
196
247
entries = reg .queryEntries (providerId = 'my provider 2' )
197
248
self .assertEqual (len (entries ), 1 )
198
249
self .assertEqual (entries [0 ].providerId , 'my provider 2' )
199
250
self .assertEqual (entries [0 ].id , id_2 )
200
- self .assertEqual (entries [0 ].timestamp .date (), QDateTime .currentDateTime ().date ())
251
+ self .assertEqual (entries [0 ].timestamp .date (),
252
+ QDateTime .currentDateTime ().date ())
201
253
self .assertEqual (entries [0 ].entry , {'some var' : 6 })
202
254
203
255
# query by date
204
- entries = reg .queryEntries (start = QDateTime (3022 , 1 , 2 , 3 , 4 , 5 )) # this test will break in 3022, sorry
256
+ entries = reg .queryEntries (start = QDateTime (3022 , 1 , 2 , 3 , 4 ,
257
+ 5 )) # this test will break in 3022, sorry
205
258
self .assertEqual (len (entries ), 0 )
206
259
entries = reg .queryEntries (end = QDateTime (2020 , 1 , 2 , 3 , 4 , 5 ))
207
260
self .assertEqual (len (entries ), 0 )
208
261
209
262
entries = reg .queryEntries (start = QDateTime (2021 , 3 , 2 , 3 , 4 , 5 ))
210
263
self .assertEqual (len (entries ), 2 )
211
- self .assertCountEqual ([e .providerId for e in entries ], ['my provider' , 'my provider 2' ])
264
+ self .assertCountEqual ([e .providerId for e in entries ],
265
+ ['my provider' , 'my provider 2' ])
212
266
entries = reg .queryEntries (end = QDateTime (2021 , 3 , 2 , 3 , 4 , 5 ))
213
267
self .assertEqual (len (entries ), 1 )
214
268
self .assertEqual (entries [0 ].providerId , 'my provider 3' )
@@ -222,19 +276,23 @@ def test_registry_entries(self):
222
276
entry , ok = reg .entry (id_1 )
223
277
self .assertEqual (entry .providerId , 'my provider' )
224
278
self .assertEqual (entry .id , id_1 )
225
- self .assertEqual (entry .timestamp .date (), QDateTime .currentDateTime ().date ())
279
+ self .assertEqual (entry .timestamp .date (),
280
+ QDateTime .currentDateTime ().date ())
226
281
self .assertEqual (entry .entry , {'new_props' : 54 })
227
282
228
283
clear_spy = QSignalSpy (reg .historyCleared )
229
- self .assertTrue (reg .clearHistory (Qgis .HistoryProviderBackend .LocalProfile ))
284
+ self .assertTrue (
285
+ reg .clearHistory (Qgis .HistoryProviderBackend .LocalProfile ))
230
286
self .assertEqual (len (clear_spy ), 1 )
231
287
232
288
self .assertFalse (reg .queryEntries ())
233
289
234
290
# bulk add entries
235
291
self .assertTrue (reg .addEntries ([
236
- QgsHistoryEntry ('my provider 4' , QDateTime (2021 , 1 , 2 , 3 , 4 , 5 ), {'var' : 7 }),
237
- QgsHistoryEntry ('my provider 5' , QDateTime (2021 , 1 , 2 , 3 , 4 , 5 ), {'var' : 8 })
292
+ QgsHistoryEntry ('my provider 4' , QDateTime (2021 , 1 , 2 , 3 , 4 , 5 ),
293
+ {'var' : 7 }),
294
+ QgsHistoryEntry ('my provider 5' , QDateTime (2021 , 1 , 2 , 3 , 4 , 5 ),
295
+ {'var' : 8 })
238
296
]))
239
297
self .assertEqual (len (reg .queryEntries ()), 2 )
240
298
@@ -325,6 +383,112 @@ def test_nodes(self):
325
383
group .clear ()
326
384
self .assertEqual (group .childCount (), 0 )
327
385
386
+ def test_model (self ):
387
+ registry = QgsHistoryProviderRegistry ()
388
+ provider = TestHistoryProvider ()
389
+ registry .addProvider (provider )
390
+ registry .addEntry (provider .id (), {'a' : 1 })
391
+ registry .addEntry (provider .id (), {'a' : 2 })
392
+ registry .addEntry (provider .id (), {'a' : 3 })
393
+
394
+ model = QgsHistoryEntryModel (provider .id (), registry = registry )
395
+ # find Today group
396
+ self .assertEqual (model .rowCount (), 1 )
397
+ date_group_1_index = model .index (0 , 0 , QModelIndex ())
398
+ self .assertEqual (model .data (date_group_1_index ), 'Today' )
399
+
400
+ self .assertEqual (model .rowCount (date_group_1_index ), 3 )
401
+ entry_1_index = model .index (0 , 0 , date_group_1_index )
402
+ self .assertEqual (model .data (entry_1_index ), {'a' : 1 })
403
+ entry_2_index = model .index (1 , 0 , date_group_1_index )
404
+ self .assertEqual (model .data (entry_2_index ), {'a' : 2 })
405
+ entry_3_index = model .index (2 , 0 , date_group_1_index )
406
+ self .assertEqual (model .data (entry_3_index ), {'a' : 3 })
407
+
408
+ # an entry from yesterday
409
+ yesterday = QDateTime .currentDateTime ().addDays (- 1 )
410
+ yesterday_entry = QgsHistoryEntry (provider .id (), yesterday , {'a' : 4 })
411
+ registry .addEntry (yesterday_entry )
412
+
413
+ self .assertEqual (model .rowCount (), 2 )
414
+ yesterday_index = model .index (1 , 0 , QModelIndex ())
415
+ self .assertEqual (model .data (yesterday_index ), 'Yesterday' )
416
+
417
+ self .assertEqual (model .rowCount (yesterday_index ), 1 )
418
+ entry_4_index = model .index (0 , 0 , yesterday_index )
419
+ self .assertEqual (model .data (entry_4_index ), {'a' : 4 })
420
+
421
+ # another entry from yesterday
422
+ yesterday_entry2 = QgsHistoryEntry (provider .id (), yesterday , {'a' : 5 })
423
+ registry .addEntry (yesterday_entry2 )
424
+
425
+ self .assertEqual (model .data (yesterday_index ), 'Yesterday' )
426
+
427
+ self .assertEqual (model .rowCount (yesterday_index ), 2 )
428
+ self .assertEqual (model .data (entry_4_index ), {'a' : 4 })
429
+ entry_5_index = model .index (1 , 0 , yesterday_index )
430
+ self .assertEqual (model .data (entry_5_index ), {'a' : 5 })
431
+
432
+ # an entry from an earlier month
433
+ earlier_entry = QgsHistoryEntry (provider .id (), QDateTime (QDate (2020 , 6 , 3 ), QTime (12 , 13 , 14 )), {'a' : 6 })
434
+ earlier_entry_id , _ = registry .addEntry (earlier_entry )
435
+
436
+ self .assertEqual (model .rowCount (), 3 )
437
+ june2020_index = model .index (2 , 0 , QModelIndex ())
438
+ self .assertEqual (model .data (date_group_1_index ), 'Today' )
439
+ self .assertEqual (model .data (yesterday_index ), 'Yesterday' )
440
+ self .assertEqual (model .data (june2020_index ), 'June 2020' )
441
+
442
+ self .assertEqual (model .rowCount (june2020_index ), 1 )
443
+ entry_6_index = model .index (0 , 0 , june2020_index )
444
+ self .assertEqual (model .data (entry_6_index ), {'a' : 6 })
445
+
446
+ # an entry from an earlier month which is later than the previous one
447
+ earlier_entry2 = QgsHistoryEntry (provider .id (), QDateTime (QDate (2020 , 10 , 3 ), QTime (12 , 13 , 14 )), {'a' : 7 })
448
+ registry .addEntry (earlier_entry2 )
449
+
450
+ self .assertEqual (model .rowCount (), 4 )
451
+ october2020_index = model .index (2 , 0 , QModelIndex ())
452
+ self .assertEqual (model .data (date_group_1_index ), 'Today' )
453
+ self .assertEqual (model .data (yesterday_index ), 'Yesterday' )
454
+ self .assertEqual (model .data (june2020_index ), 'June 2020' )
455
+ self .assertEqual (model .data (october2020_index ), 'October 2020' )
456
+
457
+ self .assertEqual (model .rowCount (october2020_index ), 1 )
458
+ entry_7_index = model .index (0 , 0 , october2020_index )
459
+ self .assertEqual (model .data (entry_7_index ), {'a' : 7 })
460
+
461
+ # an entry from last week
462
+ last_week = QDateTime .currentDateTime ().addDays (- 7 )
463
+ last_week_entry = QgsHistoryEntry (provider .id (), last_week , {'a' : 'last_week' })
464
+ registry .addEntry (last_week_entry )
465
+
466
+ self .assertEqual (model .rowCount (), 5 )
467
+ last_week_index = model .index (2 , 0 , QModelIndex ())
468
+ self .assertEqual (model .data (date_group_1_index ), 'Today' )
469
+ self .assertEqual (model .data (yesterday_index ), 'Yesterday' )
470
+ self .assertEqual (model .data (june2020_index ), 'June 2020' )
471
+ self .assertEqual (model .data (october2020_index ), 'October 2020' )
472
+ self .assertEqual (model .data (last_week_index ), 'Last 7 days' )
473
+
474
+ self .assertEqual (model .rowCount (last_week_index ), 1 )
475
+ entry_last_week_index = model .index (0 , 0 , last_week_index )
476
+ self .assertEqual (model .data (entry_last_week_index ), {'a' : 'last_week' })
477
+
478
+ # update an entry
479
+ registry .updateEntry (earlier_entry_id , {'a' : 8 })
480
+ entry_6_index = model .index (0 , 0 , june2020_index )
481
+ self .assertEqual (model .data (entry_6_index ), {'a' : 8 })
482
+ self .assertEqual (model .rowCount (entry_6_index ), 2 )
483
+ entry_6a_index = model .index (0 , 0 , entry_6_index )
484
+ self .assertEqual (model .data (entry_6a_index ), 'my child' )
485
+ entry_6b_index = model .index (1 , 0 , entry_6_index )
486
+ self .assertEqual (model .data (entry_6b_index ), 'my child 2' )
487
+
488
+ # clear
489
+ registry .clearHistory (Qgis .HistoryProviderBackend .LocalProfile )
490
+ self .assertEqual (model .rowCount (), 0 )
491
+
328
492
329
493
if __name__ == '__main__' :
330
494
unittest .main ()
0 commit comments