#!/usr/bin/env python3 import os import requests import argparse API_KEY_VAR = "RANDOMMER_API_KEY" CRYPTO_TYPES = "https://randommer.io/api/Finance/CryptoAddress/Types" CRYPTO_ADDRESS = "https://randommer.io/api/Finance/CryptoAddress" RANDOM_NAME = "https://randommer.io/api/Name" def apikey(): key = os.getenv(API_KEY_VAR) if key is None: raise ValueError("missing randommer api key") return key def session(): session = requests.Session() session.headers.update({"X-API-Key": apikey()}) return session def blockchain(args): client = session() if args.list: rep = client.get(CRYPTO_TYPES) print(rep.json()) return params = {"cryptoType": args.type} rep = client.get(CRYPTO_ADDRESS, params=params) print(rep.json()) def random_name(args): params = { "nameType": args.type, "quantity": args.num, } client = session() rep = client.get(RANDOM_NAME, params=params) print(rep.json()) if __name__ == "__main__": cmds = { "blockchain": { "help": "generate random blockchain wallet addresses", "func": blockchain, "args": { ("-t", "--type"): { "type": str, "default": "Bitcoin", "metavar": "CTYPE", "help": "the type of crypto address to generate" }, ("-l", "--list"): { "action": "store_true", "default": False, "help": "list the available crypto address types and exit", } }, }, "name": { "help": "generate a random natural person name", "func": random_name, "args": { ("-t", "--type"): { "type": str, "default": "fullname", "metavar": "TYPE", "choices": ("firstname", "surname", "fullname"), "help": "specify the type of name to generate", }, ("-n", "--num"): { "type": int, "default": 1, "metavar": "N", "help": "the number of names to generate", }, } } } parser = argparse.ArgumentParser( description="uses randommer.io to generate random fixture data", epilog="ensure the $RANDOMMER_API_KEY environment variable is set" ) subparsers = parser.add_subparsers( title="generators", description="random fixture generators" ) for cmd, cargs in cmds.items(): cmdparser = subparsers.add_parser(cmd, help=cargs.get('help')) cmdparser.set_defaults(func=cargs.get('func')) for pargs, kwargs in cargs.get("args", {}).items(): if isinstance(pargs, str): pargs = (pargs,) cmdparser.add_argument(*pargs, **kwargs) args = parser.parse_args() if hasattr(args, "func"): try: args.func(args) except Exception as e: parser.error(e) else: parser.print_help()