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")
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")

View File

@ -1,6 +1,6 @@
import functools
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.utils.logger import logger
@ -88,7 +88,7 @@ class Teapot:
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)
def clone_all_repos(self) -> None:

View File

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

View File

@ -1,7 +1,7 @@
import re
from enum import Enum
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
from canvasapi.group import Group, GroupMembership
@ -252,17 +252,21 @@ class Gitea:
logger.info(f"{self.org_name}/{repo_name} jobs done")
return repo_names
def get_public_key_of_canvas_students(self, students: PaginatedList) -> List[str]:
res = []
def get_public_key_of_canvas_students(
self, students: PaginatedList
) -> Dict[str, List[str]]:
res = {}
for student in students:
try:
username = self._get_username_by_canvas_student(student)
res.extend(
[
item.key
for item in list_all(self.user_api.user_list_keys, username)
]
)
keys = [
item.key
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:
logger.error(e)
return res