Example #1
0
def serialize_post(post, authenticated_user):
    if not post:
        return None

    ret = {
        'id': post.post_id,
        'creationTime': post.creation_time,
        'lastEditTime': post.last_edit_time,
        'safety': SAFETY_MAP[post.safety],
        'source': post.source,
        'type': TYPE_MAP[post.type],
        'checksum': post.checksum,
        'fileSize': post.file_size,
        'canvasWidth': post.canvas_width,
        'canvasHeight': post.canvas_height,
        'contentUrl': get_post_content_url(post),
        'thumbnailUrl': get_post_thumbnail_url(post),
        'flags': post.flags,
        'tags': [tag.first_name for tag in post.tags],
        'relations': [rel.post_id for rel in post.relations],
        'notes': sorted(serialize_note(note) for note in post.notes),
        'user': users.serialize_user(post.user, authenticated_user),
        'score': post.score,
        'featureCount': post.feature_count,
        'lastFeatureTime': post.last_feature_time,
        'favoritedBy': [users.serialize_user(rel.user, authenticated_user) \
            for rel in post.favorited_by],
        'hasCustomThumbnail': files.has(get_post_thumbnail_backup_path(post)),
    }

    if authenticated_user:
        ret['ownScore'] = scores.get_score(post, authenticated_user)

    return ret
Example #2
0
def _serialize(ctx: rest.Context, user: model.User,
               **kwargs: Any) -> rest.Response:
    return users.serialize_user(
        user,
        ctx.user,
        options=serialization.get_serialization_options(ctx),
        **kwargs)
Example #3
0
def test_serialize_user(user_factory):
    with patch("szurubooru.func.users.get_email"), patch(
            "szurubooru.func.users.get_avatar_url"), patch(
                "szurubooru.func.users.get_liked_post_count"), patch(
                    "szurubooru.func.users.get_disliked_post_count"):
        users.get_email.return_value = "*****@*****.**"
        users.get_avatar_url.return_value = "https://example.com/avatar.png"
        users.get_liked_post_count.return_value = 66
        users.get_disliked_post_count.return_value = 33
        auth_user = user_factory()
        user = user_factory(name="dummy user")
        user.creation_time = datetime(1997, 1, 1)
        user.last_edit_time = datetime(1998, 1, 1)
        user.avatar_style = model.User.AVATAR_MANUAL
        user.rank = model.User.RANK_ADMINISTRATOR
        db.session.add(user)
        db.session.flush()
        assert users.serialize_user(user, auth_user) == {
            "version": 1,
            "name": "dummy user",
            "email": "*****@*****.**",
            "rank": "administrator",
            "creationTime": datetime(1997, 1, 1, 0, 0),
            "lastLoginTime": None,
            "avatarStyle": "manual",
            "avatarUrl": "https://example.com/avatar.png",
            "likedPostCount": 66,
            "dislikedPostCount": 33,
            "commentCount": 0,
            "favoritePostCount": 0,
            "uploadedPostCount": 0,
        }
Example #4
0
def get_info(ctx: rest.Context, _params: Dict[str, str] = {}) -> rest.Response:
    post_feature = posts.try_get_current_post_feature()
    ret = {
        'postCount': posts.get_post_count(),
        'diskUsage': _get_disk_usage(),
        'serverTime': datetime.utcnow(),
        'config': {
            'userNameRegex':
            config.config['user_name_regex'],
            'passwordRegex':
            config.config['password_regex'],
            'tagNameRegex':
            config.config['tag_name_regex'],
            'tagCategoryNameRegex':
            config.config['tag_category_name_regex'],
            'defaultUserRank':
            config.config['default_rank'],
            'privileges':
            util.snake_case_to_lower_camel_case_keys(
                config.config['privileges']),
        },
    }
    if auth.has_privilege(ctx.user, 'posts:view:featured'):
        ret['featuredPost'] = (posts.serialize_post(
            post_feature.post, ctx.user) if post_feature else None)
        ret['featuringUser'] = (users.serialize_user(
            post_feature.user, ctx.user) if post_feature else None)
        ret['featuringTime'] = post_feature.time if post_feature else None
    return ret
Example #5
0
def test_serialize_user(user_factory):
    with patch('szurubooru.func.users.get_email'), \
            patch('szurubooru.func.users.get_avatar_url'), \
            patch('szurubooru.func.users.get_liked_post_count'), \
            patch('szurubooru.func.users.get_disliked_post_count'):
        users.get_email.return_value = '*****@*****.**'
        users.get_avatar_url.return_value = 'https://example.com/avatar.png'
        users.get_liked_post_count.return_value = 66
        users.get_disliked_post_count.return_value = 33
        auth_user = user_factory()
        user = user_factory(name='dummy user')
        user.creation_time = datetime(1997, 1, 1)
        user.last_edit_time = datetime(1998, 1, 1)
        user.avatar_style = model.User.AVATAR_MANUAL
        user.rank = model.User.RANK_ADMINISTRATOR
        db.session.add(user)
        db.session.flush()
        assert users.serialize_user(user, auth_user) == {
            'version': 1,
            'name': 'dummy user',
            'email': '*****@*****.**',
            'rank': 'administrator',
            'creationTime': datetime(1997, 1, 1, 0, 0),
            'lastLoginTime': None,
            'avatarStyle': 'manual',
            'avatarUrl': 'https://example.com/avatar.png',
            'likedPostCount': 66,
            'dislikedPostCount': 33,
            'commentCount': 0,
            'favoritePostCount': 0,
            'uploadedPostCount': 0,
        }
Example #6
0
def get_info(
        ctx: rest.Context, _params: Dict[str, str] = {}) -> rest.Response:
    post_feature = posts.try_get_current_post_feature()
    ret = {
        'postCount': posts.get_post_count(),
        'diskUsage': _get_disk_usage(),
        'serverTime': datetime.utcnow(),
        'config': {
            'name': config.config['name'],
            'userNameRegex': config.config['user_name_regex'],
            'passwordRegex': config.config['password_regex'],
            'tagNameRegex': config.config['tag_name_regex'],
            'tagCategoryNameRegex': config.config['tag_category_name_regex'],
            'defaultUserRank': config.config['default_rank'],
            'enableSafety': config.config['enable_safety'],
            'contactEmail': config.config['contact_email'],
            'canSendMails': bool(config.config['smtp']['host']),
            'privileges':
                util.snake_case_to_lower_camel_case_keys(
                    config.config['privileges']),
        },
    }
    if auth.has_privilege(ctx.user, 'posts:view:featured'):
        ret['featuredPost'] = (
            posts.serialize_post(post_feature.post, ctx.user)
            if post_feature else None)
        ret['featuringUser'] = (
            users.serialize_user(post_feature.user, ctx.user)
            if post_feature else None)
        ret['featuringTime'] = post_feature.time if post_feature else None
    return ret
Example #7
0
def get_info(ctx: rest.Context, _params: Dict[str, str] = {}) -> rest.Response:
    post_feature = posts.try_get_current_post_feature()
    ret = {
        "postCount": posts.get_post_count(),
        "diskUsage": _get_disk_usage(),
        "serverTime": datetime.utcnow(),
        "config": {
            "name": config.config["name"],
            "userNameRegex": config.config["user_name_regex"],
            "passwordRegex": config.config["password_regex"],
            "tagNameRegex": config.config["tag_name_regex"],
            "tagCategoryNameRegex": config.config["tag_category_name_regex"],
            "defaultUserRank": config.config["default_rank"],
            "enableSafety": config.config["enable_safety"],
            "contactEmail": config.config["contact_email"],
            "canSendMails": bool(config.config["smtp"]["host"]),
            "privileges": util.snake_case_to_lower_camel_case_keys(
                config.config["privileges"]
            ),
        },
    }
    if auth.has_privilege(ctx.user, "posts:view:featured"):
        ret["featuredPost"] = (
            posts.serialize_post(post_feature.post, ctx.user)
            if post_feature
            else None
        )
        ret["featuringUser"] = (
            users.serialize_user(post_feature.user, ctx.user)
            if post_feature
            else None
        )
        ret["featuringTime"] = post_feature.time if post_feature else None
    return ret
Example #8
0
def test_serialize_user(user_factory):
    with patch('szurubooru.func.users.get_email'), \
            patch('szurubooru.func.users.get_avatar_url'), \
            patch('szurubooru.func.users.get_liked_post_count'), \
            patch('szurubooru.func.users.get_disliked_post_count'):
        users.get_email.return_value = '*****@*****.**'
        users.get_avatar_url.return_value = 'https://example.com/avatar.png'
        users.get_liked_post_count.return_value = 66
        users.get_disliked_post_count.return_value = 33
        auth_user = user_factory()
        user = user_factory(name='dummy user')
        user.creation_time = datetime(1997, 1, 1)
        user.last_edit_time = datetime(1998, 1, 1)
        user.avatar_style = db.User.AVATAR_MANUAL
        user.rank = db.User.RANK_ADMINISTRATOR
        db.session.add(user)
        db.session.flush()
        assert users.serialize_user(user, auth_user) == {
            'version': 1,
            'name': 'dummy user',
            'email': '*****@*****.**',
            'rank': 'administrator',
            'creationTime': datetime(1997, 1, 1, 0, 0),
            'lastLoginTime': None,
            'avatarStyle': 'manual',
            'avatarUrl': 'https://example.com/avatar.png',
            'likedPostCount': 66,
            'dislikedPostCount': 33,
            'commentCount': 0,
            'favoritePostCount': 0,
            'uploadedPostCount': 0,
        }
Example #9
0
def _serialize(
        ctx: rest.Context, user: model.User, **kwargs: Any) -> rest.Response:
    return users.serialize_user(
        user,
        ctx.user,
        options=serialization.get_serialization_options(ctx),
        **kwargs)
Example #10
0
def serialize_comment(comment, authenticated_user):
    ret = {
        'id': comment.comment_id,
        'user': users.serialize_user(comment.user, authenticated_user),
        'post': posts.serialize_post(comment.post, authenticated_user),
        'text': comment.text,
        'creationTime': comment.creation_time,
        'lastEditTime': comment.last_edit_time,
    }
    if authenticated_user:
        ret['ownScore'] = scores.get_score(comment, authenticated_user)
    return ret
Example #11
0
def get_info(ctx, _params=None):
    post_feature = posts.try_get_current_post_feature()
    return {
        'postCount': posts.get_post_count(),
        'diskUsage': _get_disk_usage(),
        'featuredPost':
            posts.serialize_post(post_feature.post, ctx.user)
                if post_feature else None,
        'featuringTime': post_feature.time if post_feature else None,
        'featuringUser':
            users.serialize_user(post_feature.user, ctx.user)
                if post_feature else None,
        'serverTime': datetime.datetime.utcnow(),
        'config': {
            'userNameRegex': config.config['user_name_regex'],
            'passwordRegex': config.config['password_regex'],
            'tagNameRegex': config.config['tag_name_regex'],
            'tagCategoryNameRegex': config.config['tag_category_name_regex'],
            'defaultUserRank': config.config['default_rank'],
            'privileges':
                util.snake_case_to_lower_camel_case_keys(
                    config.config['privileges']),
        },
    }
Example #12
0
def _serialize(ctx, user, **kwargs):
    return users.serialize_user(
        user,
        ctx.user,
        options=util.get_serialization_options(ctx),
        **kwargs)
Example #13
0
def test_serialize_user_when_empty():
    assert users.serialize_user(None, None) is None
Example #14
0
 def get(self, ctx):
     auth.verify_privilege(ctx.user, 'users:list')
     return self._search_executor.execute_and_serialize(
         ctx, lambda user: users.serialize_user(user, ctx.user))
Example #15
0
 def get(self, ctx):
     auth.verify_privilege(ctx.user, 'users:list')
     return self._search_executor.execute_and_serialize(
         ctx, lambda user: users.serialize_user(user, ctx.user))
Example #16
0
def test_serialize_user_when_empty():
    assert users.serialize_user(None, None) is None