def _image_process(f, project):
    header = True
    reader = csv.reader(f)
    fields = get_data_fields(project)
    images_meta = []

    if header:
        next(reader, None)

    for row in reader:
        meta = {}
        # for field in fields:
        #     meta[field['id']] = None

        image_url = row[0]
        data_url = re.sub(r'image_service', "data_service", image_url)
        xmlString = _get_image_meta_by_url(data_url)

        meta['image_uri'] = image_url
        meta['data_uri'] = data_url

        match = re.search(r'.* name=\"(.*)\" owner.*', xmlString, re.I)
        if match:
            meta['name'] = match.group(1)

        images_meta.append(meta)

    return images_meta
def view(request, data_uuid):
    """ """
    if request.user.is_anonymous():
        api_client = get_portal_api_client()
    else:
        api_client = request.user.agave_oauth.api_client

    try:
        data = Data(api_client=api_client, uuid=data_uuid)
        project = data.project
    except Exception as e:
        exception_msg = 'Unable to load data. %s' % e
        logger.error(exception_msg)
        messages.warning(request, exception_msg)
        return HttpResponseRedirect(reverse('ids_projects:project-list-private'))

    try:
        process_types = get_process_type_keys(project)
        data_fields = get_data_fields(project)
        data.set_fields(data_fields)
    except Exception as e:
        exception_msg = 'Unable to load config values. %s' % e
        logger.warning(exception_msg)

    context = {'process': data.process,
               'project': data.project,
               'specimen': data.specimen,
               'data': data,
               'process_types': process_types}

    return render(request, 'ids_projects/data/detail.html', context)
def edit(request, data_uuid):
    """"""
    api_client = request.user.agave_oauth.api_client

    try:
        data = Data(api_client=api_client, uuid=data_uuid)
        project = data.project
    except Exception as e:
        exception_msg = 'Unable to edit data. %s' % e
        logger.exception(exception_msg)
        messages.warning(request, exception_msg)
        return HttpResponseRedirect('/projects/')

    try:
        data_fields = get_data_fields(project)
    except Exception as e:
        exception_msg = 'Missing project type information, cannot edit data. %s' % e
        logger.error(exception_msg)
        messages.warning(request, exception_msg)
        return HttpResponseRedirect(
            reverse('ids_projects:project-view',
                    kwargs={'project_uuid': project.uuid}))

    #######
    # GET #
    #######
    if request.method == 'GET':

        context = {'form_data_edit': DataForm(fields=data_fields, initial=data.value),
                   'data': data,
                   'project': data.project}

        return render(request, 'ids_projects/data/edit.html', context)

    ########
    # POST #
    ########
    elif request.method == 'POST':

        form = DataForm(data_fields, request.POST)

        if form.is_valid():

            try:
                data.value.update(form.cleaned_data)
                data.save()

                messages.info(request, 'Data successfully edited.')
                return HttpResponseRedirect(
                    reverse('ids_projects:data-view',
                            kwargs={'data_uuid': data.uuid}))
            except Exception as e:
                exception_msg = 'Unable to edit data. %s' % e
                logger.error(exception_msg)
                messages.error(request, exception_msg)
                return HttpResponseRedirect(
                    reverse('ids_projects:data-view',
                            kwargs={'data_uuid': data.uuid}))