docker-artifact/repobot/cli.py

45 lines
1.6 KiB
Python

#!/usr/bin/env python3
import requests
import traceback
def main():
import argparse
parser = argparse.ArgumentParser(description="package storage command line interface")
parser.add_argument('-s', '--server', required=True, help="artifact server")
subparser_action = parser.add_subparsers(dest='action', help='action')
subparser_upload = subparser_action.add_parser('upload', help='upload package to repository')
subparser_upload.add_argument('-y', '--provider', required=True, help="packaging provider")
subparser_upload.add_argument('-f', '--file', required=True, help="file to upload")
subparser_upload.add_argument('-r', '--repo', required=True, help="repo name")
subparser_upload.add_argument('-p', '--package', required=True, help="package name")
subparser_upload.add_argument('-i', '--package-version', required=True, help="package version")
subparser_upload.add_argument('-a', '--args', nargs="+", help="extra args")
args = parser.parse_args()
params = {"provider": args.provider,
"reponame": args.repo,
"name": args.package,
"version": args.package_version}
if args.args:
for entry in args.args:
key, value = entry.split('=', 1)
if key in params:
parser.error(f"duplicate parameter '{key}'")
params[key] = value
endpoint = f'{args.server}/addpkg'
resp = requests.post(endpoint, params=params, files={'f': open(args.file, 'rb')})
try:
resp.raise_for_status()
except Exception:
traceback.print_exc()
print(resp.text)