import argparse import json import logging import os import sys from prettytable import PrettyTable from .api import get_project_details, get_user, list_projects def parse_args(): """Parse the command line arguments""" parser = argparse.ArgumentParser() parser.add_argument( "-t", "--gitlab-token", help=( "A private access token to access GitLab with. If not specified " "will use $GL_TOKEN. Required." ), ) parser.add_argument("--debug", action="store_true") parser.add_argument("--log-file", default="gitlab2gitea.log") parser.add_argument("-f", "--format", default="json") subparsers = parser.add_subparsers() lp_sp = subparsers.add_parser("list-projects") lp_sp.set_defaults(func=list_projects) lp_sp = subparsers.add_parser("get-user") lp_sp.set_defaults(func=cli_get_user) lp_sp = subparsers.add_parser("get-project-details") lp_sp.add_argument("--project", required=True) lp_sp.set_defaults(func=get_project_details) args = parser.parse_args() log_level = logging.INFO if args.debug: log_level = logging.DEBUG logging.basicConfig(filename=args.log_file, level=log_level) if args.gitlab_token is None: args.gitlab_token = os.environ.get("GL_TOKEN") if args.gitlab_token is None: err_str = "/".join( [ac for ac in parser._actions if ac.dest == "gitlab_token"][ 0 ].option_strings ) parser.print_usage() print( f"{parser.prog}: error: the following arguments are " f"required: {err_str}" ) sys.exit(2) if "func" in args: args.func(args) return args def cli_get_user(args): logging.debug("cli_get_user called") user = get_user(args) print(json.dumps(user)) def cli_list_projects(args): logging.debug("cli_list_projects called") projects = list_projects(args) if args.format == "table": tbl = PrettyTable() tbl.align = "l" tbl.field_names = [ "ID", "Name", # "Description" ] for row in projects: tbl.add_row( [ row["id"], row["name"], # row["description"][:50] if row["description"] else "" ] ) print(tbl) elif args.format == "json": print(json.dumps(projects)) else: print(projects)