core/migration/tables/users.py

82 lines
3.0 KiB
Python
Raw Normal View History

2021-08-20 15:10:15 +00:00
from orm import User, Role
import frontmatter
2021-08-20 09:27:19 +00:00
from dateutil.parser import parse
2021-08-23 08:44:46 +00:00
from migration.html2text import html2text
# from migration.html2md import Converter
# markdown = Converter()
2021-08-20 09:27:19 +00:00
counter = 0
2021-08-25 21:20:53 +00:00
def migrate(entry, limit=668):
2021-08-20 09:27:19 +00:00
'''
type User {
username: String! # email
createdAt: DateTime!
email: String
password: String
oauth: String # provider:token
2021-10-03 16:19:48 +00:00
name: String # to display
2021-08-20 09:27:19 +00:00
userpic: String
links: [String]
emailConfirmed: Boolean # should contain all emails too
id: Int!
muted: Boolean
rating: Int
roles: [Role]
updatedAt: DateTime
wasOnlineAt: DateTime
ratings: [Rating]
slug: String
bio: String
notifications: [Int]
}
'''
res = {}
2021-08-20 15:10:15 +00:00
res['old_id'] = entry['_id']
res['password'] = entry['services']['password'].get('bcrypt', '')
res['username'] = entry['emails'][0]['address']
res['email'] = res['username']
res['wasOnlineAt'] = parse(entry.get('loggedInAt', entry['createdAt']))
res['emailConfirmed'] = entry['emails'][0]['verified']
res['createdAt'] = parse(entry['createdAt'])
res['rating'] = entry['rating'] # number
2021-09-11 08:20:23 +00:00
res['roles'] = [] # entry['roles'] # roles by community
2021-08-20 15:10:15 +00:00
res['ratings'] = [] # entry['ratings']
res['notifications'] = []
res['links'] = []
res['muted'] = False
2021-08-23 08:44:46 +00:00
res['bio'] = html2text(entry.get('bio', ''))
2021-08-20 15:10:15 +00:00
if entry['profile']:
res['slug'] = entry['profile'].get('path')
2021-08-23 08:44:46 +00:00
res['userpic'] = entry['profile'].get('image', {'thumborId': ''}).get('thumborId', '') # adding 'https://assets.discours.io/unsafe/1600x' in web ui
2021-08-20 15:10:15 +00:00
fn = entry['profile'].get('firstName', '')
ln = entry['profile'].get('lastName', '')
2021-10-03 16:19:48 +00:00
name = res['slug'] if res['slug'] else 'anonymous'
name = fn if fn else name
name = (name + ' ' + ln) if ln else name
name = entry['profile']['path'] if len(name) < 2 else name
res['name'] = name
2021-08-20 15:10:15 +00:00
fb = entry['profile'].get('facebook', False)
if fb:
res['links'].append(fb)
vk = entry['profile'].get('vkontakte', False)
if vk:
res['links'].append(vk)
tr = entry['profile'].get('twitter', False)
if tr:
res['links'].append(tr)
ws = entry['profile'].get('website', False)
if ws:
res['links'].append(ws)
2021-08-20 09:27:19 +00:00
if not res['slug']:
2021-08-20 15:10:15 +00:00
res['slug'] = res['links'][0].split('/')[-1]
if not res['slug']:
res['slug'] = res['email'].split('@')[0]
2021-08-20 09:27:19 +00:00
else:
old = res['old_id']
del res['old_id']
user = User.create(**res.copy())
res['id'] = user.id
res['old_id'] = old
return res