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