def export_skeleton_as_nrrd_async(skeleton_id, source_ref, target_ref, user_id, mirror=True, create_message=True): result = export_skeleton_as_nrrd(skeleton_id, source_ref, target_ref, user_id, mirror) if create_message: msg = Message() msg.user = User.objects.get(pk=int(user_id)) msg.read = False if result['errors']: msg.title = "No NRRD file could be creaed for skeleton {}".format( skeleton_id) msg.text = "There was at least one error during the NRRD export: {}".format( '\n'.join(result['errors'])) msg.action = "" else: url = urljoin( urljoin(settings.MEDIA_URL, settings.MEDIA_EXPORT_SUBDIRECTORY), result['nrrd_name']) msg.title = "Exported skeleton {} as NRRD file".format(skeleton_id) msg.text = "The requested skeleton was exported as NRRD file. You " \ "can download it from this location: <a href='{}'>{}</a>".format(url, url) msg.action = url msg.save() return "Errors: {}".format('\n'.join( result['errors'])) if result['errors'] else result['nrrd_path']
def create_message(self, title, message, url): msg = Message() msg.user = User.objects.get(pk=int(self.job.user.id)) msg.read = False msg.title = title msg.text = message msg.action = url msg.save()
def process_crop_job(job, create_message=True): """ This method does the actual cropping. It controls the data extraction and the creation of the sub-stack. It can be executed as Celery task. """ try: # Create the sub-stack cropped_stack = extract_substack(job) # Create tho output image outputImage = ImageList() for img in cropped_stack: outputImage.append(img) # Save the resulting micro_stack to a temporary location no_error_occured = True error_message = "" # Only produce an image if parts of stacks are within the output if len(cropped_stack) > 0: outputImage.writeImages(job.output_path.encode('ascii', 'ignore')) # Add some meta data to the image addMetaData(job.output_path, job, cropped_stack) else: no_error_occured = False error_message = "A region outside the stack has been selected. " \ "Therefore, no image was produced." except (IOError, OSError, ValueError) as e: no_error_occured = False error_message = str(e) # Delete the file if parts of it have been written already if os.path.exists(job.output_path): os.remove(job.output_path) if create_message: # Create a notification message bb_text = "( %s, %s, %s ) -> ( %s, %s, %s )" % (job.x_min, job.y_min, \ job.z_min, job.x_max, job.y_max, job.z_max) msg = Message() msg.user = User.objects.get(pk=int(job.user.id)) msg.read = False if no_error_occured: file_name = os.path.basename(job.output_path) url = os.path.join(settings.CATMAID_URL, "crop/download/" + file_name + "/") msg.title = "Microstack finished" msg.text = "The requested microstack %s is finished. You can " \ "download it from this location: <a href='%s'>%s</a>" % \ (bb_text, url, url) msg.action = url else: msg.title = "Microstack could not be created" msg.text = "The requested microstack %s could not be created due " \ "to an error while saving the result (%s)." % \ (bb_text, error_message) msg.action = "" msg.save() return job.output_path if no_error_occured else error_message
def process_crop_job(job, create_message=True): """ This method does the actual cropping. It controls the data extraction and the creation of the sub-stack. It can be executed as Celery task. """ try: # Create the sub-stack cropped_stack = extract_substack(job) # Create tho output image outputImage = ImageList() for img in cropped_stack: outputImage.append( img ) # Save the resulting micro_stack to a temporary location no_error_occured = True error_message = "" # Only produce an image if parts of stacks are within the output if len( cropped_stack ) > 0: outputImage.writeImages( job.output_path.encode('ascii', 'ignore') ) # Add some meta data to the image addMetaData( job.output_path, job, cropped_stack ) else: no_error_occured = False error_message = "A region outside the stack has been selected. " \ "Therefore, no image was produced." except (IOError, OSError, ValueError) as e: no_error_occured = False error_message = str(e) # Delete the file if parts of it have been written already if os.path.exists( job.output_path ): os.remove( job.output_path ) if create_message: # Create a notification message bb_text = "( %s, %s, %s ) -> ( %s, %s, %s )" % (job.x_min, job.y_min, \ job.z_min, job.x_max, job.y_max, job.z_max) msg = Message() msg.user = User.objects.get(pk=int(job.user.id)) msg.read = False if no_error_occured: file_name = os.path.basename( job.output_path ) url = os.path.join( settings.CATMAID_URL, "crop/download/" + file_name + "/") msg.title = "Microstack finished" msg.text = "The requested microstack %s is finished. You can " \ "download it from this location: <a href='%s'>%s</a>" % \ (bb_text, url, url) msg.action = url else: msg.title = "Microstack could not be created" msg.text = "The requested microstack %s could not be created due " \ "to an error while saving the result (%s)." % \ (bb_text, error_message) msg.action = "" msg.save() return job.output_path if no_error_occured else error_message
def process_crop_job(job: CropJob, create_message=True) -> str: """ This method does the actual cropping. It controls the data extraction and the creation of the sub-stack. It can be executed as Celery task. """ try: # Create the sub-stack cropped_stack = extract_substack(job) # Save the resulting micro_stack to a temporary location no_error_occured = True error_message = "" # Only produce an image if parts of stacks are within the output if len(cropped_stack) > 0: metadata = job.create_tiff_metadata(len(cropped_stack)) cropped_stack[0].save(job.output_path, compression="raw", save_all=True, append_images=cropped_stack[1:], tiffinfo=metadata) else: no_error_occured = False error_message = "A region outside the stack has been selected. " \ "Therefore, no image was produced." except (IOError, OSError, ValueError) as e: no_error_occured = False error_message = str(e) # Delete the file if parts of it have been written already if os.path.exists( job.output_path ): os.remove( job.output_path ) if create_message: # Create a notification message bb_text = "( %s, %s, %s ) -> ( %s, %s, %s )" % (job.x_min, job.y_min, \ job.z_min, job.x_max, job.y_max, job.z_max) user = User.objects.get(pk=int(job.user.id)) msg = Message() msg.user = user msg.read = False if no_error_occured: file_name = os.path.basename( job.output_path ) url = os.path.join( settings.CATMAID_URL, "crop/download/" + file_name + "/") msg.title = "Microstack finished" msg.text = "The requested microstack %s is finished. You can " \ "download it from this location: <a href='%s'>%s</a>" % \ (bb_text, url, url) msg.action = url else: msg.title = "Microstack could not be created" msg.text = "The requested microstack %s could not be created due " \ "to an error while saving the result (%s)." % \ (bb_text, error_message) msg.action = "" msg.save() notify_user(user.id, msg.id, msg.title) return job.output_path if no_error_occured else error_message
def export_skeleton_as_nrrd_async(skeleton_id, source_ref, target_ref, user_id, mirror=True, create_message=True): result = export_skeleton_as_nrrd(skeleton_id, source_ref, target_ref, user_id, mirror) if create_message: msg = Message() msg.user = User.objects.get(pk=int(user_id)) msg.read = False if result['errors']: msg.title = "No NRRD file could be creaed for skeleton {}".format(skeleton_id) msg.text = "There was at least one error during the NRRD export: {}".format('\n'.join(result['errors'])) msg.action = "" else: url = urljoin(urljoin(settings.MEDIA_URL, settings.MEDIA_EXPORT_SUBDIRECTORY), result['nrrd_name']) msg.title = "Exported skeleton {} as NRRD file".format(skeleton_id) msg.text = "The requested skeleton was exported as NRRD file. You " \ "can download it from this location: <a href='{}'>{}</a>".format(url, url) msg.action = url msg.save() return "Errors: {}".format('\n'.join(result['errors'])) if result['errors'] else result['nrrd_path']
msg.read = False if no_error_occured: file_name = os.path.basename( job.output_path ) url = os.path.join( settings.CATMAID_URL, "crop/download/" + file_name + "/") msg.title = "Microstack finished" msg.text = "The requested microstack %s is finished. You can " \ "download it from this location: <a href='%s'>%s</a>" % \ (bb_text, url, url) msg.action = url else: msg.title = "Microstack could not be created" msg.text = "The requested microstack %s could not be created due " \ "to an error while saving the result (%s)." % \ (bb_text, error_message) msg.action = "" msg.save() return None if no_error_occured else error_message def start_asynch_process( job ): """ It launches the data extraction and sub-stack building as a seperate process. This process uses the addmessage command with manage.py to write a message for the user into the data base once the process is done. """ result = process_crop_job.delay( job ) # Create closing response closingResponse = HttpResponse(json.dumps(""), content_type="application/json") return closingResponse
if no_error_occured: file_name = os.path.basename(job.output_path) url = os.path.join(settings.CATMAID_URL, "crop/download/" + file_name + "/") msg.title = "Microstack finished" msg.text = "The requested microstack %s is finished. You can " \ "download it from this location: <a href='%s'>%s</a>" % \ (bb_text, url, url) msg.action = url else: msg.title = "Microstack could not be created" msg.text = "The requested microstack %s could not be created due " \ "to an error while saving the result (%s)." % \ (bb_text, error_message) msg.action = "" msg.save() return None if no_error_occured else error_message def start_asynch_process(job): """ It launches the data extraction and sub-stack building as a seperate process. This process uses the addmessage command with manage.py to write a message for the user into the data base once the process is done. """ result = process_crop_job.delay(job) # Create closing response closingResponse = HttpResponse(json.dumps(""), content_type="application/json")