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
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)
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, }
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
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, }
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
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
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, }
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)
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
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']), }, }
def _serialize(ctx, user, **kwargs): return users.serialize_user( user, ctx.user, options=util.get_serialization_options(ctx), **kwargs)
def test_serialize_user_when_empty(): assert users.serialize_user(None, None) is None
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))