diff options
Diffstat (limited to 'src/ee/digikey/search_parts.py')
-rw-r--r-- | src/ee/digikey/search_parts.py | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/src/ee/digikey/search_parts.py b/src/ee/digikey/search_parts.py index 59a1fe3..e79959a 100644 --- a/src/ee/digikey/search_parts.py +++ b/src/ee/digikey/search_parts.py @@ -5,6 +5,7 @@ from typing import List, MutableSet, Mapping from ee.db import ObjDb from ee.digikey import Digikey, DigikeyParser, DigikeyClient, SearchResponseTypes, DigikeyProduct, DigikeyStore from ee.part import PartDb, load_db, save_db, Part +from ee.tools import mk_parents from ee.xml import types from ee.xml.uris import make_digikey_fact_key @@ -61,7 +62,7 @@ class QueryEngine(object): self.log = log self.store = DigikeyStore.from_store_code(store_code) self.parser = DigikeyParser(Digikey()) - self.client = DigikeyClient(self.store.products_url, cache_dir) + self.client = DigikeyClient(self.store.frontpage_url, cache_dir) out_parts: ObjDb[Part] = ObjDb[Part]() self.uri_idx = out_parts.add_unique_index("uri", lambda p: p.uri) @@ -71,10 +72,10 @@ class QueryEngine(object): self.out_parts = out_parts def pn_search(self, pn): - self.pn_spn_search(pn, False) + return self.pn_spn_search(pn, False) def spn_search(self, pn): - self.pn_spn_search(pn, True) + return self.pn_spn_search(pn, True) def pn_spn_search(self, pn, is_spn): s = "Searching for '{}'".format(pn) @@ -87,7 +88,9 @@ class QueryEngine(object): text = self.client.search(pn) response = self.parser.parse_string(self.client.baseurl, text) - if response.response_type == SearchResponseTypes.SINGLE: + if response.response_type == SearchResponseTypes.EXCEPTION: + result = "exception" + elif response.response_type == SearchResponseTypes.SINGLE: out_part = resolved(self.store.url, response.products[0]) result = "found" elif response.response_type == SearchResponseTypes.MANY: @@ -136,6 +139,8 @@ class QueryEngine(object): print("\nResult: {}".format(result), file=self.log) print("", file=self.log) + return response.response_type + def resolved(supplier, p: DigikeyProduct) -> Part: # TODO: fix uri @@ -177,6 +182,7 @@ def resolved(supplier, p: DigikeyProduct) -> Part: def search_parts(in_path: Path, out_path: Path, log_path: Path, cache_dir: Path, store_code): + mk_parents(log_path) with log_path.open("w") as log: run_search_parts(in_path, out_path, log, cache_dir, store_code) @@ -210,13 +216,21 @@ def run_search_parts(in_path: Path, out_path: Path, log, cache_dir: Path, store_ print("Executing {} manufacturer product number searches\n\n".format(len(pn_queries)), file=log) + exception = False for q in pn_queries: - engine.pn_search(q.pn) - - print("Executing {} supplier product number searches\n\n".format(len(spn_queries)), file=log) - - for q in spn_queries: - engine.spn_search(q.spn) + res = engine.pn_search(q.pn) + if res == SearchResponseTypes.EXCEPTION: + exception = True + break + + if not exception: + print("Executing {} supplier product number searches\n\n".format(len(spn_queries)), file=log) + + for q in spn_queries: + res = engine.spn_search(q.spn) + if res == SearchResponseTypes.EXCEPTION: + exception = True + break part_db = PartDb() for part in engine.out_parts: |