def get_context_data(self, form, **kwargs): context = super(DVIDImportWizard, self).get_context_data(form=form, **kwargs) if self.steps: if self.steps.current == 'stack': # Use DVID information from previous step dvid_server = self.get_cleaned_data_for_step( 'server')['server'] context['dvid_server'] = dvid_server # Connect to server and get information on instances dc = dvid.DVIDClient(dvid_server) dvid_instances = dc.get_instance_type_map() context['dvid_instances'] = dvid_instances context['supported_instance_types'] = list( dvid.SUPPORTED_INSTANCE_TYPES) elif self.steps.current == 'confirm': dvid_server = self.get_cleaned_data_for_step( 'server')['server'] dvid_repo = self.get_cleaned_data_for_step( 'stack')['repository'] dvid_instance = self.get_cleaned_data_for_step( 'stack')['instance'] dc = dvid.DVIDClient(dvid_server) context['dvid_server'] = dvid_server context['dvid_repo'] = dvid_repo context['dvid_instance'] = dvid_instance context['stack'] = dc.get_instance_properties( dvid_repo, dvid_instance) context.update({ 'title': 'DVID Importer', }) return context
def get_form(self, step=None, data=None, files=None): form = super(DVIDImportWizard, self).get_form(step, data, files) if step is None: step = self.steps.current if step == 'stack': # Let the stack form know about the DVID server dvid_server = self.get_cleaned_data_for_step('server')['server'] form.dvid = dvid.DVIDClient(dvid_server) return form
def done(self, form_list, **kwargs): dvid_server = self.get_cleaned_data_for_step('server')['server'] dvid_repo = self.get_cleaned_data_for_step('stack')['repository'] dvid_instance = self.get_cleaned_data_for_step('stack')['instance'] title = self.get_cleaned_data_for_step('confirm')['title'] comment = self.get_cleaned_data_for_step('confirm')['comment'] description = self.get_cleaned_data_for_step('confirm')['description'] dc = dvid.DVIDClient(dvid_server) stack_data = dc.get_instance_properties(dvid_repo, dvid_instance) dimension = (stack_data['dimension']['x'], stack_data['dimension']['y'], stack_data['dimension']['z']) resolution = (stack_data['resolution']['x'], stack_data['resolution']['y'], stack_data['resolution']['z']) ortho_stacks = self.get_cleaned_data_for_step( 'confirm')['ortho_stacks'] new_project = self.get_cleaned_data_for_step('confirm')['new_project'] # Create DVID stacks and return to admin home views = ((0, 'XY'), (1, 'XZ'), (2, 'ZY')) new_stacks = [] for view, label in views: suffix = ' ' + label if ortho_stacks else '' stack = Stack(title=title + suffix, comment=comment, dimension=dimension, resolution=resolution, num_zoom_levels=stack_data['zoom_levels'], description=description) stack.save() mirror = StackMirror.objects.create( stack=stack, image_base=stack_data['image_base'], file_extension=stack_data['file_extension'], tile_width=stack_data['tile_width'], tile_height=stack_data['tile_height'], tile_source_type=stack_data['tile_source_type']) new_stacks.append((view, stack)) if new_project: project = Project(title=title, comment=None) project.save() # Create three links, each with a different orientation, if an # ortho project should be created. Link only one XY view otherwise. views = (0, 1, 2) if ortho_stacks else (0, ) for view, stack in new_stacks: ps = ProjectStack(project=project, stack=stack, orientation=view) ps.save() # Create a stack group if there are more than one views if len(views) > 1: view_relation = StackGroupRelation.objects.get(name='view') sg = StackGroup.objects.create(title=project.title) for view, stack in new_stacks: StackStackGroup.objects.create( group_relation=view_relation, stack=stack, stack_group=sg, position=view) if new_project: if ortho_stacks: msg = ('Three new DVID based stacks have been created and ' 'linked to a projcet named "%s" with orientations XY, ' 'XZ and ZY' % title) else: msg = ('A new DVID based stack was successfully created and ' 'linked to a new project named "%s".' % title) else: msg = 'A new DVID based stack was successfully created.' messages.add_message(self.request, messages.SUCCESS, msg) return redirect('admin:index')