core/migration/tables/comments.py

90 lines
3.2 KiB
Python
Raw Normal View History

2021-10-12 19:38:12 +00:00
from dateutil.parser import parse as date_parse
2021-10-09 10:08:27 +00:00
import json
2021-10-13 17:46:30 +00:00
import datetime
2021-10-09 10:08:27 +00:00
from os.path import abspath
2021-10-12 19:38:12 +00:00
from orm import Shout, Comment, CommentRating, User
2021-10-09 10:08:27 +00:00
from orm.base import local_session
from migration.html2text import html2text
2021-08-20 09:27:19 +00:00
def migrate(entry):
2021-08-23 08:44:46 +00:00
'''
2021-10-09 10:08:27 +00:00
{
"_id": "hdtwS8fSyFLxXCgSC",
"body": "<p>",
"contentItem": "mnK8KsJHPRi8DrybQ",
"createdBy": "bMFPuyNg6qAD2mhXe",
"thread": "01/",
"createdAt": "2016-04-19 04:33:53+00:00",
"ratings": [
{ "createdBy": "AqmRukvRiExNpAe8C", "value": 1 },
{ "createdBy": "YdE76Wth3yqymKEu5", "value": 1 }
],
"rating": 2,
"updatedAt": "2020-05-27 19:22:57.091000+00:00",
"updatedBy": "0"
}
->
2021-09-11 08:20:23 +00:00
type Comment {
id: Int!
2021-08-20 09:27:19 +00:00
author: Int!
body: String!
2021-09-11 08:20:23 +00:00
replyTo: Int!
2021-08-20 09:27:19 +00:00
createdAt: DateTime!
2021-09-11 08:20:23 +00:00
updatedAt: DateTime
shout: Int!
2021-08-20 09:27:19 +00:00
deletedAt: DateTime
deletedBy: Int
2021-11-22 06:38:14 +00:00
ratings: [CommentRating]
2021-09-11 08:20:23 +00:00
views: Int
old_id: String
2021-10-13 17:46:30 +00:00
old_thread: String
2021-08-20 09:27:19 +00:00
}
2021-08-23 08:44:46 +00:00
'''
2021-10-09 10:08:27 +00:00
with local_session() as session:
2021-10-13 17:46:30 +00:00
shout = session.query(Shout).filter(Shout.old_id == entry['_id']).first()
2021-10-14 05:59:42 +00:00
if not shout: shout = session.query(Shout).first()
2021-12-05 20:23:48 +00:00
author = session.query(User).filter(User.old_id == entry['_id']).first() # FIXME
2021-10-12 19:38:12 +00:00
comment_dict = {
2021-10-09 10:08:27 +00:00
'old_id': entry['_id'],
2021-10-13 17:46:30 +00:00
'author': author.id if author else 0,
2021-10-12 19:38:12 +00:00
'createdAt': date_parse(entry['createdAt']),
2021-10-09 10:08:27 +00:00
'body': html2text(entry['body']),
'shout': shout.id
2021-10-09 10:08:27 +00:00
}
2021-11-23 14:17:19 +00:00
#TODO save as CommentRating
#if 'rating' in entry:
# comment_dict['rating'] = entry['rating']
2021-10-13 17:46:30 +00:00
if entry.get('deleted'):
comment_dict['deletedAt'] = date_parse(entry['updatedAt'])
comment_dict['deletedBy'] = str(entry['updatedBy'])
if entry.get('updatedAt'):
comment_dict['updatedAt'] = date_parse(entry['updatedAt'])
# comment_dict['updatedBy'] = str(entry.get('updatedBy', 0)) invalid keyword for Comment
2021-10-12 19:38:12 +00:00
if 'thread' in entry:
comment_dict['old_thread'] = entry['thread']
# print(comment_dict)
2021-10-12 19:38:12 +00:00
comment = Comment.create(**comment_dict)
comment_dict['id'] = comment.id
comment_dict['ratings'] = []
# print(comment)
2021-10-12 19:38:12 +00:00
for comment_rating_old in entry.get('ratings',[]):
rater = session.query(User).filter(User.old_id == comment_rating_old['createdBy']).first()
if rater and comment:
comment_rating_dict = {
'value': comment_rating_old['value'],
'createdBy': rater.id,
'comment_id': comment.id
}
cts = comment_rating_old.get('createdAt')
if cts: comment_rating_dict['createdAt'] = date_parse(cts)
try:
comment_rating = CommentRating.create(**comment_rating_dict)
# comment_rating_dict['id'] = comment_rating.id
comment_dict['ratings'].append(comment_rating_dict)
except Exception as e:
print(comment_rating_dict)
raise e
return comment_dict