feat: suffix argument to mm channel creation (#15)
This commit is contained in:
parent
d674fbbc27
commit
462500b33e
21
README.md
21
README.md
|
@ -37,60 +37,77 @@ pytest -svv
|
|||
## Commands & Features
|
||||
|
||||
### `archive-all-repos`
|
||||
|
||||
archive all repos in gitea organization
|
||||
|
||||
### `check-issues`
|
||||
|
||||
check the existence of issue by title on gitea
|
||||
|
||||
### `checkout-releases`
|
||||
|
||||
checkout git repo to git tag fetched from gitea by release name, with due date
|
||||
|
||||
### `clone-all-repos`
|
||||
|
||||
clone all gitea repos to local
|
||||
|
||||
### `close-all-issues`
|
||||
|
||||
close all issues and pull requests in gitea organization
|
||||
|
||||
### `create-channels-on-mm`
|
||||
create channels for student groups according to group information on gitea. Optionally specify a prefix to ignore all repos whose names do not start with it.
|
||||
|
||||
Example: `python3 -m joint_teapot create_channels_for_groups p1` will fetch all repos whose names start with `"p1"` and create same-name channels on mm for these repos. Members of a repo will be added to the corresponding channel.
|
||||
create channels for student groups according to group information on gitea. Optionally specify a prefix to ignore all repos whose names do not start with it. Optionally specify a suffix to add to all channels created.
|
||||
|
||||
Example: `python3 -m joint_teapot create_channels_for_groups --prefix p1 -suffix -private` will fetch all repos whose names start with `"p1"` and create channels on mm for these repos like "p1team1-private". Members of a repo will be added to the corresponding channel.
|
||||
|
||||
### `create-issues`
|
||||
|
||||
create issues on gitea
|
||||
|
||||
### `create-personal-repos`
|
||||
|
||||
create personal repos on gitea for all canvas students
|
||||
|
||||
### `create-teams`
|
||||
|
||||
create teams on gitea by canvas groups
|
||||
|
||||
### `create-webhooks-for-mm`
|
||||
|
||||
Create a pair of webhooks on gitea and mm for all student groups on gitea, and configure them so that updates on gitea will be pushed to the mm channel. Optionally specify a prefix to ignore all repos whose names do not start with it.
|
||||
|
||||
Example: `python3 -m joint_teapot create-webhooks-for-mm p1` will fetch all repos whose names start with `"p1"` and create two-way webhooks for these repos. All repos should already have same-name mm channels. If not, use `create-channels-on-mm` to create them.
|
||||
|
||||
### `get-no-collaborator-repos`
|
||||
|
||||
list all repos with no collaborators
|
||||
|
||||
### `get-public-keys`
|
||||
|
||||
list all public keys on gitea
|
||||
|
||||
### `get-repos-status`
|
||||
|
||||
list status of all repos with conditions
|
||||
|
||||
### `invite-to-teams`
|
||||
|
||||
invite all canvas students to gitea teams by team name
|
||||
|
||||
### `prepare-assignment-dir`
|
||||
|
||||
prepare assignment dir from extracted canvas "Download Submissions" zip
|
||||
|
||||
### `unsubscribe-from-repos`
|
||||
|
||||
Unsubscribe from all repos in the organization specified in the config file where the repo name matches a given regex expression.
|
||||
|
||||
Example: `python3 -m joint_teapot unsubscribe-from-repos '\d{12}$'` will remove all repos whose names end with a student ID number from your gitea subscription list. Refer to the Python `re` module docs for more info about regex.
|
||||
|
||||
### `upload-assignment-grades`
|
||||
|
||||
upload assignment grades to canvas from grade file (GRADE.txt by default), read the first line as grade, the rest as comments
|
||||
|
||||
## License
|
||||
|
|
|
@ -2,7 +2,7 @@ from datetime import datetime
|
|||
from pathlib import Path
|
||||
from typing import List
|
||||
|
||||
from typer import Argument, Typer, echo
|
||||
from typer import Argument, Option, Typer, echo
|
||||
|
||||
from joint_teapot.teapot import Teapot
|
||||
from joint_teapot.utils.logger import logger
|
||||
|
@ -140,14 +140,18 @@ def upload_assignment_grades(assignments_dir: Path, assignment_name: str) -> Non
|
|||
help="create channels for student groups according to group information on"
|
||||
" gitea",
|
||||
)
|
||||
def create_channels_on_mm(prefix: str = Argument("")) -> None:
|
||||
def create_channels_on_mm(prefix: str = Option(""), suffix: str = Option("")) -> None:
|
||||
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)
|
||||
logger.info(
|
||||
f"{len(groups)} channel(s) to be created "
|
||||
+ (f"with suffix {suffix}" if suffix else "")
|
||||
+ f": {','.join(groups.keys())}"
|
||||
)
|
||||
tea.pot.mattermost.create_channels_for_groups(groups, suffix)
|
||||
|
||||
|
||||
@app.command(
|
||||
|
|
|
@ -39,21 +39,24 @@ class Mattermost:
|
|||
logger.error(f"Cannot get team {team_name}: {e}")
|
||||
return
|
||||
|
||||
def create_channels_for_groups(self, groups: Dict[str, List[str]]) -> None:
|
||||
def create_channels_for_groups(
|
||||
self, groups: Dict[str, List[str]], suffix: str = ""
|
||||
) -> None:
|
||||
for group_name, members in groups.items():
|
||||
channel_name = group_name + suffix
|
||||
try:
|
||||
channel = self.endpoint.channels.create_channel(
|
||||
{
|
||||
"team_id": self.team["id"],
|
||||
"name": group_name,
|
||||
"display_name": group_name,
|
||||
"name": channel_name,
|
||||
"display_name": channel_name,
|
||||
"type": "P", # create private channels
|
||||
}
|
||||
)
|
||||
logger.info(f"Added group {group_name} to Mattermost")
|
||||
logger.info(f"Added group {channel_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 {channel_name}: {e} Perhaps channel already exists?"
|
||||
)
|
||||
continue
|
||||
for member in members:
|
||||
|
@ -76,7 +79,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 {channel_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 interchangeably
|
||||
|
|
Loading…
Reference in New Issue
Block a user