2020# pylint: disable=attribute-defined-outside-init,protected-access
2121
2222
23- def db_upgrade (func ):
23+ upgrade_dict = {}
24+
25+
26+ def db_upgrade (** kwargs ):
2427 """upgrade the migration"""
25- def inner (* args , ** kwargs ):
28+ version_dict = kwargs
29+ def inner (func ):
2630 """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
3236 return inner
3337
3438
@@ -53,18 +57,8 @@ def update_sent(self):
5357 '''update sent set status='broadcastqueued' where status='broadcastpending' ''' )
5458 self .conn .commit ()
5559
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 ):
6862 """
6963 method for getting rid of the first20bytesofencryptedmessage field in
7064 the inventory table.
@@ -92,7 +86,8 @@ def versionTwo(self):
9286 parameters = (3 ,)
9387 self .cur .execute (item , parameters )
9488
95- def versionThree (self ):
89+ @db_upgrade (version_three = 3 )
90+ def version_three (self ):
9691 """Adding a new column to the inventory table to store tags."""
9792 logger .debug (
9893 'In messages.dat database, adding tag field to'
@@ -104,7 +99,8 @@ def versionThree(self):
10499 parameters = (4 ,)
105100 self .cur .execute (item , parameters )
106101
107- def versionFour (self ):
102+ @db_upgrade (versio_four = 4 )
103+ def versio_four (self ):
108104 """
109105 Add a new column to the pubkeys table to store the address version.
110106 We're going to trash all of our pubkeys and let them be redownloaded.
@@ -119,7 +115,8 @@ def versionFour(self):
119115 parameters = (5 ,)
120116 self .cur .execute (item , parameters )
121117
122- def versionFive (self ):
118+ @db_upgrade (versio_five = 5 )
119+ def versio_five (self ):
123120 """
124121 Add a new table: objectprocessorqueue with which to hold objects
125122 that have yet to be processed if the user shuts down Bitmessage.
@@ -132,7 +129,8 @@ def versionFive(self):
132129 parameters = (6 ,)
133130 self .cur .execute (item , parameters )
134131
135- def versionSix (self ):
132+ @db_upgrade (version_six = 6 )
133+ def version_six (self ):
136134 """
137135 changes related to protocol v3
138136 In table inventory and objectprocessorqueue, objecttype is now
@@ -156,7 +154,8 @@ def versionSix(self):
156154 logger .debug (
157155 'Finished dropping and recreating the inventory table.' )
158156
159- def versionSeven (self ):
157+ @db_upgrade (version_seven = 7 )
158+ def version_seven (self ):
160159 """
161160 The format of data stored in the pubkeys table has changed. Let's
162161 clear it, and the pubkeys from inventory, so that they'll
@@ -178,7 +177,8 @@ def versionSeven(self):
178177 self .cur .execute (query , parameters )
179178 logger .debug ('Finished clearing currently held pubkeys.' )
180179
181- def versionEight (self ):
180+ @db_upgrade (version_eight = 8 )
181+ def version_eight (self ):
182182 """
183183 Add a new column to the inbox table to store the hash of
184184 the message signature. We'll use this as temporary message UUID
@@ -194,7 +194,8 @@ def versionEight(self):
194194 parameters = (9 ,)
195195 self .cur .execute (item , parameters )
196196
197- def versionNine (self ):
197+ @db_upgrade (version_nine = 9 )
198+ def version_nine (self ):
198199 """
199200 We'll also need a `sleeptill` field and a `ttl` field. Also we
200201 can combine the pubkeyretrynumber and msgretrynumber into one.
@@ -259,7 +260,8 @@ def versionNine(self):
259260 ' and removing the hash field.' )
260261 self .cur .execute ('''update settings set value=10 WHERE key='version';''' )
261262
262- def versionTen (self ):
263+ @db_upgrade (version_ten = 10 )
264+ def version_ten (self ):
263265 """Update the address colunm to unique in addressbook table"""
264266 logger .debug (
265267 '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
416418
417419 self .update_sent ()
418420
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 ))()
420432
421433 # Are you hoping to add a new option to the keys.dat file of existing
422434 # Bitmessage users or modify the SQLite database? Add it right
0 commit comments