from colors import color import argparse import sys import ee.digikey as dk import pandas from itertools import * import yaml import os.path parser = argparse.ArgumentParser(description="Download facts about parts from Digi-Key") parser.add_argument("parts", metavar="PART", nargs="+", help="The parts to download fact for") parser.add_argument("--out", required=True, metavar="OUTPUT_DIRECTORY", dest="out", action="store", help="A directory to store fact files") parser.add_argument("--force", dest="force", action="store", help="Always download fact even if there is a local file") args = parser.parse_args() digikey = dk.Digikey() client = dk.DigikeyClient(digikey, on_download=lambda s: print(color(s, 'grey'))) def mpn_to_path(mpn): return "{}/{}.yaml".format(args.out, mpn) def on_product(p): y = p.to_yaml() with open(mpn_to_path(p.mpn), "w") as f: yaml.dump(y, f, encoding="utf-8", allow_unicode=True) for p in args.parts: print(color("Searching for {}".format(p), "white")) path = mpn_to_path(p) if os.path.isfile(path) and not args.force: continue response = client.search(p) if not response: print(color("Part not found", "orange")) elif isinstance(response, dk.DigikeyProduct): print(color("Found {}".format(response.mpn))) on_product(response) else: for k, g in groupby(sorted(response.products), lambda p: p.mpn): print(color("Found {}".format(k), "white")) on_product(list(g)[0])