Exemple #1
0
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
Exemple #2
0
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)
Exemple #3
0
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
Exemple #5
0
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)
Exemple #6
0
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)
Exemple #9
0
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)
Exemple #12
0
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")
Exemple #13
0
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)