Beispiel #1
0
def multipartite_view_free_sbol(request):
    context = RequestContext(request)
    context.update(csrf(request))
    if request.method == 'POST':
        request_data = request.POST
    else:
        msg = "To get the sequence you need first to assemble parts"
        return HttpResponseBadRequest(msg)

    feats = [request_data['vector']]
    for k in sorted(request_data.keys()):
        if 'part_' in k:
            feats.append(request_data[k])

    form_class = get_multipartite_free_form(feats)
    form = form_class(request_data)
    if form.is_valid():
        last_feat = Feature.objects.get(uniquename=feats[-1])
        last_suffix = last_feat.suffix
        if last_suffix == 'CGCT':
            protocol_data, part_order = _get_fragments_from_request(request)
            assembled_seq = assemble_parts(protocol_data, part_order)
            response = HttpResponse(convert_to_sbol(assembled_seq),
                                    content_type='xml/plain')
            filename = assembled_seq.name + '.xml'
            response['Content-Disposition'] = 'attachment; '
            response['Content-Disposition'] += 'filename="{0}"'.format(filename)
            return response

    return HttpResponseBadRequest('There was an error in the assembly')
Beispiel #2
0
def multipartite_view_free(request, form_num):
    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 = None
    user = request.user
    if form_num is None:
        form = MultipartiteFormFreeInitial()
        form.fields['vector'].widget.choices = get_vector_choices(request.user)
        context['form_num'] = '1'
    else:
        if request_data:
            feats = [request_data['vector']]
            for k in sorted(request_data.keys()):
                if 'part_' in k:
                    feats.append(request_data[k])

            form_class = get_multipartite_free_form(feats)
            form = form_class(request_data)
            if form.is_valid():
                last_feat = Feature.objects.get(uniquename=feats[-1])
                last_suffix = last_feat.suffix.upper()
                if last_suffix == str(Seq(UT_SUFFIX).reverse_complement()):
                    last_suffix = UT_PREFIX
                if last_suffix == 'CGCT':
                    used_parts = OrderedDict({'Vector': feats[0]})
                    part_order = []
                    counters = {}
                    for feat in feats[1:]:
                        feat = Feature.objects.get(uniquename=feat)
                        feat_type = feat.type.name
                        if feat_type in used_parts:
                            if feat_type not in counters:
                                counters[feat_type] = 1
                            counters[feat_type] += 1
                            feat_type = '{0}.{1}'.format(feat_type, counters[feat_type])

                        used_parts[feat_type] = feat.uniquename
                        part_order.append(feat_type)

                    return render_to_response('multipartite_free_result.html',
                                              {'used_parts': used_parts,
                                               'multi_type': 'free',
                                               'post_data': form.cleaned_data,
                                               'order': ":".join(part_order)},
                                      context_instance=RequestContext(request))
                else:
                    # add new_field
                    part_num = len(feats)
                    feats = Feature.objects.filter(prefix__iexact=last_suffix)
                    if user.is_staff:
                        pass
                    elif user.is_authenticated():
                        feats = feats.filter(Q(featureperm__owner__username=user) |
                                             Q(featureperm__is_public=True))

                    else:
                        feats = feats.filter(featureperm__is_public=True)

                    feats = feats.exclude(type__name__in=[VECTOR_TYPE_NAME,
                                                          TU_TYPE_NAME,
                                                          MODULE_TYPE_NAME])
                    choices = features_to_choices(feats)
                    form.fields['part_{0}'.format(part_num)] = forms.CharField(max_length=100,
                                                widget=Select(choices=choices),
                                                required=True)
                    context['form_num'] = str(part_num)

    if form is None:
        form_class = get_multipartite_free_form()
        form = form_class()
        context['form_num'] = '1'

    context['form'] = form
    template = 'multipartite_free_template.html'
    content_type = None
    return render_to_response(template, context, content_type=content_type)