aboutsummaryrefslogtreecommitdiff
path: root/src/ee/digikey/search_parts.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/ee/digikey/search_parts.py')
-rw-r--r--src/ee/digikey/search_parts.py29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/ee/digikey/search_parts.py b/src/ee/digikey/search_parts.py
index 5319ba9..59a1fe3 100644
--- a/src/ee/digikey/search_parts.py
+++ b/src/ee/digikey/search_parts.py
@@ -77,34 +77,51 @@ class QueryEngine(object):
self.pn_spn_search(pn, True)
def pn_spn_search(self, pn, is_spn):
+ s = "Searching for '{}'".format(pn)
+ print(s, file=self.log)
+ print("=" * len(s) + "\n", file=self.log)
+
out_part = None
result = None
text = self.client.search(pn)
- response = self.parser.parse_string(text)
+ response = self.parser.parse_string(self.client.baseurl, text)
if response.response_type == SearchResponseTypes.SINGLE:
out_part = resolved(self.store.url, response.products[0])
result = "found"
elif response.response_type == SearchResponseTypes.MANY:
- # find those with an exact match. Digikey uses a prefix search so a query for "FOO" will return "FOO"
- # and "FOOT".
+ print("Got many responses:\n", file=self.log)
+
+ from ee._utils import gen_rst_table
+ data = [[p.part_number, p.mpn] for p in response.products]
+ print(gen_rst_table(["DK", "MPN"], data), file=self.log)
+
+ # find those with an exact match. Digikey uses a "contains" search so a query for "FOO" will return "FOO",
+ # "FOOT" and "AFOO".
def get_field(p):
return p.part_number if is_spn else p.mpn
filtered_products = [p for p in response.products if get_field(p) == pn]
if len(filtered_products) == 0:
+ print("No items matched the query.", file=self.log)
result = "not-found"
else:
- dpn = sorted(filtered_products, key=lambda p: p.part_number)[0].part_number
+ part = sorted(filtered_products, key=lambda p: p.part_number)[0]
+
+ print("Found {} matching products, but their facts are the same so picked ``{}`` for more info.".format(
+ len(filtered_products), part.part_number), file=self.log)
- response = self.parser.parse_string(self.client.search(dpn))
+ page = self.client.get_for_product_url(part.url, part.part_number)
+ response = self.parser.parse_string(self.client.baseurl, page)
if response.response_type == SearchResponseTypes.SINGLE:
out_part = resolved(self.store.url, response.products[0])
result = "found"
else:
+ print("Unable to narrow down the part, got {} new products. Giving up.".format(
+ len(response.products)), file=self.log)
result = "many"
elif response.response_type == SearchResponseTypes.TOO_MANY:
@@ -116,7 +133,7 @@ class QueryEngine(object):
if out_part.uri not in self.uri_idx:
self.out_parts.add(out_part)
- print("Searching for '{}': {}".format(pn, result), file=self.log)
+ print("\nResult: {}".format(result), file=self.log)
print("", file=self.log)