This commit is contained in:
Untone 2021-08-21 02:18:10 +03:00
commit de6d4c47a3
7 changed files with 113 additions and 101 deletions

View File

@ -9,14 +9,14 @@ def users():
data = json.loads(open('migration/data/users.json').read()) data = json.loads(open('migration/data/users.json').read())
newdata = {} newdata = {}
counter = 0 counter = 0
try: #try:
for entry in data: for entry in data:
oid = entry['_id'] oid = entry['_id']
newdata[oid] = migrateUser(entry) newdata[oid] = migrateUser(entry)
counter += 1 counter += 1
except Exception: #except Exception:
print(str(counter) + '/' + str(len(data)) + ' users entries were migrated') # print(str(counter) + '/' + str(len(data)) + ' users entries were migrated')
print('try to remove database first') # print('try to remove database first')
open('migration/data/users.dict.json','w').write( json.dumps(newdata, cls=DateTimeEncoder) ) open('migration/data/users.dict.json','w').write( json.dumps(newdata, cls=DateTimeEncoder) )
print(str(counter) + ' users entries were migrated') print(str(counter) + ' users entries were migrated')
@ -47,6 +47,9 @@ def shouts():
oid = entry['_id'] oid = entry['_id']
newdata[oid] = migrateShout(entry) newdata[oid] = migrateShout(entry)
counter += 1 counter += 1
print(str(counter) + ': ' + newdata['slug'])
if counter > 9:
break
open('migration/data/shouts.dict.json','w').write( json.dumps(newdata, cls=DateTimeEncoder) ) open('migration/data/shouts.dict.json','w').write( json.dumps(newdata, cls=DateTimeEncoder) )
print(str(counter) + ' shouts were migrated') print(str(counter) + ' shouts were migrated')

View File

@ -31,6 +31,6 @@ def migrate(entry):
'org': 'discours.io', 'org': 'discours.io',
'slug': entry['slug'], 'slug': entry['slug'],
'createdAt': entry['createdAt'], 'createdAt': entry['createdAt'],
'body': markdown(entry['body']), 'body': markdown.feed(entry['body']),
'replyTo': entry[''] 'replyTo': entry['']
} }

View File

@ -1,5 +1,5 @@
def migrate(entry): def migrate(entry):
``` '''
type Topic { type Topic {
slug: String! # ID slug: String! # ID
createdBy: Int! # User createdBy: Int! # User
@ -8,12 +8,13 @@ def migrate(entry):
parents: [String] # NOTE: topic can have parent topics parents: [String] # NOTE: topic can have parent topics
children: [String] # and children children: [String] # and children
} }
``` '''
return { return {
'slug': entry['slug'], 'slug': entry['slug'],
'createdBy': entry['createdBy'], # NOTE: uses an old user id 'createdBy': entry['createdBy'], # NOTE: uses an old user id
'createdAt': entry['createdAt'], 'createdAt': entry['createdAt'],
'value': entry['title'].lower(), 'value': entry['title'].lower(),
'parents': [], 'parents': [],
'children': [] 'children': [],
'old_id': entry['_id']
} }

View File

@ -1,6 +1,7 @@
from migration.html2md import Converter from migration.html2md import Converter
from dateutil.parser import parse from dateutil.parser import parse
from os.path import abspath from os.path import abspath
import frontmatter
import json import json
from orm import Shout from orm import Shout
@ -70,15 +71,20 @@ def migrate(entry):
if entry.get('updatedAt') is not None: if entry.get('updatedAt') is not None:
r['updatedAt'] = entry['updatedAt'] r['updatedAt'] = entry['updatedAt']
if entry.get('type') == 'Literature': if entry.get('type') == 'Literature':
r['body'] = entry['media'][0]['literatureBody'] r['body'] = markdown.feed(entry['media'][0]['literatureBody'])
elif entry.get('type') == 'Video': elif entry.get('type') == 'Video':
r['body'] = '<ShoutVideo src=\"' + entry['media'][0]['youtubeId'] + '\" />' r['body'] = '<ShoutVideo src=\"' + entry['media'][0]['youtubeId'] + '\" />'
elif entry.get('type') == 'Music': elif entry.get('type') == 'Music':
r['body'] = '<ShoutMusic media={\"' + json.dumps(entry['media']) +'\"} />' r['body'] = '<ShoutMusic media={\"' + json.dumps(entry['media']) +'\"} />'
elif entry.get('body') is not None:
r['body'] = markdown.feed(entry['body'])
else: else:
r['body'] = '## ' + r['title'] r['body'] = '## ' + r['title']
# TODO: compile md with graymatter body = r['body']
open('migration/content/' + r['slug'] + '.md', 'w').write(mdfile) del r['body']
metadata = frontmatter.dumps(r)
open('migration/content/' + r['slug'] + '.md', 'w').write(metadata + '\n' + body)
r['body'] = body
shout = Shout.create(**r.copy()) shout = Shout.create(**r.copy())
r['id'] = shout['id'] r['id'] = shout['id']
return r return r

View File

@ -1,6 +1,8 @@
from orm import User from orm import User, Role
import frontmatter
from dateutil.parser import parse from dateutil.parser import parse
from migration.html2md import Converter
markdown = Converter()
counter = 0 counter = 0
def migrate(entry): def migrate(entry):
@ -30,7 +32,6 @@ def migrate(entry):
''' '''
res = {} res = {}
try:
res['old_id'] = entry['_id'] res['old_id'] = entry['_id']
res['password'] = entry['services']['password'].get('bcrypt', '') res['password'] = entry['services']['password'].get('bcrypt', '')
res['username'] = entry['emails'][0]['address'] res['username'] = entry['emails'][0]['address']
@ -44,11 +45,15 @@ def migrate(entry):
res['notifications'] = [] res['notifications'] = []
res['links'] = [] res['links'] = []
res['muted'] = False res['muted'] = False
res['viewname'] = 'anonymous' res['bio'] = markdown.feed(entry.get('bio', ''))
if entry['profile']: if entry['profile']:
res['slug'] = entry['profile'].get('path') res['slug'] = entry['profile'].get('path')
res['userpic'] = entry['profile'].get('image', {'url': ''}).get('url', '') res['userpic'] = entry['profile'].get('image', {'url': ''}).get('url', '')
viewname = entry['profile'].get('firstName', '') + ' ' + entry['profile'].get('lastName', '') fn = entry['profile'].get('firstName', '')
ln = entry['profile'].get('lastName', '')
viewname = res['slug'] if res['slug'] else 'anonymous'
viewname = fn if fn else viewname
viewname = (viewname + ' ' + ln) if ln else viewname
viewname = entry['profile']['path'] if len(viewname) < 2 else viewname viewname = entry['profile']['path'] if len(viewname) < 2 else viewname
res['viewname'] = viewname res['viewname'] = viewname
fb = entry['profile'].get('facebook', False) fb = entry['profile'].get('facebook', False)
@ -67,9 +72,6 @@ def migrate(entry):
res['slug'] = res['links'][0].split('/')[-1] res['slug'] = res['links'][0].split('/')[-1]
if not res['slug']: if not res['slug']:
res['slug'] = res['email'].split('@')[0] res['slug'] = res['email'].split('@')[0]
except Exception:
print(entry['profile'])
raise Exception
else: else:
old = res['old_id'] old = res['old_id']
del res['old_id'] del res['old_id']

View File

@ -38,7 +38,7 @@ class User(Base):
userpic: str = Column(String, nullable=True, comment="Userpic") userpic: str = Column(String, nullable=True, comment="Userpic")
viewname: str = Column(String, nullable=True, comment="Display name") viewname: str = Column(String, nullable=True, comment="Display name")
rating: int = Column(Integer, nullable=True, comment="Rating") rating: int = Column(Integer, nullable=True, comment="Rating")
slug: str = Column(String, unique=True, comment="Author's slug") slug: str = Column(String, unique=True, comment="User's slug")
muted: bool = Column(Boolean, default=False) muted: bool = Column(Boolean, default=False)
emailConfirmed: bool = Column(Boolean, default=False) emailConfirmed: bool = Column(Boolean, default=False)
createdAt: DateTime = Column(DateTime, nullable=False, comment="Created at") createdAt: DateTime = Column(DateTime, nullable=False, comment="Created at")

View File

@ -127,7 +127,7 @@ type Role {
} }
type Rating { type Rating {
createdBy: String! createdBy: Int!
value: Int! value: Int!
} }
@ -178,25 +178,24 @@ type Message {
# is publication # is publication
type Shout { type Shout {
org_id: Int!
slug: String! slug: String!
authors: [Int!]! authors: [Int!]!
body: String!
org_id: Int
cover: String cover: String
layout: String layout: String
body: String!
createdAt: DateTime! createdAt: DateTime!
updatedAt: DateTime updatedAt: DateTime!
deletedAt: DateTime deletedAt: DateTime
deletedBy: Int deletedBy: Int
rating: Int rating: Int
ratigns: [Rating] ratigns: [Rating]
published: Boolean published: Boolean!
publishedAt: DateTime # if there is no published field - it is not published publishedAt: DateTime # if there is no published field - it is not published
replyTo: String # another shout replyTo: String # another shout
tags: [String] # actual values tags: [String] # actual values
topics: [String] # topic-slugs, order has matter topics: [String] # topic-slugs, order has matter
title: String title: String
subtitle: String
versionOf: String versionOf: String
visibleForRoles: [String] # role ids are strings visibleForRoles: [String] # role ids are strings
visibleForUsers: [Int] visibleForUsers: [Int]
@ -215,6 +214,7 @@ type Topic {
# TODO: resolvers to add/remove topics from publication # TODO: resolvers to add/remove topics from publication
type Proposal { type Proposal {
body: String! body: String!
shout: Int! shout: Int!