def importData(request, species_wid=None): if request.method == 'POST': form = ImportDataForm(request.POST or None, request.FILES) if form.is_valid(): selected_species_wid = form.cleaned_data[ 'species'] or form.cleaned_data['new_species'] if selected_species_wid == '' or selected_species_wid is None: form.species.errors += ['Please select a specices'] else: #save to temporary file originalFileName, originalFileExtension = os.path.splitext( request.FILES['file'].name) fid = tempfile.NamedTemporaryFile(suffix=originalFileExtension, delete=False) filename = fid.name for chunk in request.FILES['file'].chunks(): fid.write(chunk) fid.close() #read file if originalFileExtension == '.xlsx': try: batch_import_from_excel(selected_species_wid, filename, request.user) success = True message = 'Data successfully saved!' except ValidationError as error: success = False message = 'Unable to import data: ' + ' '.join( error.messages) elif originalFileExtension == '.fna': success, message = readFasta(selected_species_wid, filename, request.user) else: raise Http404 #delete file os.remove(filename) #render response return render_queryset_to_response( species_wid=species_wid, request=request, templateFile='public/importDataResult.html', data={ 'success': success, 'message': message, }) else: form = ImportDataForm(None) return render_queryset_to_response( species_wid=species_wid, request=request, templateFile='public/importDataForm.html', data={'form': form}, )
def importData(request, species_wid=None): if request.method == 'POST': form = ImportDataForm(request.POST or None, request.FILES) if form.is_valid(): selected_species_wid = form.cleaned_data['species'] or form.cleaned_data['new_species'] if selected_species_wid == '' or selected_species_wid is None: form.species.errors += ['Please select a specices'] else: #save to temporary file originalFileName, originalFileExtension = os.path.splitext(request.FILES['file'].name) fid = tempfile.NamedTemporaryFile(suffix = originalFileExtension, delete = False) filename = fid.name for chunk in request.FILES['file'].chunks(): fid.write(chunk) fid.close() #read file if originalFileExtension == '.xlsx': try: batch_import_from_excel(selected_species_wid, filename, request.user) success = True message = 'Data successfully saved!' except ValidationError as error: success = False message = 'Unable to import data: ' + ' '.join(error.messages) elif originalFileExtension == '.fna': success, message = readFasta(selected_species_wid, filename, request.user) else: raise Http404 #delete file os.remove(filename) #render response return render_queryset_to_response( species_wid = species_wid, request = request, templateFile = 'public/importDataResult.html', data = { 'success': success, 'message': message, }) else: form = ImportDataForm(None) return render_queryset_to_response( species_wid = species_wid, request = request, templateFile = 'public/importDataForm.html', data = { 'form': form}, )
def about(request, species_wid=None): return render_queryset_to_response(species_wid=species_wid, request=request, templateFile='public/about.html', data={ 'ROOT_URL': settings.ROOT_URL, })
def sitemap_toplevel(request): return render_queryset_to_response( request=request, templateFile='public/sitemap_toplevel.xml', data={ 'ROOT_URL': settings.ROOT_URL, })
def sitemap(request): return render_queryset_to_response(request=request, templateFile='public/sitemap.xml', data={ 'ROOT_URL': settings.ROOT_URL, 'qs_species': Species.objects.all(), })
def logout(request, species_wid=None): auth_logout(request) return render_queryset_to_response( species_wid=species_wid, request=request, templateFile='public/logout.html', )
def delete(request, species_wid, wid): #retrieve object obj = getEntry(species_wid=species_wid, wid=wid) if obj is None: raise Http404 model = obj.__class__ qs = objectToQuerySet(obj, model=model) #delete if request.method == 'POST': obj.delete() return HttpResponseRedirect( reverse('public.views.list', kwargs={ 'species_wid': species_wid, 'model_type': model.__name__ })) #confirmation message return render_queryset_to_response( species_wid=species_wid, request=request, models=[model], queryset=qs, templateFile='public/delete.html', data={'model_verbose_name': model._meta.verbose_name})
def login(request, species_wid=None): next = request.REQUEST.get('next', '') if request.method == "POST": form = AuthenticationForm(data=request.POST) if form.is_valid(): auth_login(request, form.get_user()) if request.session.test_cookie_worked(): request.session.delete_test_cookie() return HttpResponseRedirect(next) else: form = AuthenticationForm(request) request.session.set_test_cookie() return render_queryset_to_response( species_wid = species_wid, request = request, templateFile = 'public/login.html', data = { 'form': form, 'next': next, })
def logout(request, species_wid=None): auth_logout(request) return render_queryset_to_response( species_wid = species_wid, request = request, templateFile = 'public/logout.html', )
def contributors(request, species_wid=None): queryset = User.objects.all().filter(is_active=True) return render_queryset_to_response(species_wid=species_wid, request=request, models=[User], queryset=queryset, templateFile='public/contributors.html')
def detail(request, species_wid, wid): obj = getEntry(species_wid = species_wid, wid = wid) if obj is None: raise Http404 model = obj.__class__ model_type = model.__name__ fieldsets = deepcopy(model._meta.fieldsets) #filter out type, metadata fieldset_names = [x[0] for x in fieldsets] if 'Type' in fieldset_names: idx = fieldset_names.index('Type') del fieldsets[idx] #filter out empty fields rmfieldsets = [] for idx in range(len(fieldsets)): rmfields = [] for idx2 in range(len(fieldsets[idx][1]['fields'])): if isinstance(fieldsets[idx][1]['fields'][idx2], dict): field_name = fieldsets[idx][1]['fields'][idx2]['name'] verbose_name = fieldsets[idx][1]['fields'][idx2]['verbose_name'] else: field_name = fieldsets[idx][1]['fields'][idx2] field = model._meta.get_field_by_name(field_name)[0] if isinstance(field, RelatedObject): verbose_name = capfirst(field.get_accessor_name()) else: verbose_name = field.verbose_name data = format_field_detail_view(obj, field_name, request.user.is_anonymous()) if (data is None) or (data == ''): rmfields = [idx2] + rmfields fieldsets[idx][1]['fields'][idx2] = {'verbose_name': verbose_name.replace(" ", ' ').replace("-", "‑"), 'data': data} for idx2 in rmfields: del fieldsets[idx][1]['fields'][idx2] if len(fieldsets[idx][1]['fields']) == 0: rmfieldsets = [idx] + rmfieldsets for idx in rmfieldsets: del fieldsets[idx] #form query set qs = objectToQuerySet(obj, model = model) #render response return render_queryset_to_response( species_wid = species_wid, request = request, models = [model], queryset = qs, templateFile = 'public/detail.html', data = { 'model_type': model_type, 'model': model, 'fieldsets': fieldsets, 'message': request.GET.get('message', ''), })
def contributor(request, username, species_wid=None): queryset = objectToQuerySet(get_object_or_404(User, username=username), model=User) return render_queryset_to_response(species_wid=species_wid, request=request, models=[User], queryset=queryset, templateFile='public/contributor.html')
def sitemap_toplevel(request): return render_queryset_to_response( request = request, templateFile = 'public/sitemap_toplevel.xml', data = { 'ROOT_URL': settings.ROOT_URL, } )
def contributors(request, species_wid=None): queryset = User.objects.all().filter(is_active = True) return render_queryset_to_response( species_wid = species_wid, request = request, models = [User], queryset = queryset, templateFile = 'public/contributors.html')
def contributor(request, username, species_wid=None): queryset = objectToQuerySet(get_object_or_404(User, username = username), model = User) return render_queryset_to_response( species_wid = species_wid, request = request, models = [User], queryset = queryset, templateFile = 'public/contributor.html')
def search_google(request, species_wid, query): return render_queryset_to_response(species_wid=species_wid, request=request, templateFile='public/googleSearch.html', data={ 'query': query, 'engine': 'google', })
def sitemap(request): return render_queryset_to_response( request = request, templateFile = 'public/sitemap.xml', data = { 'ROOT_URL': settings.ROOT_URL, 'qs_species': Species.objects.all(), } )
def about(request, species_wid=None): return render_queryset_to_response( species_wid = species_wid, request = request, templateFile = 'public/about.html', data = { 'ROOT_URL': settings.ROOT_URL, } )
def search_google(request, species_wid, query): return render_queryset_to_response( species_wid = species_wid, request = request, templateFile = 'public/googleSearch.html', data = { 'query': query, 'engine': 'google', })
def sitemap_species(request, species_wid): species = Species.objects.get(wid=species_wid) return render_queryset_to_response( request=request, templateFile='public/sitemap_species.xml', data={ 'ROOT_URL': settings.ROOT_URL, 'species': species, 'entries': SpeciesComponent.objects.filter(species__id=species.id), })
def validate(request, species_wid): errors = get_invalid_objects( Species.objects.values('id').get(wid=species_wid)['id']) return render_queryset_to_response( species_wid=species_wid, request=request, templateFile='public/validate.html', data={'errors': errors}, )
def validate(request, species_wid): errors = get_invalid_objects(Species.objects.values('id').get(wid=species_wid)['id']) return render_queryset_to_response( species_wid = species_wid, request = request, templateFile = 'public/validate.html', data = { 'errors': errors }, )
def sitemap_species(request, species_wid): species = Species.objects.get(wid=species_wid) return render_queryset_to_response( request = request, templateFile = 'public/sitemap_species.xml', data = { 'ROOT_URL': settings.ROOT_URL, 'species': species, 'entries': SpeciesComponent.objects.filter(species__id = species.id), } )
def exportData(request, species_wid=None): getDict = request.GET.copy() if getDict.get('format', ''): getDict.__setitem__('species', getDict.get('species', species_wid)) form = ExportDataForm(getDict or None) if not form.is_valid(): return render_queryset_to_response( species_wid=species_wid, request=request, templateFile='public/exportDataForm.html', data={'form': form}) else: species = Species.objects.get(wid=form.cleaned_data['species']) queryset = EmptyQuerySet() models = [] if form.cleaned_data['all_model_types'] == 'True': model_types = getObjectTypes() else: model_types = form.cleaned_data['model_type'] for model_type in model_types: model = getModel(model_type) if issubclass(model, SpeciesComponent): queryset = chain( queryset, model.objects.filter( species__id=species.id).select_related(depth=2).all()) else: queryset = chain( queryset, model.objects.select_related(depth=2).filter( id=species.id)) models.append(getModel(model_type)) return render_queryset_to_response( species_wid=species_wid, request=request, queryset=queryset, templateFile='public/exportDataResult.html', models=models)
def exportData(request, species_wid=None): getDict = request.GET.copy() if getDict.get('format', ''): getDict.__setitem__('species', getDict.get('species', species_wid)) form = ExportDataForm(getDict or None) if not form.is_valid(): return render_queryset_to_response( species_wid=species_wid, request = request, templateFile = 'public/exportDataForm.html', data = { 'form': form } ) else: species = Species.objects.get(wid = form.cleaned_data['species']) queryset = EmptyQuerySet() models = [] if form.cleaned_data['all_model_types'] == 'True': model_types = getObjectTypes() else: model_types = form.cleaned_data['model_type'] for model_type in model_types: model = getModel(model_type) if issubclass(model, SpeciesComponent): queryset = chain(queryset, model.objects.filter(species__id=species.id).select_related(depth=2).all()) else: queryset = chain(queryset, model.objects.select_related(depth=2).filter(id=species.id)) models.append(getModel(model_type)) return render_queryset_to_response( species_wid = species_wid, request = request, queryset = queryset, templateFile = 'public/exportDataResult.html', models = models)
def search_haystack(request, species_wid, query): #search if species_wid is None: species_wid = Species.objects.all()[0].wid results = SearchQuerySet().filter(species_wid=species_wid).filter( content=query) #calculate facets facets = results.facet('model_type') tmp = facets.facet_counts()['fields']['model_type'] modelNameFacet = [] objectTypes = getObjectTypes() models = [] for tmp2 in tmp: modelName = objectTypes[objectTypes.index(tmp2[0])] modelNameFacet.append({ 'name': modelName, 'verbose_name': getModel(modelName)._meta.verbose_name, 'count': tmp2[1], }) models.append(getModel(modelName)) modelNameFacet.sort(lambda x, y: cmp(x['verbose_name'], y['verbose_name'])) #narrow search by facets model_type = request.GET.get('model_type', '') if model_type: results = results.models(getModel(model_type)) #order results results = results.order_by('wid') #convert results to query set queryset = EmptyQuerySet() for object in results: tmp = object.model.objects.none() tmp._result_cache.append(object.object) queryset = chain(queryset, tmp) #form response return render_queryset_to_response(species_wid=species_wid, request=request, models=models, queryset=queryset, templateFile='public/search.html', data={ 'query': query, 'engine': 'haystack', 'model_type': model_type, 'modelNameFacet': modelNameFacet, })
def search_haystack(request, species_wid, query): #search if species_wid is None: species_wid = Species.objects.all()[0].wid results = SearchQuerySet().filter(species_wid=species_wid).filter(content=query) #calculate facets facets = results.facet('model_type') tmp = facets.facet_counts()['fields']['model_type'] modelNameFacet = [] objectTypes = getObjectTypes() models = [] for tmp2 in tmp: modelName = objectTypes[objectTypes.index(tmp2[0])] modelNameFacet.append({ 'name':modelName, 'verbose_name': getModel(modelName)._meta.verbose_name, 'count':tmp2[1], }) models.append(getModel(modelName)) modelNameFacet.sort(lambda x, y:cmp(x['verbose_name'], y['verbose_name'])) #narrow search by facets model_type = request.GET.get('model_type', '') if model_type: results = results.models(getModel(model_type)) #order results results = results.order_by('wid') #convert results to query set queryset = EmptyQuerySet() for object in results: tmp = object.model.objects.none() tmp._result_cache.append(object.object) queryset = chain(queryset, tmp) #form response return render_queryset_to_response( species_wid = species_wid, request = request, models = models, queryset = queryset, templateFile = 'public/search.html', data = { 'query': query, 'engine': 'haystack', 'model_type': model_type, 'modelNameFacet': modelNameFacet, })
def viewParameterInSimulation(request, species_wid, wid): #get associated simulation property qs = Parameter.objects.filter(species__wid = species_wid, wid=wid) if not qs[0].state is None: sim_class_name = 'edu.stanford.covert.cell.sim.state.%s' % qs[0].state.wid.replace('State_', '') verbose_class_name = '%s: %s' % (wid, qs[0].state.name) else: sim_class_name = 'edu.stanford.covert.cell.sim.process.%s' % qs[0].process.wid.replace('Process_', '') verbose_class_name = '%s: %s' % (wid, qs[0].process.name) sim_property_name = qs[0].name verbose_property_name = qs[0].name #highlight code for simulation class pathParts = sim_class_name.split('.') codePath = "%s/src/+%s/%s.m" % (MODEL_CODE_BASE_DIR, '/+'.join(pathParts[0:-1]), pathParts[-1]) if not os.path.isfile(codePath): codePath = "%s/src/+%s/@%s/%s.m" % (MODEL_CODE_BASE_DIR, '/+'.join(pathParts[0:-1]), pathParts[-1], pathParts[-1]) if os.path.isfile(codePath): with open (codePath, "r") as codeFile: code = codeFile.read() lexer = MatlabLexer() lexer.add_filter(PropertyDefinitionFilter(property_names = [sim_property_name], tokentype=Token.Name.Variable)) tokens = lexer.get_tokens(code) object = { 'class_name': sim_class_name, 'property_names': [sim_property_name], 'code': pygments.format(tokens, PygmentsFormatter(linenos='inline', linenostep=1, style=PygmentsStyle, noclasses=True)), } else: raise Http404 #render response return render_queryset_to_response( species_wid = species_wid, request = request, models = [Parameter], queryset = qs, templateFile = 'public/viewPropertyInSimulation.html', data = { 'object_list': [object], 'verbose_class_name': verbose_class_name, 'verbose_property_name': verbose_property_name, })
def delete(request, species_wid, wid): #retrieve object obj = getEntry(species_wid = species_wid, wid = wid) if obj is None: raise Http404 model = obj.__class__ qs = objectToQuerySet(obj, model = model) #delete if request.method == 'POST': obj.delete() return HttpResponseRedirect(reverse('public.views.list', kwargs={'species_wid':species_wid, 'model_type': model.__name__})) #confirmation message return render_queryset_to_response( species_wid = species_wid, request = request, models = [model], queryset = qs, templateFile = 'public/delete.html', data = { 'model_verbose_name': model._meta.verbose_name } )
def login(request, species_wid=None): next = request.REQUEST.get('next', '') if request.method == "POST": form = AuthenticationForm(data=request.POST) if form.is_valid(): auth_login(request, form.get_user()) if request.session.test_cookie_worked(): request.session.delete_test_cookie() return HttpResponseRedirect(next) else: form = AuthenticationForm(request) request.session.set_test_cookie() return render_queryset_to_response(species_wid=species_wid, request=request, templateFile='public/login.html', data={ 'form': form, 'next': next, })
def detail(request, species_wid, wid): obj = getEntry(species_wid = species_wid, wid = wid) if obj is None: raise Http404 model = obj.__class__ model_type = model.__name__ fieldsets = deepcopy(model._meta.fieldsets) #filter out type, metadata fieldset_names = [x[0] for x in fieldsets] if 'Type' in fieldset_names: idx = fieldset_names.index('Type') del fieldsets[idx] #filter out empty fields rmfieldsets = [] for idx in range(len(fieldsets)): rmfields = [] for idx2 in range(len(fieldsets[idx][1]['fields'])): if isinstance(fieldsets[idx][1]['fields'][idx2], dict): field = fieldsets[idx][1]['fields'][idx2] field_name = field['name'] verbose_name = field['verbose_name'] else: field_name = fieldsets[idx][1]['fields'][idx2] field = model._meta.get_field_by_name(field_name)[0] if isinstance(field, RelatedObject): verbose_name = capfirst(field.get_accessor_name()) else: verbose_name = field.verbose_name data = format_field_detail_view(obj, field_name, request.user.is_anonymous()) if (data is None) or (data == ''): rmfields = [idx2] + rmfields if issubclass(model, Parameter) and field_name == 'value': is_modeled_url = reverse('public.views.viewParameterInSimulation', kwargs = { 'species_wid':species_wid, 'wid': wid, }) elif (isinstance(field, (ForeignKey, ManyToManyField)) and issubclass(field.rel.to, Parameter)) or \ (isinstance(field, (RelatedObject)) and issubclass(field.model, Parameter)): is_modeled_url = reverse('public.views.viewParametersInSimulation', kwargs = { 'species_wid':species_wid, 'wid': wid, }) else: try: if ModelProperty.objects.get(species__wid = species_wid, class_name = model_type, property_name = field_name).simulation_properties.exists(): is_modeled_url = reverse('public.views.viewPropertyInSimulation', kwargs = { 'species_wid':species_wid, 'class_name': model_type, 'property_name': field_name, }) except ObjectDoesNotExist: is_modeled_url = '' fieldsets[idx][1]['fields'][idx2] = { 'name': field_name, 'verbose_name': verbose_name.replace(" ", ' ').replace("-", "‑"), 'data': data, 'is_modeled_url': is_modeled_url, } for idx2 in rmfields: del fieldsets[idx][1]['fields'][idx2] if len(fieldsets[idx][1]['fields']) == 0: rmfieldsets = [idx] + rmfieldsets for idx in rmfieldsets: del fieldsets[idx] #form query set qs = objectToQuerySet(obj, model = model) #render response return render_queryset_to_response( species_wid = species_wid, request = request, models = [model], queryset = qs, templateFile = 'public/detail.html', data = { 'model_type': model_type, 'model': model, 'fieldsets': fieldsets, 'message': request.GET.get('message', ''), })
def viewParametersInSimulation(request, species_wid, wid): obj = getEntry(species_wid = species_wid, wid = wid) if obj is None: raise Http404 model = obj.__class__ verbose_class_name = model._meta.verbose_name verbose_property_name = '%s parameters' % obj.name #get associated simulation property qs = EmptyQuerySet() for field in model._meta.get_all_related_objects() + model._meta.get_all_related_many_to_many_objects(): accessor_name = field.get_accessor_name() if accessor_name == '+': continue if isinstance(field, ForeignKey) and issubclass(field.rel.to, Parameter): qs._result_cache.append(getattr(obj, accessor_name)) if (isinstance(field, ManyToManyField) and issubclass(field.rel.to, Parameter)) or \ (isinstance(field, RelatedObject) and issubclass(field.model, Parameter)): qs2 = getattr(obj, accessor_name).all() if len(qs2) > 0: qs._result_cache.extend(qs2._result_cache) classes = {} for o in qs: if not o.state is None: sim_class_name = 'edu.stanford.covert.cell.sim.state.%s' % o.state.wid.replace('State_', '') else: sim_class_name = 'edu.stanford.covert.cell.sim.process.%s' % o.process.wid.replace('Process_', '') if not classes.has_key(sim_class_name): classes[sim_class_name] = [] classes[sim_class_name].append(o.name) #highlight code for simulation class objects = [] for sim_class_name in classes: sim_property_names = classes[sim_class_name] sim_property_names.sort() pathParts = sim_class_name.split('.') codePath = "%s/src/+%s/%s.m" % (MODEL_CODE_BASE_DIR, '/+'.join(pathParts[0:-1]), pathParts[-1]) if not os.path.isfile(codePath): codePath = "%s/src/+%s/@%s/%s.m" % (MODEL_CODE_BASE_DIR, '/+'.join(pathParts[0:-1]), pathParts[-1], pathParts[-1]) if not os.path.isfile(codePath): continue with open (codePath, "r") as codeFile: code = codeFile.read() lexer = MatlabLexer() lexer.add_filter(PropertyDefinitionFilter(property_names = sim_property_names, tokentype=Token.Name.Variable)) tokens = lexer.get_tokens(code) objects.append({ 'class_name': sim_class_name, 'property_names': sim_property_names, 'code': pygments.format(tokens, PygmentsFormatter(linenos='inline', linenostep=1, style=PygmentsStyle, noclasses=True)), }) #render response return render_queryset_to_response( species_wid = species_wid, request = request, models = [Parameter], queryset = qs, templateFile = 'public/viewPropertyInSimulation.html', data = { 'object_list': objects, 'verbose_class_name': verbose_class_name, 'verbose_property_name': verbose_property_name, })
def detail(request, species_wid, wid): obj = getEntry(species_wid=species_wid, wid=wid) if obj is None: raise Http404 model = obj.__class__ model_type = model.__name__ fieldsets = deepcopy(model._meta.fieldsets) #filter out type, metadata fieldset_names = [x[0] for x in fieldsets] if 'Type' in fieldset_names: idx = fieldset_names.index('Type') del fieldsets[idx] #filter out empty fields rmfieldsets = [] for idx in range(len(fieldsets)): rmfields = [] for idx2 in range(len(fieldsets[idx][1]['fields'])): if isinstance(fieldsets[idx][1]['fields'][idx2], dict): field_name = fieldsets[idx][1]['fields'][idx2]['name'] verbose_name = fieldsets[idx][1]['fields'][idx2][ 'verbose_name'] else: field_name = fieldsets[idx][1]['fields'][idx2] field = model._meta.get_field_by_name(field_name)[0] if isinstance(field, RelatedObject): verbose_name = capfirst(field.get_accessor_name()) else: verbose_name = field.verbose_name data = format_field_detail_view(obj, field_name, request.user.is_anonymous()) if (data is None) or (data == ''): rmfields = [idx2] + rmfields fieldsets[idx][1]['fields'][idx2] = { 'verbose_name': verbose_name.replace(" ", ' ').replace("-", "‑"), 'data': data } for idx2 in rmfields: del fieldsets[idx][1]['fields'][idx2] if len(fieldsets[idx][1]['fields']) == 0: rmfieldsets = [idx] + rmfieldsets for idx in rmfieldsets: del fieldsets[idx] #form query set qs = objectToQuerySet(obj, model=model) #render response return render_queryset_to_response(species_wid=species_wid, request=request, models=[model], queryset=qs, templateFile='public/detail.html', data={ 'model_type': model_type, 'model': model, 'fieldsets': fieldsets, 'message': request.GET.get('message', ''), })
def edit(request, wid=None, model_type=None, species_wid=None, action='edit'): #retrieve object if action == 'edit': obj = getEntry(species_wid = species_wid, wid = wid) if obj is None: raise Http404 model = obj.__class__ else: model = getModel(model_type) obj = model() #save object error_messages = {} if request.method == 'POST': submitted_data = get_edit_form_data(model, request.POST) data = submitted_data data['id'] = obj.id data['species'] = species_wid data['model_type'] = model.__name__ try: #validate is WID unique if issubclass(model, SpeciesComponent): qs = SpeciesComponent.objects.values('wid', 'model_type').filter(species__wid=species_wid) else: qs = model.objects.values('wid', 'model_type').all() if action == 'edit': qs = qs.exclude(id=obj.id) wids = {} for x in qs: wids[x['wid']] = x['model_type'] if data['wid'] in wids.keys(): raise ValidationError({'wid': 'Value must be unique'}) wids[data['wid']] = model.__name__ #validate data = validate_object_fields(model, data, wids, species_wid, data['wid']) validate_model_objects(model, data) validate_model_unique(model, [data]) #save obj = save_object_data(species_wid, obj, data, {}, request.user, save=False, save_m2m=False) obj = save_object_data(species_wid, obj, data, {data['wid']: obj}, request.user, save=True, save_m2m=False) obj = save_object_data(species_wid, obj, data, {data['wid']: obj}, request.user, save=True, save_m2m=True) #redirect to details page return HttpResponseRedirect(obj.get_absolute_url()) except ValidationError as error: error_messages = error.message_dict #form query set if action == 'edit': obj = getEntry(species_wid = species_wid, wid = wid) if obj is None: raise Http404 qs = objectToQuerySet(obj, model = model) else: obj = None qs = model.objects.none() #display form fields, initial_values = get_edit_form_fields(species_wid, model, obj=obj) if request.method == 'POST': initial_values = submitted_data return render_queryset_to_response( species_wid = species_wid, request = request, models = [model], queryset = qs, templateFile = 'public/edit.html', data = { 'model_verbose_name': model._meta.verbose_name, 'action': action, 'fields': fields, 'references_choices': Reference.objects.filter(species__wid = species_wid).values_list('wid'), 'initial_values': initial_values, 'error_messages': error_messages, } )
def edit(request, wid=None, model_type=None, species_wid=None, action='edit'): #retrieve object if action == 'edit': obj = getEntry(species_wid=species_wid, wid=wid) if obj is None: raise Http404 model = obj.__class__ else: model = getModel(model_type) obj = model() #save object error_messages = {} if request.method == 'POST': submitted_data = get_edit_form_data(model, request.POST) data = submitted_data data['id'] = obj.id data['species'] = species_wid data['model_type'] = model.__name__ try: #validate is WID unique if issubclass(model, SpeciesComponent): qs = SpeciesComponent.objects.values( 'wid', 'model_type').filter(species__wid=species_wid) else: qs = model.objects.values('wid', 'model_type').all() if action == 'edit': qs = qs.exclude(id=obj.id) wids = {} for x in qs: wids[x['wid']] = x['model_type'] if data['wid'] in wids.keys(): raise ValidationError({'wid': 'Value must be unique'}) wids[data['wid']] = model.__name__ #validate data = validate_object_fields(model, data, wids, species_wid, data['wid']) validate_model_objects(model, data) validate_model_unique(model, [data]) #save obj = save_object_data(species_wid, obj, data, {}, request.user, save=False, save_m2m=False) obj = save_object_data(species_wid, obj, data, {data['wid']: obj}, request.user, save=True, save_m2m=False) obj = save_object_data(species_wid, obj, data, {data['wid']: obj}, request.user, save=True, save_m2m=True) #redirect to details page return HttpResponseRedirect(obj.get_absolute_url()) except ValidationError as error: error_messages = error.message_dict #form query set if action == 'edit': obj = getEntry(species_wid=species_wid, wid=wid) if obj is None: raise Http404 qs = objectToQuerySet(obj, model=model) else: obj = None qs = model.objects.none() #display form fields, initial_values = get_edit_form_fields(species_wid, model, obj=obj) if request.method == 'POST': initial_values = submitted_data return render_queryset_to_response( species_wid=species_wid, request=request, models=[model], queryset=qs, templateFile='public/edit.html', data={ 'model_verbose_name': model._meta.verbose_name, 'action': action, 'fields': fields, 'references_choices': Reference.objects.filter( species__wid=species_wid).values_list('wid'), 'initial_values': initial_values, 'error_messages': error_messages, })
def list(request, species_wid, model_type): try: getObjectTypes().index(model_type) except ValueError: raise Http404 species = Species.objects.get(wid=species_wid) model = getModel(model_type) objects = model.objects.all().filter(species__id=species.id) facet_fields = [] for field_full_name in model._meta.facet_fields: #facet field_names = str(field_full_name).split('__') tmp_model = model field_verbose_name = [] for field_name in field_names: field = tmp_model._meta.get_field_by_name(field_name)[0] field_verbose_name.append(field.verbose_name) if isinstance(field, (ForeignKey, ManyToManyField)): tmp_model = field.rel.to field_verbose_name = ' › '.join(field_verbose_name) if isinstance(field, (ForeignKey, ManyToManyField)) and not issubclass(field.rel.to, Entry): continue if isinstance(field, (ForeignKey, ManyToManyField)): tmp = model.objects.filter(species__id=species.id).order_by(field_full_name + '__name').values(field_full_name).annotate(count=Count(field_full_name)) else: tmp = model.objects.filter(species__id=species.id).order_by(field_full_name).values(field_full_name).annotate(count=Count(field_full_name)) facets = [] for facet in tmp: value = facet[field_full_name] if value is None or unicode(value) == '': continue if isinstance(field, (ForeignKey, ManyToManyField)): tmp2 = tmp_model.objects.values('wid', 'name').get(id=value) id = tmp2['wid'] name = capfirst(tmp2['name']) elif (field.choices is not None) and (len(field.choices) > 0) and (not isinstance(field, (BooleanField, NullBooleanField))): id = value choices = [x[0] for x in field.choices] if id in choices: name = field.choices[choices.index(id)][1] else: name = capfirst(value) else: id = value name = capfirst(value) if value is not None and unicode(value) != '': facets.append({ 'id': unicode(id), 'name': unicode(name), 'count': facet['count']}) if len(facets) > 1: facet_fields.append({ 'name': field_full_name, 'verbose_name': field_verbose_name, 'facets': facets, }) #filter val = request.GET.get(field_full_name) if val: if isinstance(field, (ForeignKey, ManyToManyField)): kwargs = {field_full_name + '__wid': val} elif isinstance(field, (BooleanField, NullBooleanField)): kwargs = {field_full_name: val == 'True'} elif isinstance(field, (AutoField, BigIntegerField, DecimalField, FloatField, IntegerField, PositiveIntegerField, PositiveSmallIntegerField, SmallIntegerField)): kwargs = {field_full_name: float(val)} else: kwargs = {field_full_name: val} objects = objects.filter(**kwargs) return render_queryset_to_response( species_wid = species_wid, request = request, models = [model], queryset = objects, templateFile = 'public/list.html', data = { 'model_type': model_type, 'model_verbose_name': model._meta.verbose_name, 'model_verbose_name_plural': model._meta.verbose_name_plural, 'facet_fields': facet_fields, })
def tutorial(request, species_wid=None): return render_queryset_to_response( species_wid = species_wid, request = request, templateFile = 'public/tutorial.html')
def index(request, species_wid=None): if species_wid is not None and species_wid != '': species = Species.objects.get(wid=species_wid) else: species = Species.objects.all() if len(species) > 0: species = species[0] else: species = None content = [] if species is not None: content.append([ [ 0, 'Compartments', models.Compartment.objects.filter( species__id=species.id).count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Compartment' }) ], ]) chrs = models.Chromosome.objects.filter(species__id=species.id) chrcontent = chrs.aggregate(length=Sum('length')) gc_content = sum([chr.get_gc_content() * chr.length for chr in chrs]) / chrcontent['length'] content.append([ [ 0, 'Chromosomes', chrs.count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Chromosome' }) ], [1, 'Length', chrcontent['length'], 'nt'], [1, 'GC-content', ('%0.1f' % (gc_content * 100)), '%'], ]) tus = models.TranscriptionUnit.objects.filter( species__id=species.id).annotate(num_genes=Count('genes')) mons = tus.filter(num_genes__lte=1) nPolys = tus.filter(num_genes__gt=1).count() content.append([ [ 0, 'Transcription units', tus.count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'TranscriptionUnit' }) ], [1, 'Monocistrons', tus.count() - nPolys], [1, 'Polycistrons', nPolys], ]) content.append([ [ 0, 'Genes', models.Gene.objects.filter(species__id=species.id).count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Gene' }) ], [ 1, 'mRNA', models.Gene.objects.filter(species__id=species.id, type__wid='mRNA').count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Gene' }) + '?type=mRNA' ], [ 1, 'rRNA', models.Gene.objects.filter(species__id=species.id, type__wid='rRNA').count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Gene' }) + '?type=rRNA' ], [ 1, 'sRNA', models.Gene.objects.filter(species__id=species.id, type__wid='sRNA').count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Gene' }) + '?type=sRNA' ], [ 1, 'tRNA', models.Gene.objects.filter(species__id=species.id, type__wid='tRNA').count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Gene' }) + '?type=tRNA' ], ]) content.append([ [ 0, 'Chromosome features', models.ChromosomeFeature.objects.filter( species__id=species.id).count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'ChromosomeFeature' }), ], [ 1, 'DnaA boxes', models.ChromosomeFeature.objects.filter( species__id=species.id, type__parent__wid='ChromosomeFeature-DnaA_box').count(), ], [ 1, 'Short tandem repeats', models.ChromosomeFeature.objects.filter( species__id=species.id, type__parent__wid='ChromosomeFeature-Short_Tandem_Repeat'). count(), ], [ 1, 'Other', models.ChromosomeFeature.objects.filter( species__id=species.id).exclude( type__parent__wid='ChromosomeFeature-DnaA_box'). exclude( type__parent__wid='ChromosomeFeature-Short_Tandem_Repeat'). count() ], ]) content.append([ [ 0, 'Metabolites', models.Metabolite.objects.filter( species__id=species.id).count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Metabolite' }) ], [ 1, 'Amino acids', models.Metabolite.objects.filter( species__id=species.id, type__wid='amino_acid').count() + models.Metabolite.objects.filter( species__id=species.id, type__wid='modified_amino_acid').count() + models.Metabolite.objects.filter( species__id=species.id, type__wid='non-standard_amino_acid').count() + models.Metabolite.objects.filter( species__id=species.id, type__wid='vitamin_non-standard_amino_acid').count() ], [ 1, 'Antibiotic', models.Metabolite.objects.filter( species__id=species.id, type__wid='antibiotic').count() + models.Metabolite.objects.filter( species__id=species.id, type__parent__wid='antibiotic').count() ], [ 1, 'Gases', models.Metabolite.objects.filter(species__id=species.id, type__wid='gas').count() + models.Metabolite.objects.filter( species__id=species.id, type__parent__wid='gas').count() ], [ 1, 'Ions', models.Metabolite.objects.filter(species__id=species.id, type__wid='ion').count() + models.Metabolite.objects.filter( species__id=species.id, type__parent__wid='ion').count() ], [ 1, 'Lipids', models.Metabolite.objects.filter(species__id=species.id, type__wid='lipid').count() + models.Metabolite.objects.filter( species__id=species.id, type__parent__wid='lipid').count() + models.Metabolite.objects.filter( species__id=species.id, type__parent__parent__wid='lipid').count() ], [ 1, 'Vitamins', models.Metabolite.objects.filter(species__id=species.id, type__wid='vitamin').count() + models.Metabolite.objects.filter( species__id=species.id, type__parent__wid='vitamin').count() ], ]) mons = models.ProteinMonomer.objects.filter(species__id=species.id) cpxs = models.ProteinComplex.objects.filter(species__id=species.id) monDNABind = mons.filter(dna_footprint__length__gt=0).count() monIntMem = mons.filter(localization__wid='m').exclude( signal_sequence__type='lipoprotein').count() + mons.filter( localization__wid='tm').exclude( signal_sequence__type='lipoprotein').count() monLipo = mons.filter(signal_sequence__type='lipoprotein').count() monSecreted = mons.filter(signal_sequence__type='secretory').count() monTermOrg = mons.filter(localization__wid='tc').count() + mons.filter( localization__wid='tm').count() cpxDNABind = cpxs.filter(dna_footprint__length__gt=0).count() content.append([ [0, 'Proteins', mons.count() + cpxs.count()], [ 1, 'Monomers', mons.count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'ProteinMonomer' }) ], [2, 'DNA-binding', monDNABind], [2, 'Integral membrane', monIntMem], [ 2, 'Lipoprotein', monLipo, None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'ProteinMonomer' }) + '?signal_sequence__type=lipoprotein' ], [ 2, 'Secreted', monSecreted, None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'ProteinMonomer' }) + '?signal_sequence__type=secretory' ], [2, 'Terminal organelle', monTermOrg], [ 1, 'Complexes', cpxs.count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'ProteinComplex' }) ], [2, 'DNA-binding', cpxDNABind], ]) rxns = models.Reaction.objects.filter(species__id=species.id) content.append([ [ 0, 'Reactions', rxns.count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Reaction' }) ], [ 1, 'DNA damage', rxns.filter(processes__wid='Process_DNADamage').count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Reaction' }) + '?processes=Process_DNADamage' ], [ 1, 'DNA repair', rxns.filter(processes__wid='Process_DNARepair').count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Reaction' }) + '?processes=Process_DNARepair' ], [ 1, 'Metabolic', rxns.filter(processes__wid='Process_Metabolism').count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Reaction' }) + '?processes=Process_Metabolism' ], [ 1, 'Protein decay', rxns.filter(processes__wid='Process_ProteinDecay').count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Reaction' }) + '?processes=Process_ProteinDecay' ], [ 1, 'Protein modification', rxns.filter( processes__wid='Process_ProteinModification').count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Reaction' }) + '?processes=Process_ProteinModification' ], [ 1, 'Replication Initiation', rxns.filter( processes__wid='Process_ReplicationInitiation').count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Reaction' }) + '?processes=Process_ReplicationInitiation' ], [ 1, 'RNA decay', rxns.filter(processes__wid='Process_RNADecay').count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Reaction' }) + '?processes=Process_RNADecay' ], [ 1, 'RNA modification', rxns.filter(processes__wid='Process_RNAModification').count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Reaction' }) + '?processes=Process_RNAModification' ], [ 1, 'RNA processing', rxns.filter(processes__wid='Process_RNAProcessing').count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Reaction' }) + '?processes=Process_RNAProcessing' ], [ 1, 'Transcription', rxns.filter(processes__wid='Process_Transcription').count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Reaction' }) + '?processes=Process_Transcription' ], [ 1, 'Translation', rxns.filter(processes__wid='Process_Translation').count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Reaction' }) + '?processes=Process_Translation' ], [ 1, 'tRNA aminoacylation', rxns.filter( processes__wid='Process_tRNAAminoacylation').count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Reaction' }) + '?processes=Process_tRNAAminoacylation' ], [ 1, 'Other', rxns.exclude(processes__wid='Process_DNADamage').exclude( processes__wid='Process_DNARepair').exclude( processes__wid='Process_Metabolism').exclude( processes__wid='Process_ProteinDecay'). exclude(processes__wid='Process_ProteinModification').exclude( processes__wid='Process_ReplicationInitiation').exclude( processes__wid='Process_RNADecay').exclude( processes__wid='Process_RNAModification').exclude( processes__wid='Process_RNAProcessing'). exclude(processes__wid='Process_Transcription').exclude( processes__wid='Process_Translation').exclude( processes__wid='Process_tRNAAminoacylation').count() ], ]) tr = models.TranscriptionalRegulation.objects.filter( species__id=species.id) nTus = len(set([x[0] for x in tr.values_list('transcription_unit')])) nTfs = len(set([x[0] for x in tr.values_list('transcription_factor')])) content.append([ [0, 'Transcriptional regulation'], [ 1, 'Interactions', tr.count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'TranscriptionalRegulation' }) ], [1, 'Transcriptional regulators', nTfs], [1, 'Regulated promoters', nTus], ]) content.append([ [ 0, 'Pathways', models.Pathway.objects.filter(species__id=species.id).count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Pathway' }) ], ]) content.append([ [ 0, 'Stimuli', models.Stimulus.objects.filter(species__id=species.id).count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Stimulus' }) ], ]) nCellComp = models.Metabolite.objects.filter( species__id=species.id, biomass_composition__concentration__isnull=False).count() nMediaComp = models.Metabolite.objects.filter( species__id=species.id, media_composition__concentration__isnull=False).count() nKineticsKeq = models.Reaction.objects.filter( species__id=species.id, keq__isnull=False).count() nKineticsKm = \ models.Reaction.objects.filter(species__id = species.id, kinetics_forward__km__isnull=False).count() + \ models.Reaction.objects.filter(species__id = species.id, kinetics_backward__km__isnull=False).count() nKineticsVmax = \ models.Reaction.objects.filter(species__id = species.id, kinetics_forward__vmax__isnull=False).count() + \ models.Reaction.objects.filter(species__id = species.id, kinetics_backward__vmax__isnull=False).count() nRnaExp = models.Gene.objects.filter(species__id=species.id, expression__isnull=False).count() nRnaHl = models.Gene.objects.filter(species__id=species.id, half_life__isnull=False).count() nStimuli = models.Stimulus.objects.filter(species__id=species.id, value__isnull=False).count() nTrAffinity = models.TranscriptionalRegulation.objects.filter( species__id=species.id, affinity__isnull=False).count() nTrActivity = models.TranscriptionalRegulation.objects.filter( species__id=species.id, activity__isnull=False).count() nOther = models.Parameter.objects.filter( species__id=species.id).count() nTotParameters = nCellComp + nMediaComp + nKineticsVmax + nRnaExp + nRnaHl + nStimuli + nTrAffinity + nTrActivity + nOther content.append([ [0, 'Quantitative parameters', nTotParameters], [1, 'Cell composition', nCellComp], [1, 'Media composition', nMediaComp], [1, 'Reaction K<sub>eq</sub>', nKineticsKeq], [1, 'Reaction K<sub>m</sub>', nKineticsKm], [1, 'Reaction V<sub>max</sub>', nKineticsVmax], [1, 'RNA expression', nRnaExp], [1, 'RNA half-lives', nRnaHl], [1, 'Stimulus values', nStimuli], [1, 'Transcr. reg. activity', nTrAffinity], [1, 'Transcr. reg. affinity', nTrActivity], [ 1, 'Other', nOther, None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Parameter' }) ], ]) content.append([ [ 0, 'Processes', models.Process.objects.filter(species__id=species.id).count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'Process' }) ], ]) content.append([ [ 0, 'States', models.State.objects.filter(species__id=species.id).count(), None, reverse('public.views.list', kwargs={ 'species_wid': species.wid, 'model_type': 'State' }) ], ]) nContent = [len(x) for x in content] totContent = sum(nContent) cum = 0 idx = 0 breakIdxs = [0, 0] for x in nContent: cum += x idx += 1 if cum > totContent * 1 / 3 and breakIdxs[0] == 0: breakIdxs[0] = idx if cum > totContent * 2 / 3 and breakIdxs[1] == 0: breakIdxs[1] = idx contentCol1 = [] contentCol2 = [] contentCol3 = [] i = 0 for x in content[:breakIdxs[0]]: i += 1 for y in x: contentCol1.append([i] + y) i = 0 for x in content[breakIdxs[0]:breakIdxs[1]]: i += 1 for y in x: contentCol2.append([i] + y) i = 0 for x in content[breakIdxs[1]:]: i += 1 for y in x: contentCol3.append([i] + y) sources = { 'total': 0, 'types': [], 'dates': [], 'evidence_parameters': [], 'evidence_species': [], 'evidence_media': [], 'evidence_pH': [], 'evidence_temperature': [], } if species is not None: refs = models.Reference.objects.filter(species__id=species.id) sources['total'] = refs.count() sources['types'] = [ { 'type': 'Articles', 'count': refs.filter(species__id=species.id, type__wid='article').count() }, { 'type': 'Books', 'count': refs.filter(species__id=species.id, type__wid='book').count() }, { 'type': 'Thesis', 'count': refs.filter(species__id=species.id, type__wid='thesis').count() }, { 'type': 'Other', 'count': refs.filter(species__id=species.id, type__wid='misc').count() }, ] sources['dates'] = refs.filter( year__isnull=False).order_by('year').values('year').annotate( count=Count('year')) nEstimated = models.Parameter.objects.filter( species__id=species.id, value__evidence__is_experimentally_constrained=False).count() nExpConstrained = nTotParameters - nEstimated sources['evidence_parameters'] = [ { 'type': 'Experimentally constrained', 'count': nExpConstrained }, { 'type': 'Computationally estimated', 'count': nEstimated }, ] sources['evidence_species'] = models.Evidence.objects.filter( species_component__species__id=species.id).values( 'species').annotate(count=Count('id')) sources['evidence_media'] = models.Evidence.objects.filter( species_component__species__id=species.id).values( 'media').annotate(count=Count('id')) sources['evidence_pH'] = models.Evidence.objects.filter( species_component__species__id=species.id).values('pH').annotate( count=Count('id')) sources['evidence_temperature'] = models.Evidence.objects.filter( species_component__species__id=species.id).values( 'temperature').annotate(count=Count('id')) return render_queryset_to_response( species_wid=species_wid, data={ 'content': [contentCol1, contentCol2, contentCol3], 'contentRows': range(max(len(contentCol1), len(contentCol2), len(contentCol3))), 'sources': sources, }, request=request, templateFile='public/index.html')
def viewPropertyInSimulation(request, species_wid, class_name, property_name): #get model model = getModel(class_name) #get verbose class name verbose_class_name = model._meta.verbose_name #get verbose property name verbose_property_name = property_name for fieldset in model._meta.fieldsets: for field in fieldset[1]['fields']: if isinstance(field, (str, unicode)) and field == property_name: tmp = model._meta.get_field_by_name(property_name) if len(tmp) > 0: verbose_property_name = tmp[0].verbose_name if isinstance(field, dict) and field['name'] == property_name: verbose_property_name = field['verbose_name'] #get associated simulation code properties qs = ModelProperty.objects.get( species__wid = species_wid, class_name = class_name, property_name = property_name ).simulation_properties.all().order_by('class_name', 'property_name') #organize simulation code properties by class classes = {} for object in qs: if not classes.has_key(object.class_name): classes[object.class_name] = [] classes[object.class_name].append(object.property_name) #highlight code for each simulation class object_list = [] for sim_class_name in classes: sim_property_names = classes[sim_class_name] sim_property_names.sort() pathParts = sim_class_name.split('.') codePath = "%s/src/+%s/%s.m" % (MODEL_CODE_BASE_DIR, '/+'.join(pathParts[0:-1]), pathParts[-1]) if not os.path.isfile(codePath): codePath = "%s/src/+%s/@%s/%s.m" % (MODEL_CODE_BASE_DIR, '/+'.join(pathParts[0:-1]), pathParts[-1], pathParts[-1]) if not os.path.isfile(codePath): continue with open (codePath, "r") as codeFile: code = codeFile.read() lexer = MatlabLexer() lexer.add_filter(PropertyDefinitionFilter(property_names = sim_property_names, tokentype=Token.Name.Variable)) tokens = lexer.get_tokens(code) object_list.append({ 'class_name': sim_class_name, 'property_names': sim_property_names, 'code': pygments.format(tokens, PygmentsFormatter(linenos='inline', linenostep=1, style=PygmentsStyle, noclasses=True)), }) #render response return render_queryset_to_response( species_wid = species_wid, request = request, models = [SimulationProperty], queryset = qs, templateFile = 'public/viewPropertyInSimulation.html', data = { 'object_list': object_list, 'verbose_class_name': verbose_class_name, 'verbose_property_name': verbose_property_name, })
def index(request, species_wid=None): if species_wid is not None and species_wid != '': species = Species.objects.get(wid=species_wid) else: species = Species.objects.all() if len(species) > 0: species = species[0] else: species = None content = [] if species is not None: content.append([ [0, 'Compartments', models.Compartment.objects.filter(species__id = species.id).count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Compartment'})], ]) chrs = models.Chromosome.objects.filter(species__id = species.id) chrcontent = chrs.aggregate(length=Sum('length')); gc_content = sum([chr.get_gc_content() * chr.length for chr in chrs]) / chrcontent['length'] content.append([ [0, 'Chromosomes', chrs.count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Chromosome'})], [1, 'Length', chrcontent['length'], 'nt'], [1, 'GC-content', ('%0.1f' % (gc_content * 100)), '%'], ]) tus = models.TranscriptionUnit.objects.filter(species__id = species.id).annotate(num_genes = Count('genes')) mons = tus.filter(num_genes__lte = 1) nPolys = tus.filter(num_genes__gt = 1).count() content.append([ [0, 'Transcription units', tus.count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'TranscriptionUnit'})], [1, 'Monocistrons', tus.count() - nPolys], [1, 'Polycistrons', nPolys], ]) content.append([ [0, 'Genes', models.Gene.objects.filter(species__id = species.id).count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Gene'})], [1, 'mRNA', models.Gene.objects.filter(species__id = species.id, type__wid='mRNA').count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Gene'}) + '?type=mRNA'], [1, 'rRNA', models.Gene.objects.filter(species__id = species.id, type__wid='rRNA').count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Gene'}) + '?type=rRNA'], [1, 'sRNA', models.Gene.objects.filter(species__id = species.id, type__wid='sRNA').count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Gene'}) + '?type=sRNA'], [1, 'tRNA', models.Gene.objects.filter(species__id = species.id, type__wid='tRNA').count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Gene'}) + '?type=tRNA'], ]) content.append([ [0, 'Chromosome features', models.ChromosomeFeature.objects.filter(species__id = species.id).count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'ChromosomeFeature'}), ], [1, 'DnaA boxes', models.ChromosomeFeature.objects.filter(species__id = species.id, type__parent__wid='ChromosomeFeature-DnaA_box').count(), ], [1, 'Short tandem repeats', models.ChromosomeFeature.objects.filter(species__id = species.id, type__parent__wid='ChromosomeFeature-Short_Tandem_Repeat').count(), ], [1, 'Other', models.ChromosomeFeature.objects.filter(species__id = species.id).exclude(type__parent__wid='ChromosomeFeature-DnaA_box').exclude(type__parent__wid='ChromosomeFeature-Short_Tandem_Repeat').count()], ]) content.append([ [0, 'Metabolites', models.Metabolite.objects.filter(species__id = species.id).count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Metabolite'})], [1, 'Amino acids', models.Metabolite.objects.filter(species__id = species.id, type__wid='amino_acid').count() + models.Metabolite.objects.filter(species__id = species.id, type__wid='modified_amino_acid').count() + models.Metabolite.objects.filter(species__id = species.id, type__wid='non-standard_amino_acid').count() + models.Metabolite.objects.filter(species__id = species.id, type__wid='vitamin_non-standard_amino_acid').count() ], [1, 'Antibiotic', models.Metabolite.objects.filter(species__id = species.id, type__wid='antibiotic').count() + models.Metabolite.objects.filter(species__id = species.id, type__parent__wid='antibiotic').count() ], [1, 'Gases', models.Metabolite.objects.filter(species__id = species.id, type__wid='gas').count() + models.Metabolite.objects.filter(species__id = species.id, type__parent__wid='gas').count() ], [1, 'Ions', models.Metabolite.objects.filter(species__id = species.id, type__wid='ion').count() + models.Metabolite.objects.filter(species__id = species.id, type__parent__wid='ion').count() ], [1, 'Lipids', models.Metabolite.objects.filter(species__id = species.id, type__wid='lipid').count() + models.Metabolite.objects.filter(species__id = species.id, type__parent__wid='lipid').count() + models.Metabolite.objects.filter(species__id = species.id, type__parent__parent__wid='lipid').count() ], [1, 'Vitamins', models.Metabolite.objects.filter(species__id = species.id, type__wid='vitamin').count() + models.Metabolite.objects.filter(species__id = species.id, type__parent__wid='vitamin').count() ], ]) mons = models.ProteinMonomer.objects.filter(species__id = species.id) cpxs = models.ProteinComplex.objects.filter(species__id = species.id) monDNABind = mons.filter(dna_footprint__length__gt=0).count() monIntMem = mons.filter(localization__wid = 'm').exclude(signal_sequence__type = 'lipoprotein').count() + mons.filter(localization__wid = 'tm').exclude(signal_sequence__type = 'lipoprotein').count() monLipo = mons.filter(signal_sequence__type = 'lipoprotein').count() monSecreted = mons.filter(signal_sequence__type = 'secretory').count() monTermOrg = mons.filter(localization__wid = 'tc').count() + mons.filter(localization__wid = 'tm').count() cpxDNABind = cpxs.filter(dna_footprint__length__gt=0).count() content.append([ [0, 'Proteins', mons.count() + cpxs.count()], [1, 'Monomers', mons.count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'ProteinMonomer'})], [2, 'DNA-binding', monDNABind], [2, 'Integral membrane', monIntMem], [2, 'Lipoprotein', monLipo, None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'ProteinMonomer'}) + '?signal_sequence__type=lipoprotein'], [2, 'Secreted', monSecreted, None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'ProteinMonomer'}) + '?signal_sequence__type=secretory'], [2, 'Terminal organelle', monTermOrg], [1, 'Complexes', cpxs.count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'ProteinComplex'})], [2, 'DNA-binding', cpxDNABind], ]) rxns = models.Reaction.objects.filter(species__id = species.id) content.append([ [0, 'Reactions', rxns.count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Reaction'})], [1, 'DNA damage', rxns.filter(processes__wid='Process_DNADamage').count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Reaction'}) + '?processes=Process_DNADamage'], [1, 'DNA repair', rxns.filter(processes__wid='Process_DNARepair').count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Reaction'}) + '?processes=Process_DNARepair'], [1, 'Metabolic', rxns.filter(processes__wid='Process_Metabolism').count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Reaction'}) + '?processes=Process_Metabolism'], [1, 'Protein decay', rxns.filter(processes__wid='Process_ProteinDecay').count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Reaction'}) + '?processes=Process_ProteinDecay'], [1, 'Protein modification', rxns.filter(processes__wid='Process_ProteinModification').count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Reaction'}) + '?processes=Process_ProteinModification'], [1, 'Replication Initiation', rxns.filter(processes__wid='Process_ReplicationInitiation').count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Reaction'}) + '?processes=Process_ReplicationInitiation'], [1, 'RNA decay', rxns.filter(processes__wid='Process_RNADecay').count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Reaction'}) + '?processes=Process_RNADecay'], [1, 'RNA modification', rxns.filter(processes__wid='Process_RNAModification').count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Reaction'}) + '?processes=Process_RNAModification'], [1, 'RNA processing', rxns.filter(processes__wid='Process_RNAProcessing').count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Reaction'}) + '?processes=Process_RNAProcessing'], [1, 'Transcription', rxns.filter(processes__wid='Process_Transcription').count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Reaction'}) + '?processes=Process_Transcription'], [1, 'Translation', rxns.filter(processes__wid='Process_Translation').count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Reaction'}) + '?processes=Process_Translation'], [1, 'tRNA aminoacylation', rxns.filter(processes__wid='Process_tRNAAminoacylation').count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Reaction'}) + '?processes=Process_tRNAAminoacylation'], [1, 'Other', rxns.exclude(processes__wid='Process_DNADamage') .exclude(processes__wid='Process_DNARepair') .exclude(processes__wid='Process_Metabolism') .exclude(processes__wid='Process_ProteinDecay') .exclude(processes__wid='Process_ProteinModification') .exclude(processes__wid='Process_ReplicationInitiation') .exclude(processes__wid='Process_RNADecay') .exclude(processes__wid='Process_RNAModification') .exclude(processes__wid='Process_RNAProcessing') .exclude(processes__wid='Process_Transcription') .exclude(processes__wid='Process_Translation') .exclude(processes__wid='Process_tRNAAminoacylation') .count()], ]) tr = models.TranscriptionalRegulation.objects.filter(species__id = species.id) nTus = len(set([x[0] for x in tr.values_list('transcription_unit')])) nTfs = len(set([x[0] for x in tr.values_list('transcription_factor')])) content.append([ [0, 'Transcriptional regulation'], [1, 'Interactions', tr.count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'TranscriptionalRegulation'})], [1, 'Transcriptional regulators', nTfs], [1, 'Regulated promoters', nTus], ]) content.append([ [0, 'Pathways', models.Pathway.objects.filter(species__id = species.id).count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Pathway'})], ]) content.append([ [0, 'Stimuli', models.Stimulus.objects.filter(species__id = species.id).count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Stimulus'})], ]) nCellComp = models.Metabolite.objects.filter(species__id = species.id, biomass_composition__concentration__isnull=False).count() nMediaComp = models.Metabolite.objects.filter(species__id = species.id, media_composition__concentration__isnull=False).count() nKineticsKeq = models.Reaction.objects.filter(species__id = species.id, keq__isnull=False).count() nKineticsKm = \ models.Reaction.objects.filter(species__id = species.id, kinetics_forward__km__isnull=False).count() + \ models.Reaction.objects.filter(species__id = species.id, kinetics_backward__km__isnull=False).count() nKineticsVmax = \ models.Reaction.objects.filter(species__id = species.id, kinetics_forward__vmax__isnull=False).count() + \ models.Reaction.objects.filter(species__id = species.id, kinetics_backward__vmax__isnull=False).count() nRnaExp = models.Gene.objects.filter(species__id = species.id, expression__isnull=False).count() nRnaHl = models.Gene.objects.filter(species__id = species.id, half_life__isnull=False).count() nStimuli = models.Stimulus.objects.filter(species__id = species.id, value__isnull=False).count() nTrAffinity = models.TranscriptionalRegulation.objects.filter(species__id = species.id, affinity__isnull=False).count() nTrActivity = models.TranscriptionalRegulation.objects.filter(species__id = species.id, activity__isnull=False).count() nOther = models.Parameter.objects.filter(species__id = species.id).count() nTotParameters = nCellComp + nMediaComp + nKineticsVmax + nRnaExp + nRnaHl + nStimuli + nTrAffinity + nTrActivity + nOther content.append([ [0, 'Quantitative parameters', nTotParameters], [1, 'Cell composition', nCellComp], [1, 'Media composition', nMediaComp], [1, 'Reaction K<sub>eq</sub>', nKineticsKeq], [1, 'Reaction K<sub>m</sub>', nKineticsKm], [1, 'Reaction V<sub>max</sub>', nKineticsVmax], [1, 'RNA expression', nRnaExp], [1, 'RNA half-lives', nRnaHl], [1, 'Stimulus values', nStimuli], [1, 'Transcr. reg. activity', nTrAffinity], [1, 'Transcr. reg. affinity', nTrActivity], [1, 'Other', nOther, None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Parameter'})], ]) content.append([ [0, 'Processes', models.Process.objects.filter(species__id = species.id).count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'Process'})], ]) content.append([ [0, 'States', models.State.objects.filter(species__id = species.id).count(), None, reverse('public.views.list', kwargs={'species_wid': species.wid, 'model_type': 'State'})], ]) nContent = [len(x) for x in content] totContent = sum(nContent) cum = 0 idx = 0 breakIdxs = [0, 0] for x in nContent: cum += x idx += 1 if cum > totContent * 1/ 3 and breakIdxs[0] == 0: breakIdxs[0] = idx if cum > totContent * 2 / 3 and breakIdxs[1] == 0: breakIdxs[1] = idx contentCol1 = [] contentCol2 = [] contentCol3 = [] i = 0 for x in content[:breakIdxs[0]]: i += 1 for y in x: contentCol1.append([i] + y) i = 0 for x in content[breakIdxs[0]:breakIdxs[1]]: i += 1 for y in x: contentCol2.append([i] + y) i = 0 for x in content[breakIdxs[1]:]: i += 1 for y in x: contentCol3.append([i] + y) sources = { 'total': 0, 'types': [], 'dates': [], 'evidence_parameters': [], 'evidence_species': [], 'evidence_media': [], 'evidence_pH': [], 'evidence_temperature': [], } if species is not None: refs = models.Reference.objects.filter(species__id = species.id) sources['total'] = refs.count() sources['types'] = [ {'type': 'Articles', 'count': refs.filter(species__id = species.id, type__wid='article').count()}, {'type': 'Books', 'count': refs.filter(species__id = species.id, type__wid='book').count()}, {'type': 'Thesis', 'count': refs.filter(species__id = species.id, type__wid='thesis').count()}, {'type': 'Other', 'count': refs.filter(species__id = species.id, type__wid='misc').count()}, ] sources['dates'] = refs.filter(year__isnull=False).order_by('year').values('year').annotate(count=Count('year')) nEstimated = models.Parameter.objects.filter(species__id = species.id, value__evidence__is_experimentally_constrained=False).count() nExpConstrained = nTotParameters - nEstimated sources['evidence_parameters'] = [ {'type': 'Experimentally constrained', 'count': nExpConstrained}, {'type': 'Computationally estimated', 'count': nEstimated}, ] sources['evidence_species'] = models.Evidence.objects.filter(species_component__species__id = species.id).values('species').annotate(count = Count('id')) sources['evidence_media'] = models.Evidence.objects.filter(species_component__species__id = species.id).values('media').annotate(count = Count('id')) sources['evidence_pH'] = models.Evidence.objects.filter(species_component__species__id = species.id).values('pH').annotate(count = Count('id')) sources['evidence_temperature'] = models.Evidence.objects.filter(species_component__species__id = species.id).values('temperature').annotate(count = Count('id')) return render_queryset_to_response( species_wid = species_wid, data = { 'content': [contentCol1, contentCol2, contentCol3], 'contentRows': range(max(len(contentCol1), len(contentCol2), len(contentCol3))), 'sources': sources, }, request = request, templateFile = 'public/index.html')
def tutorial(request, species_wid=None): return render_queryset_to_response(species_wid=species_wid, request=request, templateFile='public/tutorial.html')
def list(request, species_wid, model_type): try: getObjectTypes().index(model_type) except ValueError: raise Http404 species = Species.objects.get(wid=species_wid) model = getModel(model_type) objects = model.objects.all().filter(species__id=species.id) facet_fields = [] for field_full_name in model._meta.facet_fields: #facet field_names = str(field_full_name).split('__') tmp_model = model field_verbose_name = [] for field_name in field_names: field = tmp_model._meta.get_field_by_name(field_name)[0] field_verbose_name.append(field.verbose_name) if isinstance(field, (ForeignKey, ManyToManyField)): tmp_model = field.rel.to field_verbose_name = ' › '.join(field_verbose_name) if isinstance(field, (ForeignKey, ManyToManyField)) and not issubclass( field.rel.to, Entry): continue if isinstance(field, (ForeignKey, ManyToManyField)): tmp = model.objects.filter(species__id=species.id).order_by( field_full_name + '__name').values(field_full_name).annotate( count=Count(field_full_name)) else: tmp = model.objects.filter(species__id=species.id).order_by( field_full_name).values(field_full_name).annotate( count=Count(field_full_name)) facets = [] for facet in tmp: value = facet[field_full_name] if value is None or unicode(value) == '': continue if isinstance(field, (ForeignKey, ManyToManyField)): tmp2 = tmp_model.objects.values('wid', 'name').get(id=value) id = tmp2['wid'] name = capfirst(tmp2['name']) elif (field.choices is not None) and (len(field.choices) > 0) and ( not isinstance(field, (BooleanField, NullBooleanField))): id = value choices = [x[0] for x in field.choices] if id in choices: name = field.choices[choices.index(id)][1] else: name = capfirst(value) else: id = value name = capfirst(value) if value is not None and unicode(value) != '': facets.append({ 'id': unicode(id), 'name': unicode(name), 'count': facet['count'] }) if len(facets) > 1: facet_fields.append({ 'name': field_full_name, 'verbose_name': field_verbose_name, 'facets': facets, }) #filter val = request.GET.get(field_full_name) if val: if isinstance(field, (ForeignKey, ManyToManyField)): kwargs = {field_full_name + '__wid': val} elif isinstance(field, (BooleanField, NullBooleanField)): kwargs = {field_full_name: val == 'True'} elif isinstance(field, (AutoField, BigIntegerField, DecimalField, FloatField, IntegerField, PositiveIntegerField, PositiveSmallIntegerField, SmallIntegerField)): kwargs = {field_full_name: float(val)} else: kwargs = {field_full_name: val} objects = objects.filter(**kwargs) return render_queryset_to_response(species_wid=species_wid, request=request, models=[model], queryset=objects, templateFile='public/list.html', data={ 'model_type': model_type, 'model_verbose_name': model._meta.verbose_name, 'model_verbose_name_plural': model._meta.verbose_name_plural, 'facet_fields': facet_fields, })
sources['evidence_parameters'] = [ {'type': 'Experimentally constrained', 'count': nExpConstrained}, {'type': 'Computationally estimated', 'count': nEstimated}, ] sources['evidence_species'] = models.Evidence.objects.filter(species_component__species__id = species.id).values('species').annotate(count = Count('id')) sources['evidence_media'] = models.Evidence.objects.filter(species_component__species__id = species.id).values('media').annotate(count = Count('id')) sources['evidence_pH'] = models.Evidence.objects.filter(species_component__species__id = species.id).values('pH').annotate(count = Count('id')) sources['evidence_temperature'] = models.Evidence.objects.filter(species_component__species__id = species.id).values('temperature').annotate(count = Count('id')) return render_queryset_to_response( request = request, species_wid = species_wid, data = { 'content': [contentCol1, contentCol2, contentCol3], 'contentRows': range(max(len(contentCol1), len(contentCol2), len(contentCol3))), 'sources': sources, }, templateFile = 'public/index.html') def about(request, species_wid=None): return render_queryset_to_response( species_wid = species_wid, request = request, templateFile = 'public/about.html', data = { 'ROOT_URL': settings.ROOT_URL, } )