fix: export public keys

This commit is contained in:
张泊明518370910136 2021-10-11 14:46:56 +08:00
parent 13e7278cdd
commit 31bca87d4b
No known key found for this signature in database
GPG Key ID: FBEF5DE8B9F4C629
4 changed files with 381 additions and 373 deletions

View File

@ -47,7 +47,11 @@ def create_teams_and_repos_by_canvas_groups(group_prefix: str) -> None:
@app.command("get-public-keys", help="list all public keys on gitea") @app.command("get-public-keys", help="list all public keys on gitea")
def get_public_key_of_all_canvas_students() -> None: def get_public_key_of_all_canvas_students() -> None:
echo("\n".join(tea.pot.get_public_key_of_all_canvas_students())) res = []
for k, v in tea.pot.get_public_key_of_all_canvas_students().items():
keys = "\\n".join(v)
res.append(f"{k},{keys}")
echo("\n".join(res))
@app.command("clone-all-repos", help="clone all gitea repos to local") @app.command("clone-all-repos", help="clone all gitea repos to local")

View File

@ -1,6 +1,6 @@
import functools import functools
from datetime import datetime from datetime import datetime
from typing import Any, Callable, List, Optional, TypeVar from typing import Any, Callable, Dict, List, Optional, TypeVar
from joint_teapot.config import settings from joint_teapot.config import settings
from joint_teapot.utils.logger import logger from joint_teapot.utils.logger import logger
@ -88,7 +88,7 @@ class Teapot:
self.canvas.students, self.canvas.groups, convertor, convertor self.canvas.students, self.canvas.groups, convertor, convertor
) )
def get_public_key_of_all_canvas_students(self) -> List[str]: def get_public_key_of_all_canvas_students(self) -> Dict[str, List[str]]:
return self.gitea.get_public_key_of_canvas_students(self.canvas.students) return self.gitea.get_public_key_of_canvas_students(self.canvas.students)
def clone_all_repos(self) -> None: def clone_all_repos(self) -> None:

View File

@ -20,9 +20,9 @@ class Canvas:
self.canvas = PyCanvas("https://umjicanvas.com/", access_token) self.canvas = PyCanvas("https://umjicanvas.com/", access_token)
self.course = self.canvas.get_course(course_id) self.course = self.canvas.get_course(course_id)
logger.info(f"Canvas course loaded. {self.course}") logger.info(f"Canvas course loaded. {self.course}")
self.students = self.course.get_users( # types = ["student", "observer"]
enrollment_type=["student"], include=["email"] types = ["student"]
) self.students = self.course.get_users(enrollment_type=types, include=["email"])
for attr in ["sis_login_id", "sortable_name", "name"]: for attr in ["sis_login_id", "sortable_name", "name"]:
if not hasattr(self.students[0], attr): if not hasattr(self.students[0], attr):
raise Exception( raise Exception(

View File

@ -1,7 +1,7 @@
import re import re
from enum import Enum from enum import Enum
from functools import lru_cache from functools import lru_cache
from typing import Any, Callable, List, Optional, Tuple from typing import Any, Callable, Dict, List, Optional, Tuple
import focs_gitea import focs_gitea
from canvasapi.group import Group, GroupMembership from canvasapi.group import Group, GroupMembership
@ -252,17 +252,21 @@ class Gitea:
logger.info(f"{self.org_name}/{repo_name} jobs done") logger.info(f"{self.org_name}/{repo_name} jobs done")
return repo_names return repo_names
def get_public_key_of_canvas_students(self, students: PaginatedList) -> List[str]: def get_public_key_of_canvas_students(
res = [] self, students: PaginatedList
) -> Dict[str, List[str]]:
res = {}
for student in students: for student in students:
try: try:
username = self._get_username_by_canvas_student(student) username = self._get_username_by_canvas_student(student)
res.extend( keys = [
[
item.key item.key
for item in list_all(self.user_api.user_list_keys, username) for item in list_all(self.user_api.user_list_keys, username)
] ]
) if not keys:
logger.info(f"{student} has not uploaded ssh keys to gitea")
continue
res[student.sis_login_id] = keys
except Exception as e: except Exception as e:
logger.error(e) logger.error(e)
return res return res