#!/usr/bin/env python import os import sys import chardet sys.path.append(os.path.join(os.path.dirname(__file__), '..')) os.environ['DJANGO_SETTINGS_MODULE'] = 'scannerjammer.settings' from db import db as DB from pprint import pprint import django from datetime import datetime from django.conf import settings from django.contrib.auth.models import User from backend.models import SJLike from backend.models import SJRoom from backend.models import SJContent from backend.models import SJSearch from backend.models import SJUserProfile from backend.views import thraw from backend.views import freeze class MigrateDB(DB): def __init__(self, *args, **kwargs): super(MigrateDB, self).__init__(*args, **kwargs) def get_table(self, name): self.execute('SELECT * FROM %s' % name) fields = [d[0] for d in self.cursor.description] rows = self.cursor.fetchall() for row in rows: row = list(row) for i, r in enumerate(row[:]): if isinstance(r, str): detect = chardet.detect(r) row[i] = unicode(r, detect['encoding'] or 'utf8', 'replace') yield dict(zip(fields, row)) def get_radio_chat_table(self): return self.get_table('radio_chat') def get_search_log_table(self): return self.get_table('search_log') def get_sj_bg_table(self): return self.get_table('sj_bg') def get_sj_chat_table(self): return self.get_table('sj_chat') def get_sj_likes_table(self): return self.get_table('sj_likes') def get_sj_likes_tmp_table(self): return self.get_table('sj_likes_tmp') def get_sj_room_table(self): return self.get_table('sj_room') def get_sj_search_log_table(self): return self.get_table('sj_search_log') def get_sj_session_table(self): return self.get_table('sj_sesson') def get_sj_url_table(self): return self.get_table('sj_url') def get_sj_url_tmp_table(self): return self.get_table('sj_url_tmp') def get_sj_user_table(self): return self.get_table('sj_user') def get_sj_video_table(self): return self.get_table('sj_video') if __name__ == '__main__': admin = User.objects.get(username='admin') db = MigrateDB() db.connect() # Migrate sj_user table sj_user = list(db.get_sj_user_table()) map_user = {} for row in sj_user: try: user = User.objects.get(username=row['username']) except User.DoesNotExist: user = User.objects.create_user( row['username'], '%s@example.com' % row['username'], row['password'] ) try: user_profile = user.get_profile() except django.core.exceptions.ObjectDoesNotExist: user_profile = SJUserProfile(user=user) user_profile.lastseen_chat = datetime.fromtimestamp(0) user_profile.lastseen_webcam = datetime.fromtimestamp(0) user_profile.save() user.date_joined = datetime.fromtimestamp(row['joindate']) user.last_login = datetime.fromtimestamp(row['seendate']) user.save() user_profile.nickname = row['nickname'] or '' user_profile.score = row['score'] user_profile.access = row['access'] user_profile.bio = row['bio'] or '' user_profile.lastseen_chat = datetime.fromtimestamp(row['seendate']) user_profile.save() #for key, value in row.iteritems(): # print key, ', ', value, ', ', type(value) #print row['__user_pk'] = user.pk map_user[row['id']] = user.pk # Migrate sj_search_log table sj_search_log = list(db.get_sj_search_log_table()) for row in sj_search_log: user = admin pk = map_user.get(row['userid'], 0) if pk: user = User.objects.get(pk=pk) try: sjsearch = SJSearch.objects.get( user=user, datetime=datetime.fromtimestamp(row['date']) ) print 'SJ Search Log Found' except SJSearch.DoesNotExist: sjsearch = SJSearch( user=user, datetime=datetime.fromtimestamp(row['date']) ) sjsearch.settings = dict( url=row['url'], count=row['count'], terms=row['terms'], title=row['title'] ) sjsearch.save() # Migrate sj_room table sj_room = list(db.get_sj_room_table()) map_room = {} for row in sj_room: try: room = SJRoom.objects.get(name=row['name']) except SJRoom.DoesNotExist: room = SJRoom(name=row['name']) room.user = admin room.datetime = datetime.fromtimestamp(row['date']) room.settings = thraw(row['settings']) room.private = row['private'] room.save() row['__room_pk'] = room.pk map_room[row['id']] = room.pk # Migrate sj_bg table sj_bg = list(db.get_sj_bg_table()) for row in sj_bg: user = admin pk = map_user.get(row['userid'], 0) if pk: user = User.objects.get(pk=pk) room = SJRoom.objects.get(name='main') pk = map_room.get(row['roomid'], 0) if pk: room = SJRoom.objects.get(pk=pk) try: bg = SJContent.objects.get( user=user, datetime=datetime.fromtimestamp(row['date']), room=room, content_type='background') except SJContent.DoesNotExist: bg = SJContent( user=user, datetime=datetime.fromtimestamp(row['date']), room=room, content_type='background') bg.settings = dict(url=row['url']) bg.save() row['__sjcontent_background_pk'] = bg.pk # Migrate sj_video table sj_video = list(db.get_sj_video_table()) map_video = {} for row in sj_video: user = admin pk = map_user.get(row['userid'], 0) if pk: user = User.objects.get(pk=pk) room = SJRoom.objects.get(name='main') pk = map_room.get(row['roomid'], 0) if pk: room = SJRoom.objects.get(pk=pk) try: video = SJContent.objects.get( user=user, datetime=datetime.fromtimestamp(row['date']), room=room, content_type='video') except SJContent.DoesNotExist: video = SJContent( user=user, datetime=datetime.fromtimestamp(row['date']), room=room, content_type='video') video.settings = dict( url=row['url'], title=row['title'], likes=row['likes'], removed=row['removed'], thumbnail=row['thumbnail'], username=row['username'] ) video.save() row['__sjcontent_video_pk'] = video.pk map_video[row['id']] = video.pk # Migrate sj_likes table sj_likes = list(db.get_sj_likes_table()) for row in sj_likes: user = admin pk = map_user.get(row['userid'], 0) if pk: user = User.objects.get(pk=pk) video = None pk = map_video.get(row['videoid'], 0) if pk: video = SJContent.objects.get(pk=pk) try: like = SJLike.objects.get( user=user, datetime=datetime.fromtimestamp(row['date']), content=video) except SJContent.DoesNotExist: like = SJLike( user=user, datetime=datetime.fromtimestamp(row['date']), content=video) like.save() row['__sjlike_pk'] = like.pk # Migrate sj_chat table sj_chat = list(db.get_sj_chat_table()) for row in sj_chat: user = admin pk = map_user.get(row['userid'], 0) if pk: user = User.objects.get(pk=pk) room = SJRoom.objects.get(name='main') pk = map_room.get(row['roomid'], 0) if pk: room = SJRoom.objects.get(pk=pk) try: chat = SJContent.objects.get( user=user, datetime=datetime.fromtimestamp(row['date']), room=room, content_type='text') except SJContent.DoesNotExist: chat = SJContent( user=user, datetime=datetime.fromtimestamp(row['date']), room=room, content_type='text') chat.settings = dict(text=row['msg']) chat.save() row['__sjcontent_text_pk'] = chat.pk # Migrate sj_url table sj_url = list(db.get_sj_url_table()) for row in sj_url: user = admin pk = map_user.get(row['userid'], 0) if pk: user = User.objects.get(pk=pk) room = SJRoom.objects.get(name='main') pk = map_room.get(row['roomid'], 0) if pk: room = SJRoom.objects.get(pk=pk) try: url = SJContent.objects.get( user=user, datetime=datetime.fromtimestamp(row['date']), room=room, content_type='url') except SJContent.DoesNotExist: url = SJContent( user=user, datetime=datetime.fromtimestamp(row['date']), room=room, content_type='url') url.settings = dict(url=row['url']) url.save() row['__sjcontent_url_pk'] = url.pk