def merge_posts( ctx: rest.Context, _params: Dict[str, str] = {}) -> rest.Response: source_post_id = ctx.get_param_as_int('remove') target_post_id = ctx.get_param_as_int('mergeTo') source_post = posts.get_post_by_id(source_post_id) target_post = posts.get_post_by_id(target_post_id) replace_content = ctx.get_param_as_bool('replaceContent') versions.verify_version(source_post, ctx, 'removeVersion') versions.verify_version(target_post, ctx, 'mergeToVersion') versions.bump_version(target_post) auth.verify_privilege(ctx.user, 'posts:merge') posts.merge_posts(source_post, target_post, replace_content) snapshots.merge(source_post, target_post, ctx.user) ctx.session.commit() return _serialize_post(ctx, target_post)
def execute_and_serialize( self, ctx: rest.Context, serializer: Callable[[model.Base], rest.Response]) -> rest.Response: query = ctx.get_param_as_string('query', default='') offset = ctx.get_param_as_int('offset', default=0, min=0) limit = ctx.get_param_as_int('limit', default=100, min=1, max=100) count, entities = self.execute(query, offset, limit) return { 'query': query, 'offset': offset, 'limit': limit, 'total': count, 'results': list([serializer(entity) for entity in entities]), }
def merge_posts(ctx: rest.Context, _params: Dict[str, str] = {}) -> rest.Response: source_post_id = ctx.get_param_as_int('remove') target_post_id = ctx.get_param_as_int('mergeTo') source_post = posts.get_post_by_id(source_post_id) target_post = posts.get_post_by_id(target_post_id) replace_content = ctx.get_param_as_bool('replaceContent') versions.verify_version(source_post, ctx, 'removeVersion') versions.verify_version(target_post, ctx, 'mergeToVersion') versions.bump_version(target_post) auth.verify_privilege(ctx.user, 'posts:merge') posts.merge_posts(source_post, target_post, replace_content) snapshots.merge(source_post, target_post, ctx.user) ctx.session.commit() return _serialize_post(ctx, target_post)
def verify_version(entity: model.Base, context: rest.Context, field_name: str = 'version') -> None: actual_version = context.get_param_as_int(field_name) expected_version = entity.version if actual_version != expected_version: raise errors.IntegrityError('다른 누군가 이미 수정하고 있습니다. ' + '다시 시도해 보세요.')
def execute_and_serialize( self, ctx: rest.Context, serializer: Callable[[model.Base], rest.Response] ) -> rest.Response: query = ctx.get_param_as_string('query', default='') offset = ctx.get_param_as_int('offset', default=0, min=0) limit = ctx.get_param_as_int('limit', default=100, min=1, max=100) count, entities = self.execute(query, offset, limit) return { 'query': query, 'offset': offset, 'limit': limit, 'total': count, 'results': list([serializer(entity) for entity in entities]), }
def set_post_score(ctx: rest.Context, params: Dict[str, str]) -> rest.Response: auth.verify_privilege(ctx.user, 'posts:score') post = _get_post(params) score = ctx.get_param_as_int('score') scores.set_score(post, ctx.user, score) ctx.session.commit() return _serialize_post(ctx, post)
def set_post_score(ctx: rest.Context, params: Dict[str, str]) -> rest.Response: auth.verify_privilege(ctx.user, 'posts:score') post = _get_post(params) score = ctx.get_param_as_int('score') scores.set_score(post, ctx.user, score) ctx.session.commit() return _serialize_post(ctx, post)
def execute_and_serialize( self, ctx: rest.Context, serializer: Callable[[model.Base], rest.Response], ) -> rest.Response: query = ctx.get_param_as_string("query", default="") offset = ctx.get_param_as_int("offset", default=0, min=0) limit = ctx.get_param_as_int("limit", default=100, min=1, max=100) count, entities = self.execute(query, offset, limit) return { "query": query, "offset": offset, "limit": limit, "total": count, "results": list([serializer(entity) for entity in entities]), }
def set_comment_score(ctx: rest.Context, params: Dict[str, str]) -> rest.Response: auth.verify_privilege(ctx.user, "comments:score") score = ctx.get_param_as_int("score") comment = _get_comment(params) scores.set_score(comment, ctx.user, score) ctx.session.commit() return _serialize(ctx, comment)
def verify_version(entity: model.Base, context: rest.Context, field_name: str = 'version') -> None: actual_version = context.get_param_as_int(field_name) expected_version = entity.version if actual_version != expected_version: raise errors.IntegrityError( 'Someone else modified this in the meantime. ' + 'Please try again.')
def execute_and_serialize( self, ctx: rest.Context, serializer: Callable[[model.Base], rest.Response]) -> rest.Response: query = ctx.get_param_as_string('query', default='') page = ctx.get_param_as_int('page', default=1, min=1) page_size = ctx.get_param_as_int('pageSize', default=100, min=1, max=100) count, entities = self.execute(query, page, page_size) return { 'query': query, 'page': page, 'pageSize': page_size, 'total': count, 'results': [serializer(entity) for entity in entities], }
def create_comment( ctx: rest.Context, _params: Dict[str, str] = {}) -> rest.Response: auth.verify_privilege(ctx.user, 'comments:create') text = ctx.get_param_as_string('text') post_id = ctx.get_param_as_int('postId') post = posts.get_post_by_id(post_id) comment = comments.create_comment(ctx.user, post, text) ctx.session.add(comment) ctx.session.commit() return _serialize(ctx, comment)
def verify_version( entity: model.Base, context: rest.Context, field_name: str = 'version') -> None: actual_version = context.get_param_as_int(field_name) expected_version = entity.version if actual_version != expected_version: raise errors.IntegrityError( 'Someone else modified this in the meantime. ' + 'Please try again.')
def create_comment(ctx: rest.Context, _params: Dict[str, str] = {}) -> rest.Response: auth.verify_privilege(ctx.user, 'comments:create') text = ctx.get_param_as_string('text') post_id = ctx.get_param_as_int('postId') post = posts.get_post_by_id(post_id) comment = comments.create_comment(ctx.user, post, text) ctx.session.add(comment) ctx.session.commit() return _serialize(ctx, comment)
def set_featured_post(ctx: rest.Context, _params: Dict[str, str] = {}) -> rest.Response: auth.verify_privilege(ctx.user, 'posts:feature') post_id = ctx.get_param_as_int('id') post = posts.get_post_by_id(post_id) featured_post = posts.try_get_featured_post() if featured_post and featured_post.post_id == post.post_id: raise posts.PostAlreadyFeaturedError('짤 %r 는 이미 대문짤임.' % post_id) posts.feature_post(post, ctx.user) snapshots.modify(post, ctx.user) ctx.session.commit() return _serialize_post(ctx, post)
def create_tag_category(ctx: rest.Context, _params: Dict[str, str] = {}) -> rest.Response: auth.verify_privilege(ctx.user, "tag_categories:create") name = ctx.get_param_as_string("name") color = ctx.get_param_as_string("color") order = ctx.get_param_as_int("order") category = tag_categories.create_category(name, color, order) ctx.session.add(category) ctx.session.flush() snapshots.create(category, ctx.user) ctx.session.commit() return _serialize(ctx, category)
def set_featured_post( ctx: rest.Context, _params: Dict[str, str] = {}) -> rest.Response: auth.verify_privilege(ctx.user, 'posts:feature') post_id = ctx.get_param_as_int('id') post = posts.get_post_by_id(post_id) featured_post = posts.try_get_featured_post() if featured_post and featured_post.post_id == post.post_id: raise posts.PostAlreadyFeaturedError( 'Post %r is already featured.' % post_id) posts.feature_post(post, ctx.user) snapshots.modify(post, ctx.user) ctx.session.commit() return _serialize_post(ctx, post)
def update_tag_category(ctx: rest.Context, params: Dict[str, str]) -> rest.Response: category = tag_categories.get_category_by_name(params["category_name"], lock=True) versions.verify_version(category, ctx) versions.bump_version(category) if ctx.has_param("name"): auth.verify_privilege(ctx.user, "tag_categories:edit:name") tag_categories.update_category_name(category, ctx.get_param_as_string("name")) if ctx.has_param("color"): auth.verify_privilege(ctx.user, "tag_categories:edit:color") tag_categories.update_category_color(category, ctx.get_param_as_string("color")) if ctx.has_param("order"): auth.verify_privilege(ctx.user, "tag_categories:edit:order") tag_categories.update_category_order(category, ctx.get_param_as_int("order")) ctx.session.flush() snapshots.modify(category, ctx.user) ctx.session.commit() return _serialize(ctx, category)