def get_multipartite_form(multi_type, user): 'It returns a form for the given multipartite' form_fields = OrderedDict() part_defs = PARTS_TO_ASSEMBLE[multi_type] for parts in part_defs: features = Feature.objects.filter(type__name=parts[0], prefix=parts[1], suffix=parts[2]) features = filter_feature_by_user_perms(features, user) choices = features_to_choices(features) name = parts[0] form_fields[name] = forms.CharField(max_length=100, widget=Select(choices=choices)) # last we need to add the vector to the form vector_choices = get_vector_choices(user) form_fields[VECTOR_TYPE_NAME] = forms.CharField(max_length=100, widget=Select(choices=vector_choices)) form = type('MultiPartiteForm', (forms.BaseForm,), {'base_fields': form_fields}) for field_name in form_fields.keys(): setattr(form, 'clean_{0}'.format(field_name), create_feature_validator(field_name)) return form
def get_bipart_vector_choices(part_uniquename, user): part = Feature.objects.get(uniquename=part_uniquename) part_enzyme_out = part.enzyme_out[0] vectors = Feature.objects.filter(type__name=VECTOR_TYPE_NAME) vectors = vectors.filter(featureprop__type__name=ENZYME_IN_TYPE_NAME, featureprop__value=part_enzyme_out) vectors = filter_feature_by_user_perms(vectors, user) return _vectors_to_choice(vectors)
def get_part1_choice(user): _bi_parts = Feature.objects.filter(type__name__in=BIPARTITE_ALLOWED_PARTS) _parts = _bi_parts.filter(prefix=SITE_A, suffix=SITE_C) _parts = filter_feature_by_user_perms(_parts, user) parts_forw = _parts.filter(vector__prefix=SITE_B, vector__suffix=SITE_A) parts_rev = _parts.filter(vector__prefix=Seq(SITE_A).reverse_complement(), vector__suffix=Seq(SITE_B).reverse_complement()) part_forw_choices = features_to_choices(parts_forw, blank_line=False) part_rev_choices = features_to_choices(parts_rev, blank_line=False) part_choices = (('', ''), ('Forward parts', part_forw_choices), ('Reverse parts', part_rev_choices)) return part_choices
def get_part2_choices(part1_uniquename, user): part1 = Feature.objects.get(uniquename=part1_uniquename) part1_enzyme_out = part1.enzyme_out bi_parts = Feature.objects.filter(type__name__in=BIPARTITE_ALLOWED_PARTS) parts = bi_parts.filter(prefix=SITE_C, suffix=SITE_B) parts = filter_feature_by_user_perms(parts, user) parts_forw = parts.filter(vector__prefix=SITE_B, vector__suffix=SITE_A) parts_rev = parts.filter(vector__prefix=Seq(SITE_A).reverse_complement(), vector__suffix=Seq(SITE_B).reverse_complement()) part_forw_choices = [] for part in parts_forw: if part.enzyme_out == part1_enzyme_out: uniquename = part.uniquename.encode('utf-8') if part.name: show = u'{0} - {1}'.format(uniquename, part.name) else: show = uniquename part_forw_choices.append((uniquename, show)) part_rev_choices = [] for part in parts_rev: if part.enzyme_out == part1_enzyme_out: uniquename = part.uniquename.encode('utf-8') if part.name: show = u'{0} - {1}'.format(uniquename, part.name) else: show = uniquename part_rev_choices.append((uniquename, show)) part_forw_choices = sorted(part_forw_choices, key=itemgetter(0)) part_rev_choices = sorted(part_rev_choices, key=itemgetter(0)) part_choices = (('', ''), ('Forward parts', part_forw_choices), ('Reverse parts', part_rev_choices)) return part_choices
def get_vector_choices(user): vectors = Feature.objects.filter(type__name=VECTOR_TYPE_NAME) vectors = filter_feature_by_user_perms(vectors, user) vector_choices = _vectors_to_choice(vectors) return vector_choices
def get_all_vectors_as_choices(user): vectors = Feature.objects.filter(type__name=VECTOR_TYPE_NAME) vectors = filter_feature_by_user_perms(vectors, user) return features_to_choices(vectors, blank_line=True)