Beispiel #1
0
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)
Beispiel #2
0
 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]),
     }
Beispiel #3
0
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)
Beispiel #4
0
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('다른 누군가 이미 수정하고 있습니다. ' + '다시 시도해 보세요.')
Beispiel #5
0
 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]),
     }
Beispiel #6
0
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)
Beispiel #7
0
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)
Beispiel #8
0
 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]),
     }
Beispiel #9
0
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)
Beispiel #10
0
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.')
Beispiel #11
0
 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],
     }
Beispiel #12
0
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)
Beispiel #13
0
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.')
Beispiel #14
0
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)
Beispiel #15
0
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)
Beispiel #16
0
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)
Beispiel #17
0
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)
Beispiel #18
0
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)