def dzi_get_project_ref(project): if current_app.config['HISTOANNOT_SERVER_MODE'] != 'dzi_node': # TODO: Check permission! return ProjectRef(project) else: pdata = json.loads(request.form.get('project_data')) return ProjectRef(project, pdata)
def block_detail_by_name(task_id, specimen_name, block_name): # Get the current task data project,task = get_task_data(task_id) pr = ProjectRef(project) return render_template('slide/task_detail.html', project=project, project_name=pr.disp_name, task=task, task_id=task_id, specimen_name=specimen_name, block_name=block_name)
def wrapped_view(**kwargs): # Find or allocate an assigned worker for this slide worker_url = find_delegate_for_slide(project=kwargs['project'], slide_name=kwargs['slide_name']) # If no worker, just call the method if worker_url is None: return view(**kwargs) # Call the worker's method full_url = '%s/%s' % (worker_url, request.full_path) # Take the project information and embed it in the call as a POST parameter pr = ProjectRef(kwargs['project']) post_data = urllib.urlencode( {'project_data': json.dumps(pr.get_dict())}) return urllib2.urlopen(full_url, post_data).read()
def do_preload_file(project, proj_dict, specimen, block, resource, slide_name, slide_ext): sr = SlideRef(ProjectRef(project, proj_dict), specimen, block, slide_name, slide_ext) print('Fetching %s %s %s %s.%s' % (project, specimen, block, slide_name, slide_ext)) tiff_file = sr.get_local_copy(resource, check_hash=True) print('Fetched to %s' % tiff_file) return tiff_file
def labelset_editor(project): # Read the project ref pr = ProjectRef(project) # Render the entry page return render_template('dbtrain/labelset_editor.html', project=project, disp_name=pr.disp_name, labelset=None)
def get_slide_ref(slice_id, project=None): """ Create a slide reference from a database slide ID :param slice_id: database ID of a slide :type slide_id: int :param project: optional project reference to associate with :type project: ProjectRef :return: """ db = get_db() # Load slide from database row = db.execute('SELECT * from slide_info WHERE id = ?', (slice_id,)).fetchone() # Handle missing data if row is None: return None # Create a project reference if project is None: project = ProjectRef(row['project']) # Create a slide reference return SlideRef(project, row['specimen_name'], row['block_name'], row['slide_name'], row['slide_ext'])
def slide_view(task_id, slide_id, resolution, affine_mode): # Get the current task data project, task = get_task_data(task_id) # Get the next/previous slides for this task si, prev_slide, next_slide, stain_list, user_prefs = get_slide_info( task_id, slide_id) # Check that the affine mode and resolution requested are available pr = ProjectRef(project) sr = SlideRef(pr, si['specimen_name'], si['block_name'], si['slide_name'], si['slide_ext']) have_affine = sr.resource_exists('affine', True) or sr.resource_exists( 'affine', False) have_x16 = sr.resource_exists('x16', True) or sr.resource_exists( 'x16', False) # If one is missing, we need a redirect rd_affine_mode = affine_mode if have_affine else 'raw' rd_resolution = resolution if have_x16 else 'raw' # Get the list of available overlays and jsonify overlays = sr.get_available_overlays(local=False) if (affine_mode == 'affine' and not have_affine) or (resolution == 'x16' and not have_x16): return redirect( url_for('slide.slide_view', task_id=task_id, slide_id=slide_id, resolution=rd_resolution, affine_mode=rd_affine_mode)) # Get additional project info pr = ProjectRef(project) # Form the URL templates for preloading and actual dzi access, so that in JS we # can just do a quick substitution url_ctx = { 'project': project, 'specimen': si['specimen_name'], 'block': si['block_name'], 'slide_name': si['slide_name'], 'slide_ext': si['slide_ext'], 'mode': affine_mode, 'resource': 'XXXXX' } url_tmpl_preload = url_for('dzi.dzi_preload_endpoint', **url_ctx) url_tmpl_dzi = url_for('dzi.dzi', **url_ctx) url_tmpl_download = url_for('dzi.dzi_download', **url_ctx) # Build a dictionary to call context = { 'slide_id': slide_id, 'slide_info': si, 'next_slide': next_slide, 'prev_slide': prev_slide, 'stain_list': stain_list, 'affine_mode': affine_mode, 'have_affine': have_affine, 'have_x16': have_x16, 'resolution': resolution, 'seg_mode': task['mode'], 'task_id': task_id, 'project': si['project'], 'project_name': pr.disp_name, 'block_id': si['block_id'], 'url_tmpl_preload': url_tmpl_preload, 'url_tmpl_dzi': url_tmpl_dzi, 'url_tmpl_download': url_tmpl_download, 'task': task, 'fixed_box_size': get_dltrain_fixed_box_size(task), 'user_prefs': user_prefs, 'overlays': overlays } # Add optional fields to context for field in ('sample_id', 'sample_cx', 'sample_cy'): if field in request.form: context[field] = request.form[field] # Render the template return render_template('slide/slide_view.html', **context)