def search(request): results = dict(analysis=[], project=[], data=[], job=[]) # Search each model type by title, text, owner email/name. search_fields = ['name', 'text', 'owner__email', 'owner__profile__name'] # Get the objects the user can access projects = get_project_list(user=request.user) model_map = { "job": Job.objects.filter(project__in=projects), "analysis": Analysis.objects.filter(project__in=projects), "data": Data.objects.filter(project__in=projects), "project": projects } # Create a search form for each model type. for mtype in results: queryset = model_map[mtype] # Load query from GET request. search_form = SearchForm(queryset=queryset, search_fields=search_fields, data=request.GET or {}) # Add search results to dict if search_form.is_valid(): results[mtype] = search_form.get_queryset() return results
def recycle_bin(request): "Recycle bin view for a user" user = request.user if user.is_superuser: # Super users get access to all deleted objects. projects = Project.objects.all() query_dict = dict(project__in=projects) else: # Only searches projects user have access. projects = auth.get_project_list(user=user, include_deleted=True) query_dict = dict(project__in=projects, owner=user) projects = projects.filter(deleted=True).order_by("date") data = Data.objects.filter(**query_dict, deleted=True).order_by("date") recipes = Analysis.objects.filter(**query_dict, deleted=True).order_by("date") jobs = Job.objects.filter(**query_dict, deleted=True).order_by("date") context = dict(jobs=jobs, data=data, recipes=recipes, projects=projects, active="bin") return render(request, 'recycle_bin.html', context=context)
def project_list(request, target=None): if target == 'private' and request.user.is_authenticated: active = "private" projects = auth.get_project_list(user=request.user, include_public=False) else: projects = auth.get_project_list(user=request.user) projects = projects.exclude( privacy__in=[Project.PRIVATE, Project.SHAREABLE]) active = "public" projects = projects.order_by("rank", "-date", "-lastedit_date", "-id") context = dict(projects=projects, active=active) return render(request, "project_list.html", context=context)
def search(request): """ Searches recipes """ results = [] # Search each model type by title, text, owner email/name. search_fields = ['name', 'text', 'owner__email', 'owner__profile__name'] # Get the objects the user can access projects = get_project_list(user=request.user) recipes = Analysis.objects.filter(project__in=projects, root=None, deleted=False) # Load query from GET request. search_form = SearchForm(queryset=recipes, search_fields=search_fields, data=request.GET or {}) # Add search results to dict if search_form.is_valid(): results = search_form.get_queryset() return results
def recycle_bin(request): "Recycle bin view for a user" user = request.user BIN_LIMIT = 200 if user.is_superuser: # Super users get access to all deleted objects. projects = Project.objects.all() query_dict = dict(project__in=projects) else: # Only searches projects user have access. projects = auth.get_project_list(user=user, include_deleted=True) query_dict = dict(project__in=projects, owner=user) projects = projects.filter(deleted=True).order_by("-lastedit_date")[:BIN_LIMIT] # Filter data, recipes, and jobs according to projects user has access to. data = Data.objects.filter(**query_dict, deleted=True).order_by("-lastedit_date")[:BIN_LIMIT] recipes = Analysis.objects.filter(**query_dict, deleted=True).order_by("-lastedit_date")[:BIN_LIMIT] jobs = Job.objects.filter(**query_dict, deleted=True).order_by("-lastedit_date")[:BIN_LIMIT] deleted = [] for obj in [projects, data, recipes, jobs]: for item in obj: deleted.append(item) deleted = sorted(deleted, key=lambda x: x.lastedit_date, reverse=True) context = dict(deleted=deleted, active="bin") return render(request, 'recycle_bin.html', context=context)
def project_list_private(request): user = request.user projects = auth.get_project_list(user=user) # Filter for private projects #projects = projects.filter(privacy=Project.PRIVATE) projects = projects.order_by("rank", "-date", "-lastedit_date", "-id") context = dict(projects=projects, active="private") return render(request, "project_list.html", context=context)
def list_projects(context, target): user = context["request"].user request = context["request"] projects = auth.get_project_list(user=target).filter(owner=target) # Don't show private projects non owners if user != target: projects = projects.exclude(privacy=Project.PRIVATE) projects = projects.order_by("-rank", "-lastedit_date") return dict(projects=projects, user=user, target=target)
def project_list(request): user = request.user projects = auth.get_project_list(user=user) page = request.GET.get("page") projects = projects.order_by("-rank") # Add pagination. paginator = Paginator(projects, per_page=settings.PER_PAGE) projects = paginator.get_page(page) context = dict(projects=projects, active="project_list") return render(request, "project_list.html", context=context)
def project_list_public(request): """Only list public projects.""" projects = auth.get_project_list(user=request.user) # Exclude private projects projects = projects.exclude(privacy__in=[Project.PRIVATE, Project.SHAREABLE]) projects = projects.order_by("rank", "-date", "-lastedit_date", "-id") projects = annotate_projects(projects) context = dict(projects=projects, active="projects", icon='list', title='Public Projects', public='active', empty_msg="No projects found.") return render(request, "project_list.html", context)
def api_list(request): # Get the token and user token = auth.get_token(request=request) user = User.objects.filter(profile__token=token).first() # Get the project list corresponding to this user returns public projects if user is None. projects = auth.get_project_list(user=user) # Format the payload. payload = json_list(qs=projects) return HttpResponse(content=payload, content_type="text/json")
def list_projects(context, target): user = context["request"].user request = context["request"] projects = auth.get_project_list(user=target) # Don't show private projects non owners if user != target: projects = projects.exclude(privacy=Project.PRIVATE) projects = projects.annotate(data_count=Count('data', distinct=True, filter=Q(deleted=False)), job_count=Count('job', distinct=True, filter=Q(deleted=False)), recipe_count=Count('analysis', distinct=True, filter=Q(deleted=False)), ) projects = projects.order_by("-rank", "-lastedit_date") return dict(projects=projects, user=target)
def api_list(request): # Get the token and user token = auth.get_token(request=request) show_all = bool(request.GET.get('show', 0)) user = User.objects.filter(profile__token=token).first() # Admins can get all projects if user and user.is_admin and show_all: projects = Project.objects.filter(deleted=False).all() else: # Get the project list corresponding to this user returns public projects if user is None. projects = auth.get_project_list(user=user) # Format the payload. payload = json_list(qs=projects, user=user) return HttpResponse(content=payload, content_type="text/json")
def project_list_private(request): """Only list private projects belonging to a user.""" projects = auth.get_project_list(user=request.user, include_public=False) empty_msg = "No projects found." if request.user.is_anonymous: projects = [] empty_msg = mark_safe(f"You need to <a href={reverse('login')}> log in</a> to view your projects.") else: projects = projects.order_by("rank", "-date", "-lastedit_date", "-id") projects = annotate_projects(projects) context = dict(projects=projects, empty_msg=empty_msg, active="projects", icon='briefcase', title='Private Projects', private='active') return render(request, "project_list.html", context)