diff options
Diffstat (limited to 'src/ee/digikey')
-rw-r--r-- | src/ee/digikey/import_parts.py | 100 | ||||
-rw-r--r-- | src/ee/digikey/search_parts.py (renamed from src/ee/digikey/refresh_parts.py) | 25 |
2 files changed, 11 insertions, 114 deletions
diff --git a/src/ee/digikey/import_parts.py b/src/ee/digikey/import_parts.py deleted file mode 100644 index 748bbef..0000000 --- a/src/ee/digikey/import_parts.py +++ /dev/null @@ -1,100 +0,0 @@ -import os -from typing import List, MutableMapping - -from ee.xml import bomFile -from ee.xml.bom_file_utils import * -from ee.xml.uris import DIGIKEY_URI - -__all__ = ["import_parts"] - - -class Entry(object): - def __init__(self, new: bool, part: bomFile.Part): - self.new = new - self.part = part - - self.pn = find_pn(part) - self.dpn = find_dpn(part, DIGIKEY_URI) - - -def import_parts(in_path, out_path): - print("in: {}, out: {}".format(in_path, out_path)) - - in_file = bomFile.parse(in_path, True) - if in_file.partsProp is None: - in_file.partsProp = bomFile.PartList() - in_part_list = in_file.partsProp.partProp # type: List[bomFile.Part] - - print("in file: {} parts".format(len(in_part_list))) - - if os.path.isfile(out_path): - out_file = bomFile.parse(out_path, True) - else: - out_file = bomFile.BomFile() - - if out_file.partsProp is None: - out_file.partsProp = bomFile.PartList() - out_part_list = out_file.partsProp.partProp # type: List[bomFile.Part] - print("out file: {} parts".format(len(out_part_list))) - - existing_parts = [] # type: List[Entry] - pn_index = {} # type: MutableMapping[str, Entry] - dpn_index = {} # type: MutableMapping[str, Entry] - new_entry_added = 0 - - def add_entry(e: Entry): - existing_parts.append(e) - pn_index[e.pn] = e - dpn_index[e.dpn] = e - - if e.new: - out_part_list.append(e.part) - nonlocal new_entry_added - new_entry_added = new_entry_added + 1 - - print("len(out_part_list)={}".format(len(out_part_list))) - for part in out_part_list: # type: bomFile.Part - entry = Entry(False, part) - add_entry(entry) - - print("loaded {} existing parts".format(len(existing_parts))) - - for part in in_part_list: - pn_value = find_pn(part) - - if pn_value is None: - print("Skipping part with no part number: id={}".format(part.idProp)) - continue - - entry = pn_index.get(pn_value) - - if entry is not None: - print("Already imported pn_value={}".format(pn_value)) - continue - - print("Importing {}".format(pn_value)) - - pns = bomFile.PartNumberList() - - if pn_value is not None: - pns.add_part_number(bomFile.PartNumber(value=pn_value)) - - dpn_value = find_dpn(part, DIGIKEY_URI) - if dpn_value is not None: - pns.add_part_number(bomFile.PartNumber(value=dpn_value, distributor=DIGIKEY_URI)) - - if len(pns.part_numberProp) == 0: - continue - - new_part = bomFile.Part(part_numbers=pns) - entry = Entry(True, new_part) - add_entry(entry) - - if new_entry_added: - print("Imported {} entries".format(new_entry_added)) - tmp_path = out_path + ".tmp" - with open(tmp_path, "w") as f: - out_file.export(f, 0, name_="bom-file") - os.rename(tmp_path, out_path) - else: - print("no new entries") diff --git a/src/ee/digikey/refresh_parts.py b/src/ee/digikey/search_parts.py index 87edf2f..62bb4ee 100644 --- a/src/ee/digikey/refresh_parts.py +++ b/src/ee/digikey/search_parts.py @@ -1,13 +1,13 @@ -import os from pathlib import Path from typing import List from ee.digikey import Digikey, DigikeyParser, DigikeyClient, SearchResponseTypes, DigikeyProduct +from ee.part import PartDb, load_db, save_db from ee.xml import bomFile, bom_file_utils from ee.xml.bomFile import DigikeyDistributorInfo from ee.xml.uris import DIGIKEY_URI -__all__ = ["refresh_parts"] +__all__ = ["search_parts"] def resolved(di: DigikeyDistributorInfo, part: bomFile.Part, p: DigikeyProduct): @@ -23,17 +23,16 @@ def resolved(di: DigikeyDistributorInfo, part: bomFile.Part, p: DigikeyProduct): facts.append(bomFile.Fact(key=a.attribute_type.id, label=a.attribute_type.label, value=a.value)) -def refresh_parts(in_path: Path, out_path: Path, cache_dir: Path, force_refresh: bool): - print("in: {}, out: {}".format(in_path, out_path)) +def search_parts(in_dir: Path, out_dir: Path, cache_dir: Path, force_refresh: bool): + print("in: {}, out: {}".format(in_dir, out_dir)) - in_file = bomFile.parse(str(in_path), True) - if in_file.partsProp is None: - in_file.partsProp = bomFile.PartList() + in_db = load_db(in_dir) + out_parts = PartDb() parser = DigikeyParser(Digikey()) client = DigikeyClient(cache_dir) - for part in in_file.partsProp.partProp: # type: bomFile.Part + for part in in_db.iterparts(): dpn = bom_file_utils.find_dpn(part, DIGIKEY_URI) mpn = bom_file_utils.find_pn(part) @@ -89,9 +88,7 @@ def refresh_parts(in_path: Path, out_path: Path, cache_dir: Path, force_refresh: elif response.response_type == SearchResponseTypes.NO_MATCHES: di.stateProp = "not-found" - out_path = in_path - out_file = in_file - tmp_path = str(out_path) + ".tmp" - with open(tmp_path, "w") as f: - out_file.export(f, 0, name_="bom-file") - os.rename(tmp_path, str(out_path)) + out_parts.add_entry(part, True) + + print("Saving {} work parts".format(out_parts.size())) + save_db(out_dir, out_parts) |