#!/usr/bin/env python # -*- coding: utf-8 -*- # # This scripts migrates the pyyimt database to a mysql/sqlite database for spectrum. # # This script is derived from py-transport2spectrum and the pyyimt migration part # was written by Christian Dröge import os.path import sys import shelve import anydbm import cPickle import exceptions try: from twisted.enterprise import adbapi from twisted.enterprise import util except: print "python-twisted is not installed" s = util.safe from twisted.internet import reactor def error(result): print 'SQL ERROR ' + unicode(result) def start(): if len(sys.argv) != 6 and len(sys.argv) != 7 and len(sys.argv) != 3 and len(sys.argv) != 4: print "Usage for MySQL: " + sys.argv[0] + " pyyimt_database database username password host [mysql_prefix]" print "Usage for SQLite: " + sys.argv[0] + " pyyimt_database database [prefix]" reactor.stop() return prefix = "" if len(sys.argv) == 7: prefix = sys.argv[6] elif len(sys.argv) == 4: prefix = sys.argv[3] if len(sys.argv) == 3 or len(sys.argv) == 4: if not os.path.exists(sys.argv[2]): print "Run Spectrum to create this DB file first and then run this script again with the DB file created by Spectrum." reactor.stop() return db = adbapi.ConnectionPool('sqlite3', sys.argv[2]) else: db = adbapi.ConnectionPool('MySQLdb', db = sys.argv[2], user = sys.argv[3], passwd = sys.argv[4], host = sys.argv[5], cp_min=1, cp_max=1) if os.path.isfile(sys.argv[1]): yahoodb = shelve.open(sys.argv[1],flag="r") else: print "Error: The following pyyimt database does not exist: %s" % sys.argv[1] reactor.stop() return import_error = False for jid in yahoodb.keys(): try: password = yahoodb[jid]['password'] uin = yahoodb[jid]['username'] except (cPickle.UnpicklingError, exceptions.ValueError): print "Error: Could not add %s, maybe a part of the pyyimt database is corrupt" % jid import_error = True else: print "Adding", jid if len(sys.argv) == 3 or len(sys.argv) == 4: db.runQuery('insert or ignore into ' + prefix + 'users (jid, uin, password, language) values ("%s", "%s", "%s", "en")'%(s(jid), s(uin),s(password))).addErrback(error) else: db.runQuery('insert ignore into ' + prefix + 'users (jid, uin, password, language) values ("%s", "%s", "%s", "en")'%(s(jid), s(uin),s(password))).addErrback(error) yahoodb.close() if import_error: print "Error: There were some errors, when importing the pyyimt database. Look for more \"Error:\" lines above, to see the details" reactor.stop() reactor.callWhenRunning(start) reactor.run()