def launch_operation(self, current_user_id, model_file, project_gid, algorithm_module, algorithm_classname, fetch_file): temp_folder = FilesHelper.create_temp_folder() model_h5_path = FilesHelper.save_temporary_file( model_file, temp_folder) try: project = self.project_service.find_project_lazy_by_gid( project_gid) except ProjectServiceException: raise InvalidIdentifierException() algorithm = FlowService.get_algorithm_by_module_and_class( algorithm_module, algorithm_classname) if algorithm is None: raise InvalidIdentifierException( 'No algorithm found for: %s.%s' % (algorithm_module, algorithm_classname)) try: adapter_instance = ABCAdapter.build_adapter(algorithm) view_model = adapter_instance.get_view_model_class()() view_model_h5 = ViewModelH5(model_h5_path, view_model) view_model_gid = view_model_h5.gid.load() operation = self.operation_service.prepare_operation( current_user_id, project.id, algorithm.id, algorithm.algorithm_category, view_model_gid.hex, None, {}) storage_path = self.files_helper.get_project_folder( project, str(operation.id)) if isinstance(adapter_instance, ABCUploader): for key, value in adapter_instance.get_form_class( ).get_upload_information().items(): data_file = fetch_file(request_file_key=key, file_extension=value) data_file_path = FilesHelper.save_temporary_file( data_file, temp_folder) file_name = os.path.basename(data_file_path) upload_field = getattr(view_model_h5, key) upload_field.store(os.path.join(storage_path, file_name)) shutil.move(data_file_path, storage_path) shutil.move(model_h5_path, storage_path) os.rmdir(temp_folder) view_model_h5.close() OperationService().launch_operation(operation.id, True) return operation.gid except Exception as excep: self.logger.error(excep, exc_info=True) raise ServiceException(str(excep))
def post(self, project_gid): """ :start a simulation using a project id and a zip archive with the simulator data serialized """ file = self.extract_file_from_request( request_file_key=RequestFileKey.SIMULATION_FILE_KEY.value, file_extension=FilesHelper.TVB_ZIP_FILE_EXTENSION) zip_path = FilesHelper.save_temporary_file(file) result = FilesHelper().unpack_zip(zip_path, os.path.dirname(zip_path)) if len(result) == 0: self.logger.error("Empty zip archive. {}".format(zip_path)) raise InvalidInputException("Empty zip archive") zip_directory = os.path.dirname(result[0]) simulation_gid = self.simulation_facade.launch_simulation( get_current_user().id, zip_directory, project_gid) return simulation_gid, HTTP_STATUS_CREATED