From e51e6c5bfc377f973deb0af563791c4be621bd59 Mon Sep 17 00:00:00 2001 From: tonyrewin Date: Tue, 17 Jan 2023 09:19:12 +0300 Subject: [PATCH] proto --- migration/__init__.py | 17 +++++++++++++ migration/tables/remarks.py | 32 +++++++++++++++++++++++++ orm/remark.py | 15 ++++++++++++ resolvers/zine/remark.py | 48 +++++++++++++++++++++++++++++++++++++ 4 files changed, 112 insertions(+) create mode 100644 migration/tables/remarks.py create mode 100644 orm/remark.py create mode 100644 resolvers/zine/remark.py diff --git a/migration/__init__.py b/migration/__init__.py index a998ad07..0737f6c5 100644 --- a/migration/__init__.py +++ b/migration/__init__.py @@ -11,6 +11,7 @@ from migration.tables.content_items import get_shout_slug from migration.tables.content_items import migrate as migrateShout from migration.tables.topics import migrate as migrateTopic from migration.tables.users import migrate as migrateUser +from migration.tables.remarks import migrate as migrateRemark from migration.tables.users import migrate_2stage as migrateUser_2stage from orm.reaction import Reaction from orm import init_tables @@ -135,6 +136,15 @@ async def shouts_handle(storage, args): print("[migration] " + str(anonymous_author) + " authored by @anonymous") +async def remarks_handle(storage): + print("[migration] comments") + c = 0 + for entry_remark in storage["remarks"]["data"]: + remark = await migrateRemark(entry_remark) + c += 1 + print("[migration] " + str(c) + " remarks migrated") + + async def comments_handle(storage): print("[migration] comments") id_map = {} @@ -169,6 +179,8 @@ async def all_handle(storage, args): await users_handle(storage) await topics_handle(storage) print("[migration] users and topics are migrated") + await remarks_handle(storage) + print("[migration] remarks are migrated") await shouts_handle(storage, args) print("[migration] migrating comments") await comments_handle(storage) @@ -210,6 +222,11 @@ def data_load(): content_data = json.loads(open("migration/data/content_items.json").read()) storage["shouts"]["data"] = content_data print("[migration.load] " + str(len(content_data)) + " content items ") + + remarks_data = json.loads(open("migration/data/remarks.json").read()) + storage["remarks"]["data"] = remarks_data + print("[migration.load] " + str(len(remarks_data)) + " remarks data ") + # fill out storage for x in users_data: storage["users"]["by_oid"][x["_id"]] = x diff --git a/migration/tables/remarks.py b/migration/tables/remarks.py new file mode 100644 index 00000000..1b6b6350 --- /dev/null +++ b/migration/tables/remarks.py @@ -0,0 +1,32 @@ +from base.orm import local_session +from migration.extract import extract_md +from migration.html2text import html2text +from orm.remark import Remark + + +def migrate(entry): + print(entry) + break + remark = { + "slug": entry["slug"], + "oid": entry["_id"], + "body": extract_md(html2text( + entry['body'] + entry['textAfter'] or '' + \ + entry['textBefore'] or '' + \ + entry['textSelected'] or '' + ), entry["_id"]) + } + + with local_session() as session: + slug = remark["slug"] + rmrk = session.query(Remark).filter(Remark.slug == slug).first() or Remark.create( + **tooltip + ) + if not rmrk: + raise Exception("no rmrk!") + if rmrk: + Remark.update(rmrk, remark) + session.commit() + rt = tt.__dict__.copy() + del rt["_sa_instance_state"] + return rt diff --git a/orm/remark.py b/orm/remark.py new file mode 100644 index 00000000..89a6494a --- /dev/null +++ b/orm/remark.py @@ -0,0 +1,15 @@ +from datetime import datetime +from enum import Enum as Enumeration + +from sqlalchemy import Column, DateTime, Enum, ForeignKey, String + +from base.orm import Base + + +class Remark(Base): + + tablename = "remark" + + slug = Column(String, unique=True, nullable=False) + body = Column(String, nullable=False) + shout = Column(ForeignKey("shout.id"), nullable=True, index=True, comment="Shout") diff --git a/resolvers/zine/remark.py b/resolvers/zine/remark.py new file mode 100644 index 00000000..6f5f9d48 --- /dev/null +++ b/resolvers/zine/remark.py @@ -0,0 +1,48 @@ + +from datetime import datetime, timedelta, timezone +from sqlalchemy.orm import joinedload, aliased +from sqlalchemy.sql.expression import desc, asc, select, func +from base.orm import local_session +from base.resolvers import query, mutation +from base.exceptions import ObjectNotExist +from orm.remark import Remark + + +@mutation.field("createRemark") +@login_required +async def create_remark(_, info, slug, body): + auth = info.context["request"].auth + user_id = auth.user_id + with local_session() as session: + tt = Remark.create(slug=slug, body=body) + session.commit() + return + +@mutation.field("updateRemark") +@login_required +async def update_remark(_, info, slug, body = ''): + auth = info.context["request"].auth + user_id = auth.user_id + with local_session() as session: + rmrk = session.query(Remark).where(Remark.slug == slug).one() + if body: + tt.body = body + session.add(rmrk) + session.commit() + return + +@mutation.field("deleteRemark") +@login_required +async def delete_remark(_, info, slug): + auth = info.context["request"].auth + user_id = auth.user_id + with local_session() as session: + rmrk = session.query(Remark).where(Remark.slug == slug).one() + rmrk.remove() + session.commit() + return + +@query.field("loadRemark") +@login_required +async def load_remark(_, info, slug): + pass