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.py34
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: