feat: better logs

This commit is contained in:
张泊明518370910136 2021-09-15 04:00:23 +08:00
parent 48cbf4871d
commit c75caa3990
No known key found for this signature in database
GPG Key ID: FBEF5DE8B9F4C629
9 changed files with 150 additions and 122 deletions

View File

@ -1,4 +1,4 @@
CANVAS_ACCESS_TOKEN=CiBD8fLtEhUOkcjdKhIj18Fx13WV1e3hwffewrfN3whAcS1IKPeJ41fBKq1EzkGd CANVAS_ACCESS_TOKEN=CiBD8fLtEhUOkcjdKhIj18Fx13WV1e3hwffewrfN3whAcS1IKPeJ41fBKq1EzkGd
COURSE_ID=1445 CANVAS_COURSE_ID=1445
GITEA_ACCESS_TOKEN=10cdf70f8fe1b7a5d3321e5a10d2d743e4818d4a GITEA_ACCESS_TOKEN=10cdf70f8fe1b7a5d3321e5a10d2d743e4818d4a
ORG_NAME=VG101 GITEA_ORG_NAME=VG101

View File

@ -11,7 +11,7 @@ python3 -m venv env
source env/Scripts/activate source env/Scripts/activate
``` ```
### Install ### Install & Run
```bash ```bash
pip3 install -e . pip3 install -e .

View File

@ -3,6 +3,7 @@ __version__ = "0.0.0"
from datetime import datetime from datetime import datetime
from typing import List from typing import List
from loguru import logger
from typer import Typer, echo from typer import Typer, echo
from joint_teapot.teapot import Teapot from joint_teapot.teapot import Teapot
@ -32,7 +33,7 @@ def create_teams_and_repos_by_canvas_groups() -> None:
@app.command("get-public-keys", help="get all public keys on gitea") @app.command("get-public-keys", help="get all public keys on gitea")
def get_public_key_of_all_canvas_students() -> None: def get_public_key_of_all_canvas_students() -> None:
echo(teapot.get_public_key_of_all_canvas_students()) echo("\n".join(teapot.get_public_key_of_all_canvas_students()))
@app.command("archieve", help="clone all gitea repos to local") @app.command("archieve", help="clone all gitea repos to local")
@ -47,7 +48,7 @@ def create_issue_for_repos(repo_names: List[str], title: str, body: str) -> None
@app.command("check-issues", help="check the existence of issue by title on gitea") @app.command("check-issues", help="check the existence of issue by title on gitea")
def check_exist_issue_by_title(repo_names: List[str], title: str) -> None: def check_exist_issue_by_title(repo_names: List[str], title: str) -> None:
echo(teapot.check_exist_issue_by_title(repo_names, title)) echo("\n".join(teapot.check_exist_issue_by_title(repo_names, title)))
@app.command( @app.command(
@ -61,4 +62,7 @@ def checkout_to_repos_by_release_name(
if __name__ == "__main__": if __name__ == "__main__":
try:
app() app()
except Exception:
logger.exception("Unexpected error:")

View File

@ -10,11 +10,11 @@ class Settings(BaseSettings):
# canvas # canvas
canvas_access_token: str = "" canvas_access_token: str = ""
course_id: int = 0 canvas_course_id: int = 0
# gitea # gitea
gitea_access_token: str = "" gitea_access_token: str = ""
org_name: str = "" gitea_org_name: str = ""
# git # git
repos_dir: str = "./repos" repos_dir: str = "./repos"

View File

@ -1,6 +1,9 @@
from datetime import datetime from datetime import datetime
from typing import Any, Dict, List from typing import List
from loguru import logger
from joint_teapot.config import settings
from joint_teapot.utils import first from joint_teapot.utils import first
from joint_teapot.workers import Canvas, Git, Gitea from joint_teapot.workers import Canvas, Git, Gitea
@ -28,6 +31,12 @@ class Teapot:
self._git = Git() self._git = Git()
return self._git return self._git
def __init__(self) -> None:
logger.info(
f"Settings loaded. Canvas Course ID: {settings.canvas_course_id}, Gitea Organization name: {settings.gitea_org_name}"
)
logger.info("Teapot initialized.")
def add_all_canvas_students_to_teams(self, team_names: List[str]) -> None: def add_all_canvas_students_to_teams(self, team_names: List[str]) -> None:
return self.gitea.add_canvas_students_to_teams(self.canvas.students, team_names) return self.gitea.add_canvas_students_to_teams(self.canvas.students, team_names)
@ -41,7 +50,7 @@ class Teapot:
self.canvas.students, self.canvas.groups self.canvas.students, self.canvas.groups
) )
def get_public_key_of_all_canvas_students(self) -> List[List[Dict[str, Any]]]: def get_public_key_of_all_canvas_students(self) -> 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 archieve_all_repos(self) -> List[str]: def archieve_all_repos(self) -> List[str]:

View File

@ -1,4 +1,5 @@
from canvasapi import Canvas as PyCanvas from canvasapi import Canvas as PyCanvas
from loguru import logger
from joint_teapot.config import settings from joint_teapot.config import settings
@ -9,27 +10,25 @@ class Canvas:
def __init__( def __init__(
self, self,
access_token: str = settings.canvas_access_token, access_token: str = settings.canvas_access_token,
courseID: int = settings.course_id, course_id: int = settings.canvas_course_id,
): ):
self.canvas = PyCanvas("https://umjicanvas.com/", access_token) self.canvas = PyCanvas("https://umjicanvas.com/", access_token)
self.course = self.canvas.get_course(courseID) self.course = self.canvas.get_course(course_id)
logger.info(f"Canvas course loaded. {self.course}")
self.students = self.course.get_users( self.students = self.course.get_users(
enrollment_type=["student"], include=["email"] enrollment_type=["student"], include=["email"]
) )
self.assignments = self.course.get_assignments()
self.groups = self.course.get_groups()
for attr in ["sis_login_id", "sortable_name"]: for attr in ["sis_login_id", "sortable_name"]:
if not hasattr(self.students[0], attr): if not hasattr(self.students[0], attr):
raise Exception( raise Exception(
f"Unable to gather students' {attr}, please contact the Canvas site admin" f"Unable to gather students' {attr}, please contact the Canvas site admin"
) )
# group: Group logger.info(f"Canvas students loaded.")
# for group in self.groups: self.assignments = self.course.get_assignments()
# membership: GroupMembership logger.info(f"Canvas assignments loaded.")
# print(group.__dict__) self.groups = self.course.get_groups()
# for membership in group.get_memberships(): logger.info(f"Canvas groups loaded.")
# print(membership.user_id, end=", ") logger.info("Canvas initialized.")
# print("")
if __name__ == "__main__": if __name__ == "__main__":

View File

@ -1,6 +1,8 @@
import os import os
import sys import sys
from loguru import logger
current_path = sys.path[0] current_path = sys.path[0]
sys.path.remove(current_path) sys.path.remove(current_path)
from git import Repo from git import Repo
@ -12,12 +14,15 @@ from joint_teapot.config import settings
class Git: class Git:
def __init__( def __init__(
self, org_name: str = settings.org_name, repos_dir: str = settings.repos_dir self,
org_name: str = settings.gitea_org_name,
repos_dir: str = settings.repos_dir,
): ):
self.org_name = org_name self.org_name = org_name
if not os.path.isdir(repos_dir): if not os.path.isdir(repos_dir):
raise Exception(f"{repos_dir} does not exist! Create it first.") raise Exception(f"{repos_dir} does not exist! Create it first.")
self.repos_dir = repos_dir self.repos_dir = repos_dir
logger.info("Git initialized.")
def clone_repo(self, repo_name: str, branch: str = "master") -> Repo: def clone_repo(self, repo_name: str, branch: str = "master") -> Repo:
repo_dir = os.path.join(self.repos_dir, repo_name) repo_dir = os.path.join(self.repos_dir, repo_name)

View File

@ -7,6 +7,7 @@ import focs_gitea
from canvasapi.group import Group, GroupMembership from canvasapi.group import Group, GroupMembership
from canvasapi.paginated_list import PaginatedList from canvasapi.paginated_list import PaginatedList
from canvasapi.user import User from canvasapi.user import User
from loguru import logger
from joint_teapot.config import settings from joint_teapot.config import settings
from joint_teapot.utils import first from joint_teapot.utils import first
@ -29,7 +30,7 @@ class Gitea:
def __init__( def __init__(
self, self,
access_token: str = settings.gitea_access_token, access_token: str = settings.gitea_access_token,
org_name: str = settings.org_name, org_name: str = settings.gitea_org_name,
): ):
self.org_name = org_name self.org_name = org_name
configuration = focs_gitea.Configuration() configuration = focs_gitea.Configuration()
@ -42,6 +43,7 @@ class Gitea:
self.repository_api = focs_gitea.RepositoryApi(self.api_client) self.repository_api = focs_gitea.RepositoryApi(self.api_client)
self.settings_api = focs_gitea.SettingsApi(self.api_client) self.settings_api = focs_gitea.SettingsApi(self.api_client)
self.user_api = focs_gitea.UserApi(self.api_client) self.user_api = focs_gitea.UserApi(self.api_client)
logger.info("Gitea initialized.")
@lru_cache() @lru_cache()
def _get_team_id_by_name(self, name: str) -> int: def _get_team_id_by_name(self, name: str) -> int:
@ -67,7 +69,7 @@ class Gitea:
username = self._get_username_by_canvas_student(student) username = self._get_username_by_canvas_student(student)
self.organization_api.org_add_team_member(team_id, username) self.organization_api.org_add_team_member(team_id, username)
except Exception as e: except Exception as e:
print(e) logger.error(e)
def create_personal_repos_for_canvas_students( def create_personal_repos_for_canvas_students(
self, self,
@ -93,9 +95,13 @@ class Gitea:
"trust_model": "default", "trust_model": "default",
}, },
) )
try:
username = self._get_username_by_canvas_student(student)
self.repository_api.repo_add_collaborator( self.repository_api.repo_add_collaborator(
self.org_name, repo.name, self._get_username_by_canvas_student(student) self.org_name, repo.name, username
) )
except Exception as e:
logger.error(e)
return repo_names return repo_names
def create_teams_and_repos_by_canvas_groups( def create_teams_and_repos_by_canvas_groups(
@ -161,13 +167,17 @@ class Gitea:
) )
return repo_names return repo_names
def get_public_key_of_canvas_students( def get_public_key_of_canvas_students(self, students: PaginatedList) -> List[str]:
self, students: PaginatedList res = []
) -> List[List[Dict[str, Any]]]: for student in students:
return [ try:
self.user_api.user_list_keys(self._get_username_by_canvas_student(student)) username = self._get_username_by_canvas_student(student)
for student in students res.extend(
] [item.key for item in self.user_api.user_list_keys(username)]
)
except Exception as e:
logger.error(e)
return res
def get_repos_releases(self, repo_names: List[str]) -> List[List[Dict[str, Any]]]: def get_repos_releases(self, repo_names: List[str]) -> List[List[Dict[str, Any]]]:
return [ return [

View File

@ -1,5 +1,6 @@
canvasapi>=2.2.0 canvasapi>=2.2.0
focs_gitea>=1.0.0 focs_gitea>=1.0.0
GitPython>=3.1.18 GitPython>=3.1.18
loguru>=0.5.3
pydantic[dotenv]>=1.8.1 pydantic[dotenv]>=1.8.1
typer[all]>=0.3.2 typer[all]>=0.3.2