from flask import abort from flask import make_response from flask import request from flask.views import View from pycs import db from pycs.database.File import File from pycs.frontend.notifications.NotificationManager import NotificationManager class CopyResults(View): """ copy all results for one file to another """ # pylint: disable=arguments-differ methods = ['POST'] def __init__(self, nm: NotificationManager): # pylint: disable=invalid-name self.nm = nm def dispatch_request(self, user: str, file_id: int): request_data = request.get_json(force=True) if 'copy_from' not in request_data: abort(400, "copy_from argument is missing") new = [] # start transaction with db.session.begin_nested(): file = File.get_or_404(file_id) other_file = File.get_or_404(request_data.get('copy_from')) for result in other_file.results.all(): new_result = file.create_result( origin='pipeline', result_type=result.type, origin_user=None, label=result.label_id, data=result.data, commit=False) new.append(new_result) for new_result in new: self.nm.create_result(new_result) return make_response()