Coverage for tools / create_gitlab_projects.py: 78%

27 statements  

« prev     ^ index     » next       coverage.py v7.13.4, created at 2026-03-02 18:55 +0000

1"""Create GitLab repositories from folder.""" 

2 

3import sys 

4from argparse import Namespace 

5 

6from sel_tools.config import REPO_DIR 

7from sel_tools.file_export.solutions_check import check_code_for_solutions_code 

8from sel_tools.gitlab_api.create_issue import EVALUATION_DASHBOARD_TASK, create_issues 

9from sel_tools.gitlab_api.create_repo import create_repos 

10from sel_tools.gitlab_api.instance import create_gitlab_instance 

11from sel_tools.utils.args import ArgumentParserFactory 

12from sel_tools.utils.student_config import ( 

13 read_student_repo_info_from_config_file, 

14 store_student_repo_info_to_config_file, 

15) 

16 

17 

18def parse_arguments(arguments: list[str]) -> Namespace: 

19 """Parse CLI arguments.""" 

20 factory = ArgumentParserFactory.default_parser(__doc__) 

21 factory.add_repo_base_name() 

22 factory.add_group_id() 

23 factory.add_repo_info_dir() 

24 factory.add_source_folder(REPO_DIR / "export" / "homework") 

25 factory.add_number_of_repos() 

26 factory.add_gitlab_token() 

27 factory.add_publish_solutions() 

28 

29 return factory.parser.parse_args(arguments[1:]) 

30 

31 

32def main() -> None: 

33 """Main.""" 

34 arguments = parse_arguments(sys.argv) 

35 check_code_for_solutions_code(arguments.source_path, arguments.publish_solutions) 

36 student_repos, group_name = create_repos( 

37 arguments.source_path, 

38 arguments.repo_base_name, 

39 arguments.group_id, 

40 arguments.number_of_repos, 

41 create_gitlab_instance(arguments.gitlab_token), 

42 ) 

43 config_path = store_student_repo_info_to_config_file(arguments.repo_info_dir, group_name, student_repos) 

44 create_issues( 

45 [EVALUATION_DASHBOARD_TASK], 

46 read_student_repo_info_from_config_file(config_path), 

47 create_gitlab_instance(arguments.gitlab_token), 

48 ) 

49 

50 

51if __name__ == "__main__": 

52 main()