feat: batch unsubscribing functionality for gitea (#14)
* Add command to unsubscribe from repos in batches * Update README * Miscellaneous changes
This commit is contained in:
parent
25d894c44d
commit
d674fbbc27
|
@ -2,7 +2,7 @@
|
|||
|
||||
[](https://app.codacy.com/gh/BoYanZh/Joint-Teapot?utm_source=github.com&utm_medium=referral&utm_content=BoYanZh/Joint-Teapot&utm_campaign=Badge_Grade_Settings)
|
||||
|
||||
A handy tool for TAs in JI to handle works through [Gitea](https://focs.ji.sjtu.edu.cn/git/), [Canvas](https://umjicanvas.com/), and [JOJ](https://joj.sjtu.edu.cn/). Joint is related to JI and also this tool which join websites together. Teapot means to hold Gitea, inspired by [@nichujie](https://github.com/nichujie).
|
||||
A handy tool for TAs in JI to handle works through [Gitea](https://focs.ji.sjtu.edu.cn/git/), [Canvas](https://umjicanvas.com/), [JOJ](https://joj.sjtu.edu.cn/) and [Mattermost](https://focs.ji.sjtu.edu.cn/mm/). Joint is related to JI and also this tool which join websites together. Teapot means to hold Gitea, inspired by [@nichujie](https://github.com/nichujie).
|
||||
|
||||
This tool is still under heavy development. The docs may not be updated on time, and all the features are provided with the probability to change.
|
||||
|
||||
|
@ -85,6 +85,11 @@ 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
|
||||
|
||||
|
|
|
@ -165,6 +165,14 @@ def create_webhooks_for_mm(prefix: str = Argument("")) -> None:
|
|||
tea.pot.mattermost.create_webhooks_for_repos(repo_names, tea.pot.gitea)
|
||||
|
||||
|
||||
@app.command(
|
||||
"unsubscribe-from-repos",
|
||||
help="unsubscribe from all repos whose name match the given regex pattern",
|
||||
)
|
||||
def unsubscribe_from_repos(pattern: str = Argument("")) -> None:
|
||||
tea.pot.gitea.unsubscribe_from_repos(pattern)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
app()
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import re
|
||||
from datetime import datetime
|
||||
from enum import Enum
|
||||
from functools import lru_cache
|
||||
|
@ -397,6 +398,25 @@ class Gitea:
|
|||
res[team.name] = members
|
||||
return res
|
||||
|
||||
def unsubscribe_from_repos(self, pattern: str) -> None:
|
||||
subscriptions = [
|
||||
sub
|
||||
for sub in self.user_api.user_current_list_subscriptions()
|
||||
if sub.owner.login == self.org_name
|
||||
and re.search(pattern, sub.name) is not None
|
||||
]
|
||||
if len(subscriptions) == 0:
|
||||
logger.warning(f"No subscribed repo matches the pattern {pattern}")
|
||||
return
|
||||
logger.info(
|
||||
f"{len(subscriptions)} subscriptions match the pattern {pattern}: {[s.name for s in subscriptions]}"
|
||||
)
|
||||
for sub in subscriptions:
|
||||
self.repository_api.user_current_delete_subscription(
|
||||
self.org_name, sub.name
|
||||
)
|
||||
logger.info(f"Unsubscribed from {sub.name}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
gitea = Gitea()
|
||||
|
|
Loading…
Reference in New Issue
Block a user