hotfix: proposals, chatmembers, footnotes, etc

This commit is contained in:
2023-01-25 09:37:37 +03:00
11 changed files with 145 additions and 120 deletions

View File

@@ -47,18 +47,27 @@ def create_author_from_app(app):
if not user:
print('[migration] creating user...')
name = app.get('name')
slug = translit(name, "ru", reversed=True).lower()
slug = re.sub('[^0-9a-zA-Z]+', '-', slug)
# check if nameslug is used
user = session.query(User).where(User.slug == slug).first()
# get slug from email
if user:
slug = app['email'].split('@')[0]
user = session.query(User).where(User.slug == slug).first()
# one more try
if user:
slug += '-author'
user = session.query(User).where(User.slug == slug).first()
if name:
slug = translit(name, "ru", reversed=True).lower()
slug = re.sub('[^0-9a-zA-Z]+', '-', slug)
# check if slug is used
if slug:
user = session.query(User).where(User.slug == slug).first()
# get slug from email
if user:
slug = app['email'].split('@')[0]
user = session.query(User).where(User.slug == slug).first()
# one more try
if user:
slug += '-author'
user = session.query(User).where(User.slug == slug).first()
else:
print(f'[migration] author @{slug} is found by email')
else:
print(f'[migration] author @{slug} is found')
# create user with application data
if not user:
@@ -84,7 +93,7 @@ def create_author_from_app(app):
async def create_shout(shout_dict):
s = Shout.create(**shout_dict)
author = shout_dict['authors'][0]
author = s.authors[0]
with local_session() as session:
srf = session.query(ShoutReactionsFollower).where(
ShoutReactionsFollower.shout == s.id
@@ -109,8 +118,9 @@ async def get_user(entry, storage):
userdata = anondict
# cleanup slug
slug = userdata.get("slug", "")
slug = re.sub('[^0-9a-zA-Z]+', '-', slug)
userdata["slug"] = slug
if slug:
slug = re.sub('[^0-9a-zA-Z]+', '-', slug)
userdata["slug"] = slug
user = await process_user(userdata, storage, user_oid)
return user, user_oid

View File

@@ -1,31 +1,42 @@
from base.orm import local_session
from migration.extract import extract_md
from migration.html2text import html2text
from orm.remark import Remark
from orm.reaction import Reaction, ReactionKind
def migrate(entry, storage):
post_oid = entry['contentItem']
print(post_oid)
shout_dict = storage['shouts']['by_oid'].get(post_oid)
remark = {
"shout": shout_dict['id'],
"body": extract_md(
html2text(entry['body']),
entry['_id']
),
"desc": extract_md(
html2text(
entry['textAfter'] or '' + \
entry['textBefore'] or '' + \
entry['textSelected'] or ''
if shout_dict:
print(shout_dict['body'])
remark = {
"shout": shout_dict['id'],
"body": extract_md(
html2text(entry['body']),
shout_dict
),
entry["_id"]
)
}
"kind": ReactionKind.REMARK
}
with local_session() as session:
rmrk = Remark.create(**remark)
session.commit()
del rmrk["_sa_instance_state"]
return rmrk
if entry.get('textBefore'):
remark['range'] = str(
shout_dict['body']
.index(
entry['textBefore'] or ''
)
) + ':' + str(
shout_dict['body']
.index(
entry['textAfter'] or ''
) + len(
entry['textAfter'] or ''
)
)
with local_session() as session:
rmrk = Reaction.create(**remark)
session.commit()
del rmrk["_sa_instance_state"]
return rmrk
return

View File

@@ -10,7 +10,7 @@ def migrate(entry):
"slug": entry["slug"],
"oid": entry["_id"],
"title": entry["title"].replace(" ", " "),
"body": extract_md(html2text(body_orig), entry["_id"])
"body": extract_md(html2text(body_orig))
}
with local_session() as session: