コード例 #1
0
def test_merging_deletion_to_modification_or_creation(
        fake_datetime, tag_factory, user_factory, initial_operation):
    tag = tag_factory(names=['dummy'], category_name='dummy')
    user = user_factory()
    db.session.add_all([tag, user])
    db.session.flush()
    with fake_datetime('13:00:00'):
        initial_operation(tag, user)
    tag.names = [db.TagName('changed')]
    with fake_datetime('14:00:00'):
        snapshots.modify(tag, user)
    tag.names = [db.TagName('changed again')]
    with fake_datetime('14:00:01'):
        snapshots.delete(tag, user)
    assert db.session.query(db.Snapshot).count() == 2
    results = db.session \
        .query(db.Snapshot) \
        .order_by(db.Snapshot.snapshot_id.asc()) \
        .all()
    assert results[1].operation == db.Snapshot.OPERATION_DELETED
    assert results[1].data == {
        'names': ['changed again'],
        'category': 'dummy',
        'suggestions': [],
        'implications': [],
    }
コード例 #2
0
ファイル: tag_api.py プロジェクト: rr-/szurubooru
def delete_tag(ctx: rest.Context, params: Dict[str, str]) -> rest.Response:
    tag = _get_tag(params)
    versions.verify_version(tag, ctx)
    auth.verify_privilege(ctx.user, 'tags:delete')
    snapshots.delete(tag, ctx.user)
    tags.delete(tag)
    ctx.session.commit()
    return {}
コード例 #3
0
ファイル: tag_api.py プロジェクト: stopsquarks/quarkman
def delete_tag(ctx: rest.Context, params: Dict[str, str]) -> rest.Response:
    tag = _get_tag(params)
    versions.verify_version(tag, ctx)
    auth.verify_privilege(ctx.user, "tags:delete")
    snapshots.delete(tag, ctx.user)
    tags.delete(tag)
    ctx.session.commit()
    return {}
コード例 #4
0
ファイル: post_api.py プロジェクト: rr-/szurubooru
def delete_post(ctx: rest.Context, params: Dict[str, str]) -> rest.Response:
    auth.verify_privilege(ctx.user, 'posts:delete')
    post = _get_post(params)
    versions.verify_version(post, ctx)
    snapshots.delete(post, ctx.user)
    posts.delete(post)
    ctx.session.commit()
    return {}
コード例 #5
0
ファイル: post_api.py プロジェクト: sun-beyond/szurubooru
def delete_post(ctx: rest.Context, params: Dict[str, str]) -> rest.Response:
    auth.verify_privilege(ctx.user, 'posts:delete')
    post = _get_post(params)
    versions.verify_version(post, ctx)
    snapshots.delete(post, ctx.user)
    posts.delete(post)
    ctx.session.commit()
    return {}
コード例 #6
0
def delete_pool(ctx: rest.Context, params: Dict[str, str]) -> rest.Response:
    pool = _get_pool(params)
    versions.verify_version(pool, ctx)
    auth.verify_privilege(ctx.user, "pools:delete")
    snapshots.delete(pool, ctx.user)
    pools.delete(pool)
    ctx.session.commit()
    return {}
コード例 #7
0
def delete_post(ctx, params):
    auth.verify_privilege(ctx.user, 'posts:delete')
    post = posts.get_post_by_id(params['post_id'])
    versions.verify_version(post, ctx)
    snapshots.delete(post, ctx.user)
    posts.delete(post)
    ctx.session.commit()
    tags.export_to_json()
    return {}
コード例 #8
0
def delete_tag(ctx, params):
    tag = tags.get_tag_by_name(params['tag_name'])
    versions.verify_version(tag, ctx)
    auth.verify_privilege(ctx.user, 'tags:delete')
    snapshots.delete(tag, ctx.user)
    tags.delete(tag)
    ctx.session.commit()
    tags.export_to_json()
    return {}
コード例 #9
0
def delete_tag_category(ctx, params):
    category = tag_categories.get_category_by_name(
        params['category_name'], lock=True)
    versions.verify_version(category, ctx)
    auth.verify_privilege(ctx.user, 'tag_categories:delete')
    tag_categories.delete_category(category)
    snapshots.delete(category, ctx.user)
    ctx.session.commit()
    tags.export_to_json()
    return {}
コード例 #10
0
def delete_pool_category(ctx: rest.Context,
                         params: Dict[str, str]) -> rest.Response:
    category = pool_categories.get_category_by_name(params["category_name"],
                                                    lock=True)
    versions.verify_version(category, ctx)
    auth.verify_privilege(ctx.user, "pool_categories:delete")
    pool_categories.delete_category(category)
    snapshots.delete(category, ctx.user)
    ctx.session.commit()
    return {}
コード例 #11
0
ファイル: tag_category_api.py プロジェクト: rr-/szurubooru
def delete_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)
    auth.verify_privilege(ctx.user, 'tag_categories:delete')
    tag_categories.delete_category(category)
    snapshots.delete(category, ctx.user)
    ctx.session.commit()
    return {}
コード例 #12
0
def delete_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)
    auth.verify_privilege(ctx.user, 'tag_categories:delete')
    tag_categories.delete_category(category)
    snapshots.delete(category, ctx.user)
    ctx.session.commit()
    tags.export_to_json()
    return {}
コード例 #13
0
ファイル: test_snapshots.py プロジェクト: devtest8/szurubooru
def test_delete(tag_factory, user_factory):
    tag = tag_factory(names=['dummy'])
    db.session.add(tag)
    db.session.flush()
    with patch('szurubooru.func.snapshots.get_tag_snapshot'):
        snapshots.get_tag_snapshot.return_value = 'mocked'
        snapshots.delete(tag, user_factory())
    db.session.flush()
    results = db.session.query(model.Snapshot).all()
    assert len(results) == 1
    assert results[0].operation == model.Snapshot.OPERATION_DELETED
    assert results[0].data == 'mocked'
コード例 #14
0
ファイル: test_snapshots.py プロジェクト: rr-/szurubooru
def test_delete(tag_factory, user_factory):
    tag = tag_factory(names=['dummy'])
    db.session.add(tag)
    db.session.flush()
    with patch('szurubooru.func.snapshots.get_tag_snapshot'):
        snapshots.get_tag_snapshot.return_value = 'mocked'
        snapshots.delete(tag, user_factory())
    db.session.flush()
    results = db.session.query(model.Snapshot).all()
    assert len(results) == 1
    assert results[0].operation == model.Snapshot.OPERATION_DELETED
    assert results[0].data == 'mocked'
コード例 #15
0
def test_merging_deletion_all_the_way_deletes_all_snapshots(
        fake_datetime, tag_factory, user_factory, expected_operation):
    tag = tag_factory(names=['dummy'])
    user = user_factory()
    db.session.add_all([tag, user])
    db.session.flush()
    with fake_datetime('13:00:00'):
        snapshots.create(tag, user)
    tag.names = [db.TagName('changed')]
    with fake_datetime('13:00:01'):
        snapshots.modify(tag, user)
    tag.names = [db.TagName('changed again')]
    with fake_datetime('13:00:02'):
        snapshots.delete(tag, user)
    assert db.session.query(db.Snapshot).count() == 0
コード例 #16
0
ファイル: tag_api.py プロジェクト: princessGasmask/szurubooru
    def delete(self, ctx, tag_name):
        tag = tags.get_tag_by_name(tag_name)
        if not tag:
            raise tags.TagNotFoundError('Tag %r not found.' % tag_name)
        if tag.post_count > 0:
            raise tags.TagIsInUseError(
                'Tag has some usages and cannot be deleted. ' +
                'Please untag relevant posts first.')

        auth.verify_privilege(ctx.user, 'tags:delete')
        snapshots.delete(tag, ctx.user)
        ctx.session.delete(tag)
        ctx.session.commit()
        tags.export_to_json()
        return {}
コード例 #17
0
 def delete(self, ctx, category_name):
     category = tag_categories.get_category_by_name(category_name)
     if not category:
         raise tag_categories.TagCategoryNotFoundError(
             'Tag category %r not found.' % category_name)
     auth.verify_privilege(ctx.user, 'tag_categories:delete')
     if len(tag_categories.get_all_category_names()) == 1:
         raise tag_categories.TagCategoryIsInUseError(
             'Cannot delete the default category.')
     if category.tag_count > 0:
         raise tag_categories.TagCategoryIsInUseError(
             'Tag category has some usages and cannot be deleted. ' +
             'Please remove this category from relevant tags first..')
     snapshots.delete(category, ctx.user)
     ctx.session.delete(category)
     ctx.session.commit()
     tags.export_to_json()
     return {}
コード例 #18
0
ファイル: tag_api.py プロジェクト: princessGasmask/szurubooru
 def post(self, ctx):
     source_tag_name = ctx.get_param_as_string('remove', required=True) or ''
     target_tag_name = ctx.get_param_as_string('merge-to', required=True) or ''
     source_tag = tags.get_tag_by_name(source_tag_name)
     target_tag = tags.get_tag_by_name(target_tag_name)
     if not source_tag:
         raise tags.TagNotFoundError(
             'Source tag %r not found.' % source_tag_name)
     if not target_tag:
         raise tags.TagNotFoundError(
             'Source tag %r not found.' % target_tag_name)
     if source_tag.tag_id == target_tag.tag_id:
         raise tags.InvalidTagRelationError(
             'Cannot merge tag with itself.')
     auth.verify_privilege(ctx.user, 'tags:merge')
     tags.merge_tags(source_tag, target_tag)
     snapshots.delete(source_tag, ctx.user)
     ctx.session.commit()
     tags.export_to_json()
     return _serialize_tag_with_details(target_tag)