diff --git a/osc/commands_git/api.py b/osc/commands_git/api.py new file mode 100644 index 00000000..ee147f0e --- /dev/null +++ b/osc/commands_git/api.py @@ -0,0 +1,51 @@ +import json +import sys + +import osc.commandline_git + + +class ApiCommand(osc.commandline_git.GitObsCommand): + """ + Make an arbitrary request to API + """ + + name = "api" + + def init_arguments(self): + self.add_argument( + "-X", + "--method", + choices=["GET", "HEAD", "POST", "PATCH", "PUT"], + default="GET", + ) + self.add_argument( + "url", + ) + self.add_argument("--data") + + def run(self, args): + from osc import gitea_api + from osc.output import tty + + self.print_gitea_settings() + + url = self.gitea_conn.makeurl(args.url) + + json_data = None + if args.data: + json_data = json.loads(args.data) + + response = self.gitea_conn.request( + method=args.method, url=url, json_data=json_data + ) + print(tty.colorize("Response:", "white,bold"), file=sys.stderr) + if response.headers.get("Content-Type", "").startswith("application/json;"): + print( + json.dumps( + json.loads(response.data), + indent=4, + sort_keys=True, + ) + ) + else: + print(response.data.decode("utf-8"))