def major_1_to_2( database ):
print " Creating CloudSessions table.."
database.transact(
"CREATE TABLE CloudSessions( token, username, touched );",
"CREATE UNIQUE INDEX CloudSessions_token ON CloudSessions( token );",
"CREATE UNIQUE INDEX CloudSessions_username ON CloudSessions( username );"
)
if database.getConfig( "site-auth" ) == "cloud":
print " Migrating from Cloud authentication to MD5 authentication.."
from md5 import md5
database.setConfig( "site-auth", "md5" )
transactions = []
for username, password in database.query(
"SELECT username, password FROM CloudAuth;"
):
transactions.append((
"UPDATE CloudAuth SET password = %s WHERE username == %s;",
md5( password ).hexdigest(), username
))
database.transact( *transactions )
else:
return
def update_version( database, svMajor, svMinor ):
database.setConfig( "major-version", svMajor )
database.setConfig( "minor-version", svMinor )
def minor_migration( database ):
print " Clearing all cached content html.."
database.transact( "DELETE FROM CloudHtml;" )
def migrate_database( database, svMajor, svMinor ):
dbMajor, dbMinor = database.getVersion()
print "Migrating from %s.%s to %s.%s.." % ( dbMajor, dbMinor, svMajor, svMinor )
if dbMajor == 1:
major_1_to_2( database )
minor_migration( database )
update_version( database, svMajor, svMinor )
elif dbMajor == 2:
if dbMinor != svMinor:
minor_migration( database )
update_version( database, svMajor, svMinor )
else:
print " Failed -- Cloud Wiki cannot migrate a server from a newer major version to an older one."
print "Done."
|