add markup metadata to sig; reparse sigs on init

This commit is contained in:
2025-11-19 23:07:36 +03:00
parent 86cd55c25b
commit 81183f2c02
3 changed files with 40 additions and 13 deletions

View File

@@ -48,21 +48,38 @@ def create_deleted_user():
"permission": PermissionLevel.SYSTEM.value, "permission": PermissionLevel.SYSTEM.value,
}) })
def reparse_posts(): def reparse_babycode():
print('Re-parsing babycode, this may take a while...')
from .db import db from .db import db
post_histories = PostHistory.findall([ post_histories = PostHistory.findall([
('markup_language', '=', 'babycode'), ('markup_language', '=', 'babycode'),
('format_version', 'IS NOT', BABYCODE_VERSION) ('format_version', 'IS NOT', BABYCODE_VERSION)
]) ])
if len(post_histories) == 0: if len(post_histories) > 0:
return print('Re-parsing user posts...')
print('Re-parsing babycode, this may take a while...')
with db.transaction(): with db.transaction():
for ph in post_histories: for ph in post_histories:
ph.update({ ph.update({
'content': babycode_to_html(ph['original_markup']), 'content': babycode_to_html(ph['original_markup']),
'format_version': BABYCODE_VERSION, '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.') print('Re-parsing done.')
def create_app(): def create_app():
@@ -105,7 +122,7 @@ def create_app():
create_admin() create_admin()
create_deleted_user() create_deleted_user()
reparse_posts() reparse_babycode()
from app.routes.app import bp as app_bp from app.routes.app import bp as app_bp
from app.routes.topics import bp as topics_bp from app.routes.topics import bp as topics_bp

View File

@@ -5,12 +5,17 @@ def migrate_old_avatars():
new_path = f"/static{avatar['file_path']}" new_path = f"/static{avatar['file_path']}"
db.execute('UPDATE avatars SET file_path = ? WHERE id = ?', new_path, avatar['id']) 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] # format: [str|tuple(str, any...)|callable]
MIGRATIONS = [ MIGRATIONS = [
migrate_old_avatars, migrate_old_avatars,
'DELETE FROM sessions', # delete old lua porom sessions 'DELETE FROM sessions', # delete old lua porom sessions
'ALTER TABLE "users" ADD COLUMN "invited_by" INTEGER REFERENCES users(id)', # invitation system 'ALTER TABLE "users" ADD COLUMN "invited_by" INTEGER REFERENCES users(id)', # invitation system
'ALTER TABLE "post_history" ADD COLUMN "format_version" INTEGER DEFAULT NULL', 'ALTER TABLE "post_history" ADD COLUMN "format_version" INTEGER DEFAULT NULL',
add_signature_format,
] ]
def run_migrations(): def run_migrations():

View File

@@ -3,7 +3,7 @@ from flask import (
) )
from functools import wraps from functools import wraps
from ..db import db 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 ..models import Users, Sessions, Subscriptions, Avatars, PasswordResetLinks, InviteKeys
from ..constants import InfoboxKind, PermissionLevel from ..constants import InfoboxKind, PermissionLevel
from ..auth import digest, verify from ..auth import digest, verify
@@ -307,14 +307,19 @@ def settings_form(username):
if topic_sort_by == 'activity' or topic_sort_by == 'thread': if topic_sort_by == 'activity' or topic_sort_by == 'thread':
sort_by = session['sort_by'] = topic_sort_by sort_by = session['sort_by'] = topic_sort_by
status = request.form.get('status', default="")[:100] status = request.form.get('status', default="")[:100]
original_sig = request.form.get('signature', default='') original_sig = request.form.get('signature', default='').strip()
if original_sig:
rendered_sig = babycode_to_html(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' session['subscribe_by_default'] = request.form.get('subscribe_by_default', default='off') == 'on'
user.update({ user.update({
'status': status, 'status': status,
'signature_original_markup': original_sig, 'signature_original_markup': original_sig,
'signature_rendered': rendered_sig, 'signature_rendered': rendered_sig,
'signature_format_version': BABYCODE_VERSION,
'signature_markup_language': 'babycode',
}) })
flash('Settings updated.', InfoboxKind.INFO) flash('Settings updated.', InfoboxKind.INFO)
return redirect(url_for('.settings', username=user.username)) return redirect(url_for('.settings', username=user.username))