diff options
Diffstat (limited to 'src/ee/digikey/search_parts.py')
-rw-r--r-- | src/ee/digikey/search_parts.py | 29 |
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) |