20
20
# pylint: disable=attribute-defined-outside-init,protected-access
21
21
22
22
23
- def db_upgrade (func ):
23
+ upgrade_dict = {}
24
+
25
+
26
+ def db_upgrade (** kwargs ):
24
27
"""upgrade the migration"""
25
- def inner (* args , ** kwargs ):
28
+ version_dict = kwargs
29
+ def inner (func ):
26
30
"""this is inner method"""
27
- reference = args [ 0 ]
28
- item = '''SELECT value FROM settings WHERE key='version';'''
29
- parameters = ''
30
- reference . cur . execute ( item , parameters )
31
- func ( reference , int ( reference . cur . fetchall ()[ 0 ][ 0 ]))
31
+ upgrade_dict . update ( version_dict )
32
+ def wrapped ( * args ):
33
+ """used for calling main method"""
34
+ func ( * args )
35
+ return wrapped
32
36
return inner
33
37
34
38
@@ -53,18 +57,8 @@ def update_sent(self):
53
57
'''update sent set status='broadcastqueued' where status='broadcastpending' ''' )
54
58
self .conn .commit ()
55
59
56
- @db_upgrade
57
- def upgrade_migrations (self , currentVersion ):
58
- """This method is for upgrading migrations"""
59
- versionList = [
60
- 'versionThree' , 'versionTwo' , 'versionThree' ,
61
- 'versionFour' , 'versionFive' , 'versionSix' , 'versionSeven' ,
62
- 'versionEight' , 'versionNine' , 'versionTen'
63
- ]
64
- if currentVersion < 11 :
65
- getattr (self , versionList [currentVersion - 1 ])()
66
-
67
- def versionTwo (self ):
60
+ @db_upgrade (version_two = 2 )
61
+ def version_two (self ):
68
62
"""
69
63
method for getting rid of the first20bytesofencryptedmessage field in
70
64
the inventory table.
@@ -92,7 +86,8 @@ def versionTwo(self):
92
86
parameters = (3 ,)
93
87
self .cur .execute (item , parameters )
94
88
95
- def versionThree (self ):
89
+ @db_upgrade (version_three = 3 )
90
+ def version_three (self ):
96
91
"""Adding a new column to the inventory table to store tags."""
97
92
logger .debug (
98
93
'In messages.dat database, adding tag field to'
@@ -104,7 +99,8 @@ def versionThree(self):
104
99
parameters = (4 ,)
105
100
self .cur .execute (item , parameters )
106
101
107
- def versionFour (self ):
102
+ @db_upgrade (versio_four = 4 )
103
+ def versio_four (self ):
108
104
"""
109
105
Add a new column to the pubkeys table to store the address version.
110
106
We're going to trash all of our pubkeys and let them be redownloaded.
@@ -119,7 +115,8 @@ def versionFour(self):
119
115
parameters = (5 ,)
120
116
self .cur .execute (item , parameters )
121
117
122
- def versionFive (self ):
118
+ @db_upgrade (versio_five = 5 )
119
+ def versio_five (self ):
123
120
"""
124
121
Add a new table: objectprocessorqueue with which to hold objects
125
122
that have yet to be processed if the user shuts down Bitmessage.
@@ -132,7 +129,8 @@ def versionFive(self):
132
129
parameters = (6 ,)
133
130
self .cur .execute (item , parameters )
134
131
135
- def versionSix (self ):
132
+ @db_upgrade (version_six = 6 )
133
+ def version_six (self ):
136
134
"""
137
135
changes related to protocol v3
138
136
In table inventory and objectprocessorqueue, objecttype is now
@@ -156,7 +154,8 @@ def versionSix(self):
156
154
logger .debug (
157
155
'Finished dropping and recreating the inventory table.' )
158
156
159
- def versionSeven (self ):
157
+ @db_upgrade (version_seven = 7 )
158
+ def version_seven (self ):
160
159
"""
161
160
The format of data stored in the pubkeys table has changed. Let's
162
161
clear it, and the pubkeys from inventory, so that they'll
@@ -178,7 +177,8 @@ def versionSeven(self):
178
177
self .cur .execute (query , parameters )
179
178
logger .debug ('Finished clearing currently held pubkeys.' )
180
179
181
- def versionEight (self ):
180
+ @db_upgrade (version_eight = 8 )
181
+ def version_eight (self ):
182
182
"""
183
183
Add a new column to the inbox table to store the hash of
184
184
the message signature. We'll use this as temporary message UUID
@@ -194,7 +194,8 @@ def versionEight(self):
194
194
parameters = (9 ,)
195
195
self .cur .execute (item , parameters )
196
196
197
- def versionNine (self ):
197
+ @db_upgrade (version_nine = 9 )
198
+ def version_nine (self ):
198
199
"""
199
200
We'll also need a `sleeptill` field and a `ttl` field. Also we
200
201
can combine the pubkeyretrynumber and msgretrynumber into one.
@@ -259,7 +260,8 @@ def versionNine(self):
259
260
' and removing the hash field.' )
260
261
self .cur .execute ('''update settings set value=10 WHERE key='version';''' )
261
262
262
- def versionTen (self ):
263
+ @db_upgrade (version_ten = 10 )
264
+ def version_ten (self ):
263
265
"""Update the address colunm to unique in addressbook table"""
264
266
logger .debug (
265
267
'In messages.dat database, updating address column to UNIQUE'
@@ -416,7 +418,17 @@ def run(self): # pylint: disable=too-many-locals, too-many-branches, too-many-s
416
418
417
419
self .update_sent ()
418
420
419
- self .upgrade_migrations ()
421
+ item = '''SELECT value FROM settings WHERE key='version';'''
422
+ parameters = ''
423
+ self .cur .execute (item , parameters )
424
+ currentVersion = int (self .cur .fetchall ()[0 ][0 ])
425
+ temp_dict = {val :key for key ,val in upgrade_dict .items ()}
426
+
427
+ if temp_dict .get (currentVersion ) or currentVersion == 1 :
428
+ if currentVersion == 1 :
429
+ getattr (self , temp_dict .get (3 ))()
430
+ else :
431
+ getattr (self , temp_dict .get (currentVersion ))()
420
432
421
433
# Are you hoping to add a new option to the keys.dat file of existing
422
434
# Bitmessage users or modify the SQLite database? Add it right
0 commit comments