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])
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(), }
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
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