Skip to content

Instantly share code, notes, and snippets.

@bbengfort
Created April 5, 2024 22:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bbengfort/e9199fd6f9129d01a48018cd987c2296 to your computer and use it in GitHub Desktop.
Save bbengfort/e9199fd6f9129d01a48018cd987c2296 to your computer and use it in GitHub Desktop.
Access the randommer.io API to generate fake crypto addresses and names for test fixtures.
#!/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()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment