feat: better logs
This commit is contained in:
		
							parent
							
								
									48cbf4871d
								
							
						
					
					
						commit
						c75caa3990
					
				|  | @ -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 | ||||||
|  |  | ||||||
|  | @ -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 . | ||||||
|  |  | ||||||
|  | @ -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__": | ||||||
|     app() |     try: | ||||||
|  |         app() | ||||||
|  |     except Exception: | ||||||
|  |         logger.exception("Unexpected error:") | ||||||
|  |  | ||||||
|  | @ -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" | ||||||
|  |  | ||||||
|  | @ -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]: | ||||||
|  |  | ||||||
|  | @ -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__": | ||||||
|  |  | ||||||
|  | @ -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) | ||||||
|  |  | ||||||
|  | @ -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", | ||||||
|                 }, |                 }, | ||||||
|             ) |             ) | ||||||
|             self.repository_api.repo_add_collaborator( |             try: | ||||||
|                 self.org_name, repo.name, self._get_username_by_canvas_student(student) |                 username = self._get_username_by_canvas_student(student) | ||||||
|             ) |                 self.repository_api.repo_add_collaborator( | ||||||
|  |                     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 [ | ||||||
|  |  | ||||||
|  | @ -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 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user