From 3c51d1d694c736fae788f783ded2d69ca5511511 Mon Sep 17 00:00:00 2001 From: Eva Date: Fri, 4 Apr 2025 08:49:35 +0200 Subject: [PATCH] server/posts: allow anonymous users to feature posts --- server/szurubooru/func/posts.py | 2 ++ server/szurubooru/func/users.py | 6 +++-- ...c940b4e78_make_featuring_users_nullable.py | 26 +++++++++++++++++++ server/szurubooru/model/post.py | 4 +-- 4 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 server/szurubooru/migrations/versions/5b5c940b4e78_make_featuring_users_nullable.py diff --git a/server/szurubooru/func/posts.py b/server/szurubooru/func/posts.py index be2259cf..fdaf9a91 100644 --- a/server/szurubooru/func/posts.py +++ b/server/szurubooru/func/posts.py @@ -794,6 +794,8 @@ def update_post_flags(post: model.Post, flags: List[str]) -> None: def feature_post(post: model.Post, user: Optional[model.User]) -> None: assert post + if user and not user.name: + user = None post_feature = model.PostFeature() post_feature.time = datetime.utcnow() post_feature.post = post diff --git a/server/szurubooru/func/users.py b/server/szurubooru/func/users.py index 5cbe3cc0..1c9ba116 100644 --- a/server/szurubooru/func/users.py +++ b/server/szurubooru/func/users.py @@ -43,12 +43,14 @@ def get_avatar_path(user_name: str) -> str: def get_avatar_url(user: model.User) -> str: assert user if user.avatar_style == user.AVATAR_GRAVATAR: - assert user.email or user.name + if not user.email and not user.name: + return "" return "https://gravatar.com/avatar/%s?d=retro&s=%d" % ( util.get_md5((user.email or user.name).lower()), config.config["thumbnails"]["avatar_width"], ) - assert user.name + if not user.name: + return "" return "%s/avatars/%s.png" % ( config.config["data_url"].rstrip("/"), user.name.lower(), diff --git a/server/szurubooru/migrations/versions/5b5c940b4e78_make_featuring_users_nullable.py b/server/szurubooru/migrations/versions/5b5c940b4e78_make_featuring_users_nullable.py new file mode 100644 index 00000000..2312c7dc --- /dev/null +++ b/server/szurubooru/migrations/versions/5b5c940b4e78_make_featuring_users_nullable.py @@ -0,0 +1,26 @@ +''' +make featuring users nullable + +Revision ID: 5b5c940b4e78 +Created at: 2025-04-04 08:24:39.000603 +''' + +import sqlalchemy as sa +from alembic import op + +revision = '5b5c940b4e78' +down_revision = 'adcd63ff76a2' +branch_labels = None +depends_on = None + +def upgrade(): + op.alter_column( + "post_feature", "user_id", nullable=True, existing_nullable=False + ) + pass + +def downgrade(): + op.alter_column( + "post_feature", "user_id", nullable=False, existing_nullable=True + ) + pass diff --git a/server/szurubooru/model/post.py b/server/szurubooru/model/post.py index 49e748dc..eb394167 100644 --- a/server/szurubooru/model/post.py +++ b/server/szurubooru/model/post.py @@ -24,8 +24,8 @@ class PostFeature(Base): user_id = sa.Column( "user_id", sa.Integer, - sa.ForeignKey("user.id"), - nullable=False, + sa.ForeignKey("user.id", ondelete="SET NULL"), + nullable=True, index=True, ) time = sa.Column("time", sa.DateTime, nullable=False)