#!/usr/bin/env python3 """ Test script for badge settings download/upload API endpoints. """ import requests import argparse import json from urllib.parse import urljoin def get_jwt_from_api_key(base_url, api_key): login_url = urljoin(base_url, "/v1/login") payload = {"api_token": api_key} headers = {"Content-Type": "application/json"} resp = requests.post(login_url, json=payload, headers=headers) if resp.status_code == 200: data = resp.json() return data.get("access_token") or data.get("token") print(f"Login failed: {resp.status_code} {resp.text}") return None def download_badges_json(base_url, jwt_token, output_file): url = urljoin(base_url, "/badges/settings/download") headers = {"Authorization": f"Bearer {jwt_token}"} resp = requests.get(url, headers=headers) if resp.status_code == 200: with open(output_file, "wb") as f: f.write(resp.content) print(f"Downloaded badge settings to {output_file}") return True print(f"Download failed: {resp.status_code} {resp.text}") return False def upload_badges_json(base_url, jwt_token, input_file): url = urljoin(base_url, "/badges/settings/upload") headers = {"Authorization": f"Bearer {jwt_token}"} with open(input_file, "rb") as f: files = {"file": (input_file, f, "application/json")} resp = requests.post(url, headers=headers, files=files) if resp.status_code == 200: data = resp.json() print("Accepted:", data.get("accepted")) print("Rejected:", data.get("rejected")) return True print(f"Upload failed: {resp.status_code} {resp.text}") return False def main(): parser = argparse.ArgumentParser(description="Test badge settings download/upload API.") parser.add_argument("--url", required=True, help="Base URL of the API server") parser.add_argument("--token", required=True, help="API key for authentication") parser.add_argument("--download", metavar="OUTPUT", help="Download badge settings to file") parser.add_argument("--upload", metavar="INPUT", help="Upload badge settings from file") args = parser.parse_args() jwt_token = get_jwt_from_api_key(args.url, args.token) if not jwt_token: print("Could not authenticate with provided API key.") exit(1) if args.download: download_badges_json(args.url, jwt_token, args.download) if args.upload: upload_badges_json(args.url, jwt_token, args.upload) if __name__ == "__main__": main()