from inventree.api import InvenTreeAPI from inventree.part import Part, PartCategory from inventree.base import Parameter from inventree.company import Company, ManufacturerPart, SupplierPart, ManufacturerPartParameter import os import sys import digikey from digikey.v3.productinformation import KeywordSearchRequest os.environ['DIGIKEY_CLIENT_ID'] = 'DjV4w1v0ebNTiL7Nqvslw0GkNYuYdrLG' os.environ['DIGIKEY_CLIENT_SECRET'] = 'dK0dTRimeq3aiPH1' os.environ['DIGIKEY_CLIENT_SANDBOX'] = 'False' os.environ['DIGIKEY_STORAGE_PATH'] = 'C:\\Users\\Oliver\\Desktop\\digikey\\' INVENTREE_URL = "http://localhost:8000" INVENTREE_USERNAME = "admin" INVENTREE_PASSWORD = "inventree" inventree = InvenTreeAPI(INVENTREE_URL, username=INVENTREE_USERNAME, password=INVENTREE_PASSWORD) resistors = Part.list(inventree, category=5) def getParameter(result, name): for param in result.parameters: if param.parameter.lower() == name.lower(): return param return None def getValue(result, name): param = getParameter(result, name) if param: return param.value else: return None manufacturers = {} DIGIKEY_PK = 1 for res in resistors: search_term = res.name.replace('_', ' ').replace('R ' , 'Resistor ') print(res.name, res.description) request = KeywordSearchRequest(search_term, record_count=25) result = digikey.keyword_search(body=request) # Set of manufacturer part numbers MPN = set() for product in result.products: mpn = product.manufacturer_part_number print(f"> {mpn}") if mpn in MPN or len(MPN) >= 5: continue MPN.add(mpn) sku = product.digi_key_part_number man_name = product.manufacturer.value if man_name in manufacturers.keys(): manufacturer = manufacturers[man_name] else: # Search InvenTree for manufacturer name query = Company.list(inventree, search=man_name) if len(query) == 0: print(f"Creating new manufacturer: '{man_name}'") manufacturer = Company.create(inventree, data={ 'is_supplier': False, 'is_manufacturer': True, 'name': man_name, }) else: manufacturer = query[0] manufacturers[man_name] = manufacturer m_parts = ManufacturerPart.list(inventree, MPN=mpn) print("Existing Manufacturer Parts:") for mp in m_parts: print(f" - {mp.MPN}, {mp.manufacturer}") if len(m_parts) == 0: print(f"Creating new part: {man_name} -> {mpn}") manufacturer_part = ManufacturerPart.create(inventree, data={ 'part': res.pk, 'manufacturer': manufacturer.pk, 'MPN': mpn, }) else: manufacturer_part = m_parts[0] # Check if a "supplier part" exists s_parts = SupplierPart.list( inventree, manufacturer_part=manufacturer_part.pk, supplier=DIGIKEY_PK ) if s_parts is None or len(s_parts) == 0: print(f"Creating new supplier part") SupplierPart.create(inventree, data={ 'part': res.pk, 'supplier': DIGIKEY_PK, 'manufacturer_part': manufacturer_part.pk, 'SKU': sku, 'link': product.product_url, 'description': product.product_description, })