migrate user rating; remove unused user column
This commit is contained in:
parent
1c38d51113
commit
8092d8a262
|
@ -5,6 +5,7 @@ import base64
|
||||||
import re
|
import re
|
||||||
import frontmatter
|
import frontmatter
|
||||||
from migration.tables.users import migrate as migrateUser
|
from migration.tables.users import migrate as migrateUser
|
||||||
|
from migration.tables.users import migrate_2stage as migrateUser_2stage
|
||||||
from migration.tables.content_items import get_metadata, migrate as migrateShout
|
from migration.tables.content_items import get_metadata, migrate as migrateShout
|
||||||
from migration.tables.content_item_categories import migrate as migrateCategory
|
from migration.tables.content_item_categories import migrate as migrateCategory
|
||||||
from migration.tables.tags import migrate as migrateTag
|
from migration.tables.tags import migrate as migrateTag
|
||||||
|
@ -48,6 +49,7 @@ def users(users_by_oid, users_by_slug, users_data):
|
||||||
if len(sys.argv) > 2: limit = int(sys.argv[2])
|
if len(sys.argv) > 2: limit = int(sys.argv[2])
|
||||||
print('migrating %d users...' % limit)
|
print('migrating %d users...' % limit)
|
||||||
counter = 0
|
counter = 0
|
||||||
|
id_map = {}
|
||||||
for entry in users_data:
|
for entry in users_data:
|
||||||
oid = entry['_id']
|
oid = entry['_id']
|
||||||
user = migrateUser(entry)
|
user = migrateUser(entry)
|
||||||
|
@ -59,8 +61,10 @@ def users(users_by_oid, users_by_slug, users_data):
|
||||||
del user['username']
|
del user['username']
|
||||||
del user['email']
|
del user['email']
|
||||||
users_by_slug[user['slug']] = user # public
|
users_by_slug[user['slug']] = user # public
|
||||||
|
id_map[user['old_id']] = user['id']
|
||||||
counter += 1
|
counter += 1
|
||||||
export_authors = dict(sorted(users_by_slug.items(), key=lambda item: item[1]['rating'])[-10:])
|
for entry in users_data:
|
||||||
|
migrateUser_2stage(entry, id_map)
|
||||||
try:
|
try:
|
||||||
open('migration/data/users.old_id.json', 'w').write(json.dumps(users_by_oid, cls=DateTimeEncoder)) # NOTE: by old_id
|
open('migration/data/users.old_id.json', 'w').write(json.dumps(users_by_oid, cls=DateTimeEncoder)) # NOTE: by old_id
|
||||||
open('migration/data/users.slug.json', 'w').write(json.dumps(users_by_slug, cls=DateTimeEncoder)) # NOTE: by slug
|
open('migration/data/users.slug.json', 'w').write(json.dumps(users_by_slug, cls=DateTimeEncoder)) # NOTE: by slug
|
||||||
|
|
|
@ -4,9 +4,7 @@ from dateutil.parser import parse
|
||||||
from migration.html2text import html2text
|
from migration.html2text import html2text
|
||||||
from orm.base import local_session
|
from orm.base import local_session
|
||||||
|
|
||||||
counter = 0
|
def migrate(entry):
|
||||||
|
|
||||||
def migrate(entry, limit=668):
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
type User {
|
type User {
|
||||||
|
@ -21,7 +19,6 @@ def migrate(entry, limit=668):
|
||||||
emailConfirmed: Boolean # should contain all emails too
|
emailConfirmed: Boolean # should contain all emails too
|
||||||
id: Int!
|
id: Int!
|
||||||
muted: Boolean
|
muted: Boolean
|
||||||
rating: Int
|
|
||||||
roles: [Role]
|
roles: [Role]
|
||||||
updatedAt: DateTime
|
updatedAt: DateTime
|
||||||
wasOnlineAt: DateTime
|
wasOnlineAt: DateTime
|
||||||
|
@ -40,7 +37,6 @@ def migrate(entry, limit=668):
|
||||||
res['wasOnlineAt'] = parse(entry.get('loggedInAt', entry['createdAt']))
|
res['wasOnlineAt'] = parse(entry.get('loggedInAt', entry['createdAt']))
|
||||||
res['emailConfirmed'] = entry['emails'][0]['verified']
|
res['emailConfirmed'] = entry['emails'][0]['verified']
|
||||||
res['createdAt'] = parse(entry['createdAt'])
|
res['createdAt'] = parse(entry['createdAt'])
|
||||||
res['rating'] = entry['rating'] # number
|
|
||||||
res['roles'] = [] # entry['roles'] # roles by community
|
res['roles'] = [] # entry['roles'] # roles by community
|
||||||
res['ratings'] = [] # entry['ratings']
|
res['ratings'] = [] # entry['ratings']
|
||||||
res['notifications'] = []
|
res['notifications'] = []
|
||||||
|
@ -89,22 +85,23 @@ def migrate(entry, limit=668):
|
||||||
old = res['old_id']
|
old = res['old_id']
|
||||||
user = User.create(**res.copy())
|
user = User.create(**res.copy())
|
||||||
res['id'] = user.id
|
res['id'] = user.id
|
||||||
res['ratings'] = []
|
|
||||||
for user_rating_old in entry.get('ratings',[]):
|
return res
|
||||||
with local_session() as session:
|
|
||||||
rater = session.query(User).filter(old == user_rating_old['createdBy']).first()
|
def migrate_2stage(entry, id_map):
|
||||||
if rater:
|
for rating_entry in entry.get('ratings',[]):
|
||||||
|
rater_old_id = rating_entry['createdBy']
|
||||||
|
rater_id = id_map.get(rater_old_id)
|
||||||
|
if not rater_id:
|
||||||
|
continue
|
||||||
|
old_id = entry['_id']
|
||||||
user_rating_dict = {
|
user_rating_dict = {
|
||||||
'value': user_rating_old['value'],
|
'value': rating_entry['value'],
|
||||||
'rater_id': rater.id,
|
'rater_id': rater_id,
|
||||||
'user_id': user.id
|
'user_id': id_map.get(old_id)
|
||||||
}
|
}
|
||||||
cts = user_rating_old.get('createdAt')
|
with local_session() as session:
|
||||||
if cts: user_rating_dict['createdAt'] = date_parse(cts)
|
|
||||||
try:
|
try:
|
||||||
user_rating = UserRating.create(**user_rating_dict)
|
user_rating = UserRating.create(**user_rating_dict)
|
||||||
res['ratings'].append(user_rating_dict)
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(comment_rating_dict)
|
print(e)
|
||||||
raise e
|
|
||||||
return res
|
|
||||||
|
|
|
@ -49,12 +49,12 @@ class User(Base):
|
||||||
bio: str = Column(String, nullable=True, comment="Bio")
|
bio: str = Column(String, nullable=True, comment="Bio")
|
||||||
userpic: str = Column(String, nullable=True, comment="Userpic")
|
userpic: str = Column(String, nullable=True, comment="Userpic")
|
||||||
name: str = Column(String, nullable=True, comment="Display name")
|
name: str = Column(String, nullable=True, comment="Display name")
|
||||||
rating: int = Column(Integer, nullable=True, comment="Rating")
|
|
||||||
slug: str = Column(String, unique=True, comment="User'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, default = datetime.now, comment="Created at")
|
createdAt: DateTime = Column(DateTime, nullable=False, default = datetime.now, comment="Created at")
|
||||||
wasOnlineAt: DateTime = Column(DateTime, nullable=False, default = datetime.now, comment="Was online at")
|
wasOnlineAt: DateTime = Column(DateTime, nullable=False, default = datetime.now, comment="Was online at")
|
||||||
|
deletedAt: DateTime = Column(DateTime, nullable=True, comment="Deleted at")
|
||||||
links: JSONType = Column(JSONType, nullable=True, comment="Links")
|
links: JSONType = Column(JSONType, nullable=True, comment="Links")
|
||||||
oauth: str = Column(String, nullable=True)
|
oauth: str = Column(String, nullable=True)
|
||||||
notifications = relationship(lambda: UserNotifications)
|
notifications = relationship(lambda: UserNotifications)
|
||||||
|
|
|
@ -8,7 +8,7 @@ from auth.authorize import Authorize
|
||||||
from auth.identity import Identity
|
from auth.identity import Identity
|
||||||
from auth.password import Password
|
from auth.password import Password
|
||||||
from auth.email import send_confirm_email, send_auth_email
|
from auth.email import send_confirm_email, send_auth_email
|
||||||
from orm import User
|
from orm import User, UserStorage
|
||||||
from orm.base import local_session
|
from orm.base import local_session
|
||||||
from resolvers.base import mutation, query
|
from resolvers.base import mutation, query
|
||||||
from exceptions import InvalidPassword
|
from exceptions import InvalidPassword
|
||||||
|
@ -40,13 +40,13 @@ async def register(*_, email: str, password: str = ""):
|
||||||
if not password:
|
if not password:
|
||||||
user = User.create(**user_dict)
|
user = User.create(**user_dict)
|
||||||
await send_confirm_email(user)
|
await send_confirm_email(user)
|
||||||
UserStorage.add_user(user)
|
await UserStorage.add_user(user)
|
||||||
return { "user": user }
|
return { "user": user }
|
||||||
|
|
||||||
user_dict["password"] = Password.encode(password)
|
user_dict["password"] = Password.encode(password)
|
||||||
user = User.create(**user_dict)
|
user = User.create(**user_dict)
|
||||||
token = await Authorize.authorize(user)
|
token = await Authorize.authorize(user)
|
||||||
UserStorage.add_user(user)
|
await UserStorage.add_user(user)
|
||||||
return {"user": user, "token": token }
|
return {"user": user, "token": token }
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user