Esempio n. 1
0
  def testAllProjectMembers(self):
    p = project_pb2.Project()
    self.assertEqual(framework_bizobj.AllProjectMembers(p), [])

    p.owner_ids.extend([1, 2, 3])
    p.committer_ids.extend([4, 5, 6])
    p.contributor_ids.extend([7, 8, 9])
    self.assertEqual(framework_bizobj.AllProjectMembers(p),
                     [1, 2, 3, 4, 5, 6, 7, 8, 9])
Esempio n. 2
0
def BuildProjectMembers(cnxn, project, user_service):
    """Gather data for the members section of a project page.

  Args:
    cnxn: connection to SQL database.
    project: Project PB of current project.
    user_service: an instance of UserService for user persistence.

  Returns:
    A dictionary suitable for use with EZT.
  """
    # First, get all needed info on all users in one batch of requests.
    users_by_id = framework_views.MakeAllUserViews(
        cnxn, user_service, framework_bizobj.AllProjectMembers(project))

    # Second, group the user proxies by role for display.
    owner_proxies = [users_by_id[owner_id] for owner_id in project.owner_ids]
    committer_proxies = [
        users_by_id[committer_id] for committer_id in project.committer_ids
    ]
    contributor_proxies = [
        users_by_id[contrib_id] for contrib_id in project.contributor_ids
    ]

    return {
        'owners': owner_proxies,
        'committers': committer_proxies,
        'contributors': contributor_proxies,
        'all_members': users_by_id.values(),
    }
Esempio n. 3
0
    def GatherHelpData(self, mr, page_data):
        """Return a dict of values to drive on-page user help.

    Args:
      mr: common information parsed from the HTTP request.
      page_data: Dictionary of base and page template data.

    Returns:
      A dict of values to drive on-page user help, to be added to page_data.
    """
        help_data = super(ProjectSummary, self).GatherHelpData(mr, page_data)
        with work_env.WorkEnv(mr, self.services) as we:
            userprefs = we.GetUserPrefs(mr.auth.user_id)
        dismissed = [pv.name for pv in userprefs.prefs if pv.value == 'true']
        project = mr.project

        # Cue cards for project owners.
        if self.CheckPerm(mr, permissions.EDIT_PROJECT):
            if ('document_team_duties' not in dismissed
                    and len(framework_bizobj.AllProjectMembers(project)) > 1
                    and not self.services.project.GetProjectCommitments(
                        mr.cnxn, mr.project_id).commitments):
                help_data['cue'] = 'document_team_duties'

        return help_data
Esempio n. 4
0
def GetVisibleMembers(mr, project, services):
    all_member_ids = framework_bizobj.AllProjectMembers(project)

    all_group_ids = services.usergroup.DetermineWhichUserIDsAreGroups(
        mr.cnxn, all_member_ids)

    (ac_exclusion_ids,
     no_expand_ids) = services.project.GetProjectAutocompleteExclusion(
         mr.cnxn, project.project_id)

    group_ids_to_expand = [
        gid for gid in all_group_ids if gid not in no_expand_ids
    ]

    # TODO(jrobbins): Normally, users will be allowed view the members
    # of any user group if the project From: email address is listed
    # as a group member, as well as any group that they are personally
    # members of.
    member_ids, owner_ids = services.usergroup.LookupVisibleMembers(
        mr.cnxn, group_ids_to_expand, mr.perms, mr.auth.effective_ids,
        services)
    indirect_user_ids = set()
    for gids in member_ids.values():
        indirect_user_ids.update(gids)
    for gids in owner_ids.values():
        indirect_user_ids.update(gids)

    visible_member_ids = _FilterMemberData(mr, project.owner_ids,
                                           project.committer_ids,
                                           project.contributor_ids,
                                           indirect_user_ids, project)
    visible_member_ids = _MergeLinkedMembers(mr.cnxn, services.user,
                                             visible_member_ids)

    visible_member_views = framework_views.MakeAllUserViews(
        mr.cnxn, services.user, visible_member_ids, group_ids=all_group_ids)

    # Filter out service accounts
    service_acct_emails = set(
        client_config_svc.GetClientConfigSvc().GetClientIDEmails()[1])
    visible_member_views = {
        m.user_id: m
        for m in visible_member_views.values()
        if not framework_helpers.IsServiceAccount(
            m.email, client_emails=service_acct_emails)
        and not m.user_id in ac_exclusion_ids
    }

    return visible_member_views