mirror of
https://git.wownero.com/lza_menace/suchwow.git
synced 2024-08-15 01:03:19 +00:00
107 lines
No EOL
3.6 KiB
Python
Executable file
107 lines
No EOL
3.6 KiB
Python
Executable file
#!/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"]}') |