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
    def __init__(self, root, cmd_channel, current_user=None):
        """
         - (str) root: the user "real" home directory (e.g. '/home/user')
         - (instance) cmd_channel: the FTPHandler class instance
         - (str) current_user: username of currently logged in user
        """
        # Set initial current working directory.
        # By default initial cwd is set to "/" to emulate a chroot jail.
        # If a different behavior is desired (e.g. initial cwd = root,
        # to reflect the real filesystem) users overriding this class
        # are responsible to set _cwd attribute as necessary.

        #self._cwd = root
        self._cwd = root
        self._root = root
        self.cmd_channel = cmd_channel

        logger.info(f"current_user={current_user}")
        # Get current user info
        self.user_table = self.cmd_channel.authorizer.user_table
        self.user = self.user_table.get(current_user) or dict(
            user=AnonymousUser)
        self.project_list = auth.get_project_list(user=self.user["user"])

        super(BiostarFileSystem, self).__init__(root, cmd_channel)
def get_projects(user):

    "Used to return projects list in the profile."

    projects = auth.get_project_list(user=user, include_public=False)


    access = Access.objects.filter(project__in=projects, user=user,
                                   access__gt=Access.NO_ACCESS)

    return [(access, access.project) for access in access]
def search(request):

    projects = auth.get_project_list(user=request.user)

    data = Data.objects.filter(deleted=False,project__in=projects)
    recipe = Analysis.objects.filter(deleted=False, project__in=projects)
    jobs = Job.objects.filter(deleted=False, project__in=projects)
    projects = projects.filter(deleted=False)

    content = [dict(name="Projects",results =update_dict(iter=projects)),
               dict(name="Data", results=update_dict(iter=data)),
               dict(name="Recipes", results=update_dict(iter=recipe)),
               dict(name="Jobs", results=update_dict(iter=jobs)),
               ]

    return dict(content=json.dumps(content))
def list_projects(context, target):

    user = context["request"].user
    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)
    def __init__(self, root, cmd_channel, current_user=None):
        """
         - (str) root: the user "real" home directory (e.g. '/home/user')
         - (instance) cmd_channel: the FTPHandler class instance
         - (str) current_user: username of currently logged in user. Used to key user_table.
        """
        # Set initial current working directory.
        # By default initial cwd is set to "/" to emulate a chroot jail.
        # If a different behavior is desired (e.g. initial cwd = root,
        # to reflect the real filesystem) users overriding this class
        # are responsible to set _cwd attribute as necessary.

        self._cwd = root
        self._root = root
        self.cmd_channel = cmd_channel
        self.timefunc = time.localtime if cmd_channel.use_gmt_times else time.gmtime

        logger.info(f"current_user={current_user}")

        # Dict with all users stored by parent class
        self.user_table = self.cmd_channel.authorizer.user_table

        # Logged in user
        self.username = current_user
        self.user = self.user_table.get(current_user) or dict(
            user=AnonymousUser)

        # Projects the user has access to
        self.projects = auth.get_project_list(user=self.user["user"])

        # Data and results in project
        self.data = Data.objects.filter(deleted=False,
                                        project__in=self.projects,
                                        state__in=(Data.READY, Data.PENDING))

        self.jobs = Job.objects.filter(deleted=False,
                                       project__in=self.projects)

        # Get authorizer to set write permission on directories.
        self.authorizer = self.cmd_channel.authorizer

        super(BiostarFileSystem, self).__init__(root, cmd_channel)
Exemple #7
0
    def make_project_dir(self, root_project, path):
        """
        Create a project in the database and refresh the
        projects tab in the FTP server so it shows up as a directory.
        """
        user = self.fs.user["user"]

        if self.fs.projects.filter(name=root_project):
            self.respond('550 Directory already exists.')
            return
        # Create a new project
        auth.create_project(user=user, name=root_project)

        # Refresh projects tab
        self.fs.projects = auth.get_project_list(user=user)

        line = self.fs.fs2ftp(path)
        self.respond('257 "%s" directory created.' % line.replace('"', '""'))
        logger.info(f"path={path}")
        return path
Exemple #8
0
def user_profile(request, uid):
    profile = Profile.objects.filter(uid=uid).first()

    if not profile:
        messages.error(request, "User does not exist")
        return redirect("/")

    # Get the active tab, defaults to project
    active_tab = request.GET.get(ACTIVE_TAB, POSTS)
    # User viewing profile is a moderator
    can_moderate = profile.can_moderate(source=request.user)

    if active_tab == PROJECT:
        objs = get_project_list(user=profile.user, include_public=False)
        objs = annotate_projects(objs)
        objs = objs.exclude(
            privacy=Project.PRIVATE) if request.user != profile.user else objs
        objs = objs.order_by("rank", "-date")
    else:
        objs = my_posts(target=profile.user, request=request)
        objs = objs.prefetch_related("root", "lastedit_user__profile",
                                     "thread_users__profile")
        objs = objs.order_by("rank", '-lastedit_date')

    page = request.GET.get("page", 1)
    paginator = Paginator(objs, per_page=20)
    page = page if page is not None else 1

    objs = paginator.get_page(page)
    context = dict(user=profile.user,
                   objs=objs,
                   active=active_tab,
                   const_post=POSTS,
                   const_project=PROJECT,
                   can_moderate=can_moderate)

    return render(request, settings.PROFILE_TEMPLTE, context)
Exemple #9
0
def user_profile(request, uid):

    profile = Profile.objects.filter(uid=uid).first()

    if not profile:
        messages.error(request, "User does not exist")
        return redirect("/")

    # Get the active tab, defaults to project
    active_tab = request.GET.get(ACTIVE_TAB, POSTS)

    can_moderate = profile.can_moderate(source=request.user)

    objs = get_project_list(user=profile.user, include_public=False)
    if request.user != profile.user:
        objs = objs.exclude(privacy=Project.PRIVATE)

    objs = objs.order_by("-date")
    page = request.GET.get("page", 1)

    paginator = Paginator(objs, per_page=20)
    page = page if page is not None else 1

    objs = paginator.get_page(page)

    context = dict(user=profile.user,
                   objs=objs,
                   const_name=ACTIVE_TAB,
                   const_post=POSTS,
                   const_project=PROJECT,
                   const_recipes=RECIPES,
                   can_moderate=can_moderate)

    context.update({active_tab: ACTIVE_TAB})

    return render(request, 'accounts/user_profile.html', context)
Exemple #10
0
def project_list(user):

    # Maintain same order as views (doesn't really show)
    projects = auth.get_project_list(user=user).order_by("-sticky", "-privacy")
    projects = projects.order_by("-privacy", "-sticky", "-date", "-id")
    return [p.name for p in projects]