diff options
Diffstat (limited to 'src/ee/tools')
-rw-r--r-- | src/ee/tools/digikey_download_facts.py | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/src/ee/tools/digikey_download_facts.py b/src/ee/tools/digikey_download_facts.py index a1e242b..08a8029 100644 --- a/src/ee/tools/digikey_download_facts.py +++ b/src/ee/tools/digikey_download_facts.py @@ -37,9 +37,16 @@ def mpn_to_path(mpn): return "{}/{}.yaml".format(args.out, mpn) -def on_product(p: DigikeyProduct): - y = p.to_yaml() - with open(mpn_to_path(p.mpn), "w") as f: +def on_product(product: DigikeyProduct): + y = product.to_yaml() + + filename = mpn_to_path(product.mpn) + dirname = os.path.dirname(filename) + + if not os.path.isdir(dirname): + os.mkdir(dirname) + + with open(filename, "w") as f: yaml.dump(y, f, encoding="utf-8", allow_unicode=True) @@ -54,11 +61,22 @@ for p in args.parts: if response.response_type == SearchResponseTypes.SINGLE: p = response.products[0] - print(color("Found {}".format(p.mpn), "white")) + print(color("Direct match {}".format(p.mpn), "white")) on_product(p) elif response.response_type == SearchResponseTypes.MANY: - for k, g in groupby(sorted(response.products), lambda p: p.mpn): - print(color("Found {}".format(k), "white")) + hits = list(groupby(sorted(response.products), lambda p: p.mpn)) + + if len(hits) == 1: + (mpn, products) = hits[0] + products = list(products) + + if len(products) == 1: + print(color("Got many results, but they all point to the same part: {}".format(mpn), "white")) + on_product(products[0]) + continue + + for k, g in hits: + print(color("Got many results with many parts: {}: {}".format(k, list(g)), "white")) on_product(list(g)[0]) elif response.response_type == SearchResponseTypes.TOO_MANY: print(color("Too many results ({}), select a category first".format(response.count), 'red')) |