followers-migrated
This commit is contained in:
@@ -4,10 +4,11 @@ from dateutil.parser import parse as date_parse
|
||||
|
||||
from base.orm import local_session
|
||||
from migration.html2text import html2text
|
||||
from orm import Reaction, User
|
||||
from orm.reaction import ReactionKind
|
||||
from orm.user import User
|
||||
from orm.topic import TopicFollower
|
||||
from orm.reaction import Reaction, ReactionKind
|
||||
from services.stat.reacted import ReactedStorage
|
||||
|
||||
from orm.shout import ShoutReactionsFollower
|
||||
ts = datetime.now()
|
||||
|
||||
|
||||
@@ -74,8 +75,42 @@ async def migrate(entry, storage):
|
||||
|
||||
# creating reaction from old comment
|
||||
reaction = Reaction.create(**reaction_dict)
|
||||
session.add(reaction)
|
||||
await ReactedStorage.react(reaction)
|
||||
|
||||
# creating shout's reactions following for reaction author
|
||||
following1 = session.query(
|
||||
ShoutReactionsFollower
|
||||
).where(
|
||||
ShoutReactionsFollower.follower == reaction_dict["createdBy"]
|
||||
).filter(
|
||||
ShoutReactionsFollower.shout == reaction.shout
|
||||
).first()
|
||||
if not following1:
|
||||
following1 = ShoutReactionsFollower.create(
|
||||
follower=reaction_dict["createdBy"],
|
||||
shout=reaction.shout,
|
||||
auto=True
|
||||
)
|
||||
session.add(following1)
|
||||
|
||||
# creating topics followings for reaction author
|
||||
for t in shout_dict["topics"]:
|
||||
tf = session.query(
|
||||
TopicFollower
|
||||
).where(
|
||||
TopicFollower.follower == reaction_dict["createdBy"]
|
||||
).filter(
|
||||
TopicFollower.topic == t
|
||||
).first()
|
||||
if not tf:
|
||||
topic_following = TopicFollower.create(
|
||||
follower=reaction_dict["createdBy"],
|
||||
topic=t,
|
||||
auto=True
|
||||
)
|
||||
session.add(topic_following)
|
||||
|
||||
reaction_dict["id"] = reaction.id
|
||||
for comment_rating_old in entry.get("ratings", []):
|
||||
rater = (
|
||||
@@ -83,18 +118,13 @@ async def migrate(entry, storage):
|
||||
.filter(User.oid == comment_rating_old["createdBy"])
|
||||
.first()
|
||||
)
|
||||
reactedBy = (
|
||||
rater
|
||||
if rater
|
||||
else session.query(User).filter(User.slug == "noname").first()
|
||||
)
|
||||
re_reaction_dict = {
|
||||
"shout": reaction_dict["shout"],
|
||||
"replyTo": reaction.id,
|
||||
"kind": ReactionKind.LIKE
|
||||
if comment_rating_old["value"] > 0
|
||||
else ReactionKind.DISLIKE,
|
||||
"createdBy": reactedBy.slug if reactedBy else "discours",
|
||||
"createdBy": rater.slug if rater else "discours",
|
||||
}
|
||||
cts = comment_rating_old.get("createdAt")
|
||||
if cts:
|
||||
@@ -102,11 +132,27 @@ async def migrate(entry, storage):
|
||||
try:
|
||||
# creating reaction from old rating
|
||||
rr = Reaction.create(**re_reaction_dict)
|
||||
following2 = session.query(
|
||||
ShoutReactionsFollower
|
||||
).where(
|
||||
ShoutReactionsFollower.follower == re_reaction_dict['createdBy']
|
||||
).filter(
|
||||
ShoutReactionsFollower.shout == rr.shout
|
||||
).first()
|
||||
if not following2:
|
||||
following2 = ShoutReactionsFollower.create(
|
||||
follower=re_reaction_dict['createdBy'],
|
||||
shout=rr.shout,
|
||||
auto=True
|
||||
)
|
||||
session.add(following2)
|
||||
session.add(rr)
|
||||
await ReactedStorage.react(rr)
|
||||
|
||||
except Exception as e:
|
||||
print("[migration] comment rating error: %r" % re_reaction_dict)
|
||||
raise e
|
||||
session.commit()
|
||||
else:
|
||||
print(
|
||||
"[migration] error: cannot find shout for comment %r"
|
||||
@@ -126,6 +172,15 @@ def migrate_2stage(rr, old_new_id):
|
||||
comment = session.query(Reaction).filter(Reaction.id == new_id).first()
|
||||
comment.replyTo = old_new_id.get(reply_oid)
|
||||
session.add(comment)
|
||||
|
||||
srf = session.query(ShoutReactionsFollower).where(
|
||||
ShoutReactionsFollower.shout == comment.shout
|
||||
).filter(
|
||||
ShoutReactionsFollower.follower == comment.createdBy
|
||||
).first()
|
||||
if not srf:
|
||||
srf = ShoutReactionsFollower.create(shout=comment.shout, follower=comment.createdBy, auto=True)
|
||||
session.add(srf)
|
||||
session.commit()
|
||||
if not rr["body"]:
|
||||
raise Exception(rr)
|
||||
|
@@ -8,7 +8,7 @@ from base.orm import local_session
|
||||
from migration.extract import prepare_html_body
|
||||
from orm.community import Community
|
||||
from orm.reaction import Reaction, ReactionKind
|
||||
from orm.shout import Shout, ShoutTopic, User
|
||||
from orm.shout import Shout, ShoutTopic, User, ShoutReactionsFollower
|
||||
from orm.topic import TopicFollower
|
||||
from services.stat.reacted import ReactedStorage
|
||||
from services.stat.viewed import ViewedByDay
|
||||
@@ -115,12 +115,8 @@ async def migrate(entry, storage):
|
||||
category = entry["category"]
|
||||
mainTopic = topics_by_oid.get(category)
|
||||
if mainTopic:
|
||||
r["mainTopic"] = storage["replacements"].get(
|
||||
mainTopic["slug"], mainTopic["slug"]
|
||||
)
|
||||
topic_oids = [
|
||||
category,
|
||||
]
|
||||
r["mainTopic"] = storage["replacements"].get(mainTopic["slug"], mainTopic["slug"])
|
||||
topic_oids = [category, ]
|
||||
topic_oids.extend(entry.get("tags", []))
|
||||
for oid in topic_oids:
|
||||
if oid in storage["topics"]["by_oid"]:
|
||||
@@ -137,7 +133,6 @@ async def migrate(entry, storage):
|
||||
r["body"] = prepare_html_body(entry)
|
||||
|
||||
# save shout to db
|
||||
|
||||
s = object()
|
||||
shout_dict = r.copy()
|
||||
user = None
|
||||
@@ -167,18 +162,29 @@ async def migrate(entry, storage):
|
||||
storage["users"]["by_oid"][entry["_id"]] = userdata
|
||||
if not user:
|
||||
raise Exception("could not get a user")
|
||||
shout_dict["authors"] = [
|
||||
user,
|
||||
]
|
||||
|
||||
# TODO: subscribe shout user on shout topics
|
||||
shout_dict["authors"] = [user, ]
|
||||
try:
|
||||
s = Shout.create(**shout_dict)
|
||||
with local_session() as session:
|
||||
topics = session.query(ShoutTopic).where(ShoutTopic.shout == s.slug).all()
|
||||
for tpc in topics:
|
||||
TopicFollower.create(topic=tpc.slug, follower=userslug)
|
||||
tf = session.query(TopicFollower).where(TopicFollower.follower ==
|
||||
userslug).filter(TopicFollower.topic ==
|
||||
tpc.slug).first()
|
||||
if not tf:
|
||||
tf = TopicFollower.create(topic=tpc.slug, follower=userslug, auto=True)
|
||||
session.add(tf)
|
||||
await TopicStorage.update_topic(tpc.slug)
|
||||
|
||||
srf = session.query(ShoutReactionsFollower).where(
|
||||
ShoutReactionsFollower.shout == s.slug
|
||||
).filter(
|
||||
ShoutReactionsFollower.follower == userslug
|
||||
).first()
|
||||
if not srf:
|
||||
srf = ShoutReactionsFollower.create(shout=s.slug, follower=userslug, auto=True)
|
||||
session.add(srf)
|
||||
session.commit()
|
||||
except IntegrityError as e:
|
||||
with local_session() as session:
|
||||
s = session.query(Shout).filter(Shout.slug == shout_dict["slug"]).first()
|
||||
|
@@ -3,7 +3,7 @@ from sqlalchemy.exc import IntegrityError
|
||||
|
||||
from base.orm import local_session
|
||||
from migration.html2text import html2text
|
||||
from orm import User, UserRating
|
||||
from orm.user import User, UserRating, AuthorFollower
|
||||
|
||||
|
||||
def migrate(entry):
|
||||
@@ -118,6 +118,13 @@ def migrate_2stage(entry, id_map):
|
||||
with local_session() as session:
|
||||
try:
|
||||
user_rating = UserRating.create(**user_rating_dict)
|
||||
if user_rating_dict['value'] > 0:
|
||||
af = AuthorFollower.create(
|
||||
author=user_rating_dict['user'],
|
||||
follower=user_rating_dict['rater'],
|
||||
auto=True
|
||||
)
|
||||
session.add(af)
|
||||
session.add(user_rating)
|
||||
session.commit()
|
||||
except IntegrityError:
|
||||
|
Reference in New Issue
Block a user