File indexing completed on 2024-04-21 05:41:18

0001 #!/usr/bin/env python3
0002 
0003 """
0004 Base module for the lab package
0005 """
0006 
0007 # SPDX-FileCopyrightText: 2020 Jonah BrĂ¼chert <jbb@kaidan.im>
0008 #
0009 # SPDX-License-Identifier: GPL-2.0-or-later
0010 
0011 import argparse
0012 import traceback
0013 from typing import List, Any
0014 
0015 from git.exc import GitCommandError
0016 
0017 from lab import (
0018     mergerequestcreator,
0019     mergerequestcheckout,
0020     mergerequestlist,
0021     feature,
0022     login,
0023     search,
0024     pipelines,
0025     fork,
0026     issues,
0027     issue,
0028     snippet,
0029     workflow,
0030     rewrite_remote,
0031 )
0032 from lab.utils import Utils, LogType
0033 
0034 
0035 class Parser:  # pylint: disable=R0903
0036     """
0037     Global parser, will instantiate subparser for each commands
0038     """
0039 
0040     def __init__(self) -> None:
0041         self.parser = argparse.ArgumentParser(description="The arcanist of GitLab.")
0042         self.subparsers = self.parser.add_subparsers(dest="subcommand")
0043 
0044         # init all subcommand
0045         command_list: List[Any] = [
0046             mergerequestcreator,
0047             mergerequestcheckout,
0048             mergerequestlist,
0049             feature,
0050             login,
0051             search,
0052             pipelines,
0053             fork,
0054             issue,
0055             issues,
0056             snippet,
0057             workflow,
0058             rewrite_remote,
0059         ]
0060         for command in command_list:
0061             parser = command.parser(self.subparsers)
0062             # if no default runner set fallback to default runner, run from command module
0063             if not parser.get_default(dest="runner"):
0064                 parser.set_defaults(runner=command.run)
0065 
0066     def parse(self) -> None:
0067         """
0068         parse args and run command
0069         """
0070         args: argparse.Namespace = self.parser.parse_args()
0071         if hasattr(args, "runner"):
0072             args.runner(args)
0073         else:
0074             self.parser.print_help()
0075 
0076 
0077 def main() -> None:
0078     """
0079     Entry point
0080     """
0081     parser: Parser = Parser()
0082 
0083     try:
0084         parser.parse()
0085     except GitCommandError as git_error:
0086         Utils.log(LogType.ERROR, str(git_error))
0087     except SystemExit:
0088         pass
0089     except KeyboardInterrupt:
0090         pass
0091     except:  # noqa: E722
0092         print()
0093         Utils.log(LogType.ERROR, "git-lab crashed. This should not happen.")
0094         print(
0095             "Please help us to fix it by opening an issue on",
0096             "https://invent.kde.org/sdk/git-lab/-/issues.",
0097             "Make sure to include the information below:",
0098             "\n```\n",
0099             traceback.format_exc(),
0100             "```",
0101         )
0102 
0103 
0104 if __name__ == "__main__":
0105     main()