From 81183f2c02a10f153b2e89da730779aeca804d5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lera=20Elvo=C3=A9?= Date: Wed, 19 Nov 2025 23:07:36 +0300 Subject: [PATCH] add markup metadata to sig; reparse sigs on init --- app/__init__.py | 37 +++++++++++++++++++++++++++---------- app/migrations.py | 5 +++++ app/routes/users.py | 11 ++++++++--- 3 files changed, 40 insertions(+), 13 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index d9bdc98..7529eb4 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -48,21 +48,38 @@ def create_deleted_user(): "permission": PermissionLevel.SYSTEM.value, }) -def reparse_posts(): +def reparse_babycode(): + print('Re-parsing babycode, this may take a while...') from .db import db post_histories = PostHistory.findall([ ('markup_language', '=', 'babycode'), ('format_version', 'IS NOT', BABYCODE_VERSION) ]) - if len(post_histories) == 0: - return - print('Re-parsing babycode, this may take a while...') - with db.transaction(): - for ph in post_histories: - ph.update({ - 'content': babycode_to_html(ph['original_markup']), - 'format_version': BABYCODE_VERSION, + if len(post_histories) > 0: + print('Re-parsing user posts...') + with db.transaction(): + for ph in post_histories: + ph.update({ + 'content': babycode_to_html(ph['original_markup']), + 'format_version': BABYCODE_VERSION, + }) + print('Re-parsing posts done.') + + users_with_sigs = Users.findall([ + ('signature_markup_language', '=', 'babycode'), + ('signature_format_version', 'IS NOT', BABYCODE_VERSION), + ('signature_original_markup', 'IS NOT', '') + ]) + if len(users_with_sigs) > 0: + print('Re-parsing user sigs...') + with db.transaction(): + for user in users_with_sigs: + user.update({ + 'signature_rendered': babycode_to_html(user['signature_original_markup']), + 'signature_format_version': BABYCODE_VERSION, }) + print(f'Re-parsed {len(users_with_sigs)} user sigs.') + print('Re-parsing done.') def create_app(): @@ -105,7 +122,7 @@ def create_app(): create_admin() create_deleted_user() - reparse_posts() + reparse_babycode() from app.routes.app import bp as app_bp from app.routes.topics import bp as topics_bp diff --git a/app/migrations.py b/app/migrations.py index d733e32..523ff1b 100644 --- a/app/migrations.py +++ b/app/migrations.py @@ -5,12 +5,17 @@ def migrate_old_avatars(): new_path = f"/static{avatar['file_path']}" db.execute('UPDATE avatars SET file_path = ? WHERE id = ?', new_path, avatar['id']) +def add_signature_format(): + db.execute('ALTER TABLE "users" ADD COLUMN "signature_markup_language" TEXT NOT NULL DEFAULT "babycode"') + db.execute('ALTER TABLE "users" ADD COLUMN "signature_format_version" INTEGER DEFAULT NULL') + # format: [str|tuple(str, any...)|callable] MIGRATIONS = [ migrate_old_avatars, 'DELETE FROM sessions', # delete old lua porom sessions 'ALTER TABLE "users" ADD COLUMN "invited_by" INTEGER REFERENCES users(id)', # invitation system 'ALTER TABLE "post_history" ADD COLUMN "format_version" INTEGER DEFAULT NULL', + add_signature_format, ] def run_migrations(): diff --git a/app/routes/users.py b/app/routes/users.py index 23cba5f..8ed04af 100644 --- a/app/routes/users.py +++ b/app/routes/users.py @@ -3,7 +3,7 @@ from flask import ( ) from functools import wraps from ..db import db -from ..lib.babycode import babycode_to_html +from ..lib.babycode import babycode_to_html, BABYCODE_VERSION from ..models import Users, Sessions, Subscriptions, Avatars, PasswordResetLinks, InviteKeys from ..constants import InfoboxKind, PermissionLevel from ..auth import digest, verify @@ -307,14 +307,19 @@ def settings_form(username): if topic_sort_by == 'activity' or topic_sort_by == 'thread': sort_by = session['sort_by'] = topic_sort_by status = request.form.get('status', default="")[:100] - original_sig = request.form.get('signature', default='') - rendered_sig = babycode_to_html(original_sig) + original_sig = request.form.get('signature', default='').strip() + if original_sig: + rendered_sig = babycode_to_html(original_sig) + else: + rendered_sig = '' session['subscribe_by_default'] = request.form.get('subscribe_by_default', default='off') == 'on' user.update({ 'status': status, 'signature_original_markup': original_sig, 'signature_rendered': rendered_sig, + 'signature_format_version': BABYCODE_VERSION, + 'signature_markup_language': 'babycode', }) flash('Settings updated.', InfoboxKind.INFO) return redirect(url_for('.settings', username=user.username))