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