Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
    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()
Esempio n. 4
0
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
Esempio n. 5
0
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)
Esempio n. 6
0
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'])
Esempio n. 7
0
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)