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')
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)