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': [], }
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 {}
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 {}
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 {}
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 {}
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 {}
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 {}
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 {}
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 {}
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 {}
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 {}
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'
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
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 {}
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 {}
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)