chore: List[Dict] -> Dict[str, List]
This commit is contained in:
parent
b9b1513542
commit
934343ea7e
|
@ -141,14 +141,12 @@ def upload_assignment_grades(assignments_dir: Path, assignment_name: str) -> Non
|
|||
" gitea",
|
||||
)
|
||||
def create_channels_on_mm(prefix: str = Argument("")) -> None:
|
||||
groups = [
|
||||
group
|
||||
for group in tea.pot.gitea.get_all_teams()
|
||||
if isinstance(group["name"], str) and group["name"].startswith(prefix)
|
||||
]
|
||||
logger.info(
|
||||
f"{len(groups)} channels to be created: {groups[0]['name']} ... {groups[-1]['name']}"
|
||||
)
|
||||
groups = {
|
||||
group_name: members
|
||||
for group_name, members in tea.pot.gitea.get_all_teams().items()
|
||||
if group_name.startswith(prefix)
|
||||
}
|
||||
logger.info(f"{len(groups)} channel(s) to be created: {groups.keys()}")
|
||||
tea.pot.mattermost.create_channels_for_groups(groups)
|
||||
|
||||
|
||||
|
@ -158,13 +156,13 @@ def create_channels_on_mm(prefix: str = Argument("")) -> None:
|
|||
"and configure them so that updates on gitea will be pushed to the mm channel",
|
||||
)
|
||||
def create_webhooks_for_mm(prefix: str = Argument("")) -> None:
|
||||
groups = [
|
||||
group["name"]
|
||||
for group in tea.pot.gitea.get_all_teams()
|
||||
if isinstance(group["name"], str) and group["name"].startswith(prefix)
|
||||
repo_names = [
|
||||
group_name
|
||||
for group_name in tea.pot.gitea.get_all_teams().keys()
|
||||
if group_name.startswith(prefix)
|
||||
]
|
||||
logger.info(f"{len(groups)} pairs to be created: {groups[0]} ... {groups[-1]}")
|
||||
tea.pot.mattermost.create_webhooks_for_repos(groups, tea.pot.gitea)
|
||||
logger.info(f"{len(repo_names)} pair(s) of webhooks to be created: {repo_names}")
|
||||
tea.pot.mattermost.create_webhooks_for_repos(repo_names, tea.pot.gitea)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from datetime import datetime
|
||||
from enum import Enum
|
||||
from functools import lru_cache
|
||||
from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple, TypeVar, Union
|
||||
from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple, TypeVar
|
||||
|
||||
import focs_gitea
|
||||
from canvasapi.group import Group, GroupMembership
|
||||
|
@ -378,19 +378,12 @@ class Gitea:
|
|||
self.org_name, repo.name, body={"archived": True}
|
||||
)
|
||||
|
||||
def get_all_teams(
|
||||
self,
|
||||
) -> List[Dict[str, Union[str, List[str]]]]:
|
||||
ret: List[Dict[str, Union[str, List[str]]]] = []
|
||||
try:
|
||||
teams_raw = self.organization_api.org_list_teams(self.org_name)
|
||||
except ApiException as e:
|
||||
logger.error(f"Failed to get teams from organization {self.org_name}: {e}")
|
||||
exit(1)
|
||||
for team_raw in teams_raw:
|
||||
if team_raw.name == "Owners":
|
||||
def get_all_teams(self) -> Dict[str, List[str]]:
|
||||
res: Dict[str, List[str]] = {}
|
||||
for team in list_all(self.organization_api.org_list_teams, self.org_name):
|
||||
if team.name == "Owners":
|
||||
continue
|
||||
team_id = team_raw.id
|
||||
team_id = team.id
|
||||
try:
|
||||
members = [
|
||||
m.login.lower()
|
||||
|
@ -401,8 +394,8 @@ class Gitea:
|
|||
f"Failed to get members of team {team_id} in {self.org_name}: {e}"
|
||||
)
|
||||
continue
|
||||
ret.append({"name": team_raw.name, "members": members})
|
||||
return ret
|
||||
res[team.name] = members
|
||||
return res
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from typing import Dict, List, Union
|
||||
from typing import Dict, List
|
||||
|
||||
import focs_gitea
|
||||
from mattermostdriver import Driver
|
||||
|
@ -39,26 +39,24 @@ class Mattermost:
|
|||
logger.error(f"Cannot get team {team_name}: {e}")
|
||||
return
|
||||
|
||||
def create_channels_for_groups(
|
||||
self, groups: List[Dict[str, Union[str, List[str]]]]
|
||||
) -> None:
|
||||
for group in groups:
|
||||
def create_channels_for_groups(self, groups: Dict[str, List[str]]) -> None:
|
||||
for group_name, members in groups.items():
|
||||
try:
|
||||
channel = self.endpoint.channels.create_channel(
|
||||
{
|
||||
"team_id": self.team["id"],
|
||||
"name": group["name"],
|
||||
"display_name": group["name"],
|
||||
"name": group_name,
|
||||
"display_name": group_name,
|
||||
"type": "P", # create private channels
|
||||
}
|
||||
)
|
||||
logger.info(f"Added group {group['name']} to Mattermost")
|
||||
logger.info(f"Added group {group_name} to Mattermost")
|
||||
except Exception as e:
|
||||
logger.warning(
|
||||
f"Error when creating channel {group['name']}: {e} Perhaps channel already exists?"
|
||||
f"Error when creating channel {group_name}: {e} Perhaps channel already exists?"
|
||||
)
|
||||
continue
|
||||
for member in group["members"]:
|
||||
for member in members:
|
||||
try:
|
||||
mmuser = self.endpoint.users.get_user_by_username(member)
|
||||
except Exception:
|
||||
|
@ -78,7 +76,7 @@ class Mattermost:
|
|||
)
|
||||
except Exception:
|
||||
logger.warning(f"User {member} is not in the team")
|
||||
logger.info(f"Added member {member} to channel {group['name']}")
|
||||
logger.info(f"Added member {member} to channel {group_name}")
|
||||
|
||||
def create_webhooks_for_repos(self, repos: List[str], gitea: Gitea) -> None:
|
||||
# one group corresponds to one repo so these concepts can be used interchangably
|
||||
|
|
Loading…
Reference in New Issue
Block a user