#!/usr/bin/env python3 # import pickled suchwow data for the purpose of importing into new model definitions import pickle from datetime import datetime from suchwow._models import User, Post, AuditEvent, TipSent, TipReceived, Vote from suchwow import wownero wallet = wownero.Wallet() all_data = dict() if not wallet.connected: print('Wallet not running and connected') exit() with open('data/migrate_data.pkl', 'rb') as f: all_data = pickle.load(f) # first import users from old profiles for user in all_data['profiles']: if not User.select().where(User.username == user['username']).first(): u = User( username=user['username'], address=user['address'], ) u.save() print(f'Added user {u.username}') for post in all_data['posts']: if not Post.select().where(Post.id == post['id']).first(): user = User.get(username=post['submitter']) account_idx = 0 address_idx, address = wallet.new_address(account_idx) print(f'Saving post {post["id"]} for user {user.username} (account {account_idx}, address_idx {address_idx}, {address}') Post.create( id=post['id'], title=post['title'], text=post['text'], user=user, image_name=post['image_name'], account_index=account_idx, address_index=address_idx, address=address, timestamp=post['timestamp'], approved=post['approved'] ) if 'in' in post['txes']: p = Post.get(post['id']) for tx in post['txes']['in']: amount = sum(tx['amounts']) received = TipReceived.select().where( TipReceived.txid == tx['txid'], TipReceived.amount == amount, TipReceived.post == p ).first() if not received: TipReceived.create( post=p, timestamp=datetime.utcfromtimestamp(tx['timestamp']), txid=tx['txid'], amount=amount, fee=tx['fee'] ) print(f'Saving received tip txid {tx["txid"]}') if 'out' in post['txes']: p = Post.get(post['id']) for tx in post['txes']['out']: if not TipSent.select().where(TipSent.txid == tx['txid']).first(): TipSent.create( from_user=p.user, to_user=p.user, txid=tx['txid'], timestamp=datetime.utcfromtimestamp(tx['timestamp']), amount=tx['amount'], fee=tx['fee'] ) print(f'Saving sent tip txid {tx["txid"]}') for mod in all_data['moderators']: u = User.get(User.username == mod) if not u.moderator: u.moderator = True u.save() print(f'Updated {u.username} as moderator') for ban in all_data['bans']: u = User.get(User.username == ban['username']) if not u.banned: u.banned = True u.ban_reason = ban['reason'] u.ban_timestamp = ban['timestamp'] u.save() print(f'Banned {u.username} ({u.ban_reason})') for event in all_data['auditevents']: if not AuditEvent.select().where(AuditEvent.timestamp == event['timestamp']): u = User.get(User.username == event['username']) AuditEvent.create( user=u, action=event['action'], timestamp=event['timestamp'] ) print(f'Saved audit event ({u.username} -> {event["action"]} @ {event["timestamp"]}')