def create_helper(self, param_list, user_id) -> ResponseTuple: """ Create team and calls GitHub API to create the team in GitHub. If ``param_list[name] is not None``, will add a display name. If ``param_list[channel] is not None``, will add all members of channel in which the command was called into the team. :param param_list: List of parameters for creating team :param user_id: Slack ID of user who called command :return: error message if team created unsuccessfully otherwise returns success message """ try: command_user = self.facade.retrieve(User, user_id) if not check_permissions(command_user, None): return self.permission_error, 200 if not command_user.github_id: msg = f"User {command_user.slack_id} has yet to register a"\ f" Github username in this system."\ f" Register with `/rocket user edit --github username`." logging.error(msg) return msg, 200 msg = f"New team created: {param_list['team_name']}, " team_id = str(self.gh.org_create_team(param_list['team_name'])) team = Team(team_id, param_list['team_name'], "") if param_list["name"] is not None: msg += f"name: {param_list['name']}, " team.display_name = param_list['name'] if param_list["platform"] is not None: msg += f"platform: {param_list['platform']}, " team.platform = param_list['platform'] if param_list["folder"] is not None: msg += f"folder: {param_list['folder']}" team.folder = param_list['folder'] if param_list["channel"] is not None: msg += "added channel, " for member_id in self.sc.get_channel_users( param_list["channel"]): try: member = self.facade.retrieve(User, member_id) self.gh.add_team_member(member.github_username, team_id) team.add_member(member.github_id) except LookupError: pass else: self.gh.add_team_member(command_user.github_username, team_id) team.add_member(command_user.github_id) if param_list["lead"] is not None: msg += "added lead" lead_user = self.facade.retrieve(User, param_list["lead"]) team.add_team_lead(lead_user.github_id) if not self.gh.has_team_member(lead_user.github_username, team_id): self.gh.add_team_member(lead_user.github_username, team_id) else: team.add_team_lead(command_user.github_id) self.facade.store(team) return msg, 200 except GithubAPIException as e: logging.error(f"Team creation error with {e.data}") return f"Team creation unsuccessful with the" \ f" following error: {e.data}", 200 except LookupError: logging.error(f"User(uid={user_id}) isn't in database") return self.lookup_error, 200 except SlackAPIError as e: logging.error(f"Slack error with {e.error}") return f"Team creation unsuccessful with the" \ f" following error: {e.error}", 200
def create_helper(self, args: Namespace, user_id: str) -> ResponseTuple: """ Create team and calls GitHub API to create the team in GitHub. If ``args.displayname is not None``, will add a display name. If ``args.channel is not None``, will add all members of channel in which the command was called into the team. :param args: Parameters for creating team :param user_id: Slack ID of user who called command :return: error message if team created unsuccessfully otherwise returns success message """ try: command_user = self.facade.retrieve(User, user_id) if not check_permissions(command_user, None): return self.permission_error, 200 if not command_user.github_id: msg = f"User {command_user.slack_id} has yet to register a"\ f" Github username in this system."\ f" Register with `/rocket user edit --github username`." logging.error(msg) return msg, 200 msg = f"New team created: {args.team_name}, " team_id = str(self.gh.org_create_team(args.team_name)) team = Team(team_id, args.team_name, "") if args.displayname is not None: msg += f"displayname: {args.displayname}, " team.displayname = args.displayname if args.platform is not None: msg += f"platform: {args.platform}, " team.platform = args.platform if args.folder is not None: msg += f"folder: {args.folder}" team.folder = args.folder if args.channel is not None: msg += "added channel" channel_users = self.sc.get_channel_users( args.channel) users_no_ghid = [] for member_id in channel_users: try: member = self.facade.retrieve(User, member_id) if not member.github_username: users_no_ghid.append(member_id) continue self.gh.add_team_member(member.github_username, team_id) team.add_member(member.github_id) except (LookupError, GithubAPIException): users_no_ghid.append(member_id) if users_no_ghid: users_escaped = ' '.join( [f'<@{uid}>' for uid in users_no_ghid]) no_gh_reminder =\ ' (users who forgot to set Github accounts or forgot '\ 'to register into database: ' +\ users_escaped + ')' msg += no_gh_reminder msg += ', ' else: self.gh.add_team_member(command_user.github_username, team_id) team.add_member(command_user.github_id) if args.lead is not None: msg += "added lead" lead_user = self.facade.retrieve(User, args.lead) team.add_team_lead(lead_user.github_id) if not self.gh.has_team_member(lead_user.github_username, team_id): self.gh.add_team_member(lead_user.github_username, team_id) else: team.add_team_lead(command_user.github_id) self.facade.store(team) return msg, 200 except GithubAPIException as e: logging.error(f"Team creation error with {e.data}") return f"Team creation unsuccessful with the" \ f" following error: {e.data}", 200 except LookupError: logging.error(f"User(uid={user_id}) isn't in database") return self.lookup_error, 200 except SlackAPIError as e: logging.error(f"Slack error with {e.error}") return f"Team creation unsuccessful with the" \ f" following error: {e.error}", 200