gitea-gitlab-exporter/src/gitea_gitlab_exporter/cli.py
2023-10-24 11:25:26 +11:00

106 lines
2.5 KiB
Python

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)