aboutsummaryrefslogtreecommitdiff
path: root/src/ee/tools
diff options
context:
space:
mode:
Diffstat (limited to 'src/ee/tools')
-rw-r--r--src/ee/tools/digikey_download_facts.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/ee/tools/digikey_download_facts.py b/src/ee/tools/digikey_download_facts.py
new file mode 100644
index 0000000..f21f171
--- /dev/null
+++ b/src/ee/tools/digikey_download_facts.py
@@ -0,0 +1,59 @@
+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])