예제 #1
0
def multipartite_view(request, multi_type=None):
    if multi_type is None:
        return render_to_response('multipartite_initial.html', {},
                                  context_instance=RequestContext(request))
    elif multi_type not in PARTS_TO_ASSEMBLE.keys():
        return Http404
    context = RequestContext(request)
    context.update(csrf(request))
    if request.method == 'POST':
        request_data = request.POST
    elif request.method == 'GET':
        request_data = request.GET
    else:
        request_data = None
    form_class = get_multipartite_form(multi_type, request.user)
    if request_data:
        form = form_class(request_data)
        if form.is_valid():
            used_parts = OrderedDict()
            multi_form_data = form.cleaned_data
            for part_type in [p[0] for p in PARTS_TO_ASSEMBLE[multi_type]]:
                used_parts[part_type] = multi_form_data[part_type]
                used_parts[VECTOR_TYPE_NAME] = multi_form_data[VECTOR_TYPE_NAME]
            return render_to_response('multipartite_result.html',
                                      {'used_parts': used_parts,
                                       'multi_type': multi_type},
                                context_instance=RequestContext(request))
    else:
        form = form_class()

    context['form'] = form

    template = 'multipartite_template.html'
    content_type = None
    return render_to_response(template, context, content_type=content_type)
예제 #2
0
def multipartite_view_sbol(request, multi_type=None):
    'view of the multipartite tool'

    if multi_type is None:
        return render_to_response('multipartite_initial.html', {},
                                  context_instance=RequestContext(request))
    elif multi_type not in PARTS_TO_ASSEMBLE.keys():
        return Http404
    context = RequestContext(request)
    context.update(csrf(request))
    if request.method == 'POST':
        request_data = request.POST
    elif request.method == 'GET':
        request_data = request.GET
    else:
        request_data = None
    form_class = get_multipartite_form(multi_type, request.user)
    if request_data:
        form = form_class(request_data)

        if form.is_valid():
            multi_form_data = form.cleaned_data
            part_types = [p[0] for p in PARTS_TO_ASSEMBLE[multi_type]]
            assembled_seq = assemble_parts(multi_form_data, part_types)
            filename = assembled_seq.name + '.xml'
            response = HttpResponse(convert_to_sbol(assembled_seq),
                                    content_type='xml/plain')
            response['Content-Disposition'] = 'attachment; '
            response['Content-Disposition'] += 'filename="{0}"'.format(filename)
            return response
    return HttpResponseBadRequest()
예제 #3
0
def multipartite_view_add(request):
    context = RequestContext(request)
    context.update(csrf(request))
    request_data = request.POST
    if not request_data:
        return render_to_response('goldenbraid_info.html',
                               {'info': "Not enougth data to add the feature"},
                                context_instance=RequestContext(request))
    multi_type = request_data['category']

    allowed_categories = PARTS_TO_ASSEMBLE.keys() + ['free']
    if multi_type is None or multi_type not in allowed_categories:
        return render_to_response('goldenbraid_info.html',
                               {'info': "Not enougth data to add the feature"},
                                context_instance=RequestContext(request))
    if multi_type == 'free':
        part_types = request_data['order'].split(':')
    else:
        part_types = [p[0] for p in PARTS_TO_ASSEMBLE[multi_type]]

    multi_data = {'Vector': request_data['Vector']}
    for part_type in part_types:
        multi_data[part_type] = request_data[part_type]

    assembled_seq = assemble_parts(multi_data, part_types)
    name = request_data['name']
    temp_fhand = NamedTemporaryFile(prefix='{0}.'.format(assembled_seq.id),
                                    suffix='.gb')
    temp_fhand.write(assembled_seq.format('gb'))
    temp_fhand.flush()
    temp_fhand.seek(0)

    props = {'Description': [request_data['description']],
             'Reference': [request_data['reference']]}
    try:
        feature = add_feature(name=name, type_name=TU_TYPE_NAME,
                              vector=request_data['Vector'],
                              genbank=temp_fhand, props=props,
                              owner=request.user, is_public=False)

    except IntegrityError as error:
        print error
        if 'feature already in db' in str(error):
            # TODO choose a template
            return render_to_response('feature_exists.html',
                                      {},
                            context_instance=RequestContext(request))
        else:
            return HttpResponseServerError()
    except Exception as error:
        print error
        return HttpResponseServerError()
    # if everithing os fine we show the just added feature
    return redirect(feature.url)