diff options
Diffstat (limited to 'src/ee/supplier')
-rw-r--r-- | src/ee/supplier/seeed.py | 138 |
1 files changed, 71 insertions, 67 deletions
diff --git a/src/ee/supplier/seeed.py b/src/ee/supplier/seeed.py index 45cff44..b4b17e9 100644 --- a/src/ee/supplier/seeed.py +++ b/src/ee/supplier/seeed.py @@ -58,92 +58,96 @@ def _get(obj, key): return value.strip() -def download_opls(out_dir: Path, cache_dir: Path): - opls_types = ["SEEED", "HQCHIP"] - +def download_opl(out_path: Path, cache_dir: Path, opl_type: str): s = requests.Session() from ee.money import get_default_context money = get_default_context() - for opls_type in opls_types: - page_offset = 1 - page_length = 30 - count = 0 + page_offset = 1 + page_length = 30 + count = 0 + + cd = cache_dir / opl_type if cache_dir else cache_dir + cache = ee._utils.maybe_cache(cd, ext="json") + + db = PartDb() + + while True: + cache_key = "{}-{}".format(opl_type, page_offset) + content = cache.lookup(cache_key) + if content is None: + form = { + "page_offset": page_offset, + "page_length": page_length, + "keyword": "", + "category": "", + "type": opl_type, + } + query = { + "guid": "A8D502008EB2E4FD3FE9CE5E0855E8E4", + "appid": "en.pc.bazaar", + } + r = s.get("https://sapi.seeedstudio.com/fusion/opl/list", params=query, data=form) + content = r.text + cache.save(cache_key, content) - cd = cache_dir / opls_type if cache_dir else cache_dir - cache = ee._utils.maybe_cache(cd, ext="json") + obj = json.loads(content) + supplier_uri = "http://purl.org/ee/supplier/seeed?{}".format(urlencode({"opl": opl_type})) - db = PartDb() + parts = obj["data"]["list"] - while True: - cache_key = "{}-{}".format(opls_type, page_offset) - content = cache.lookup(cache_key) - if content is None: - form = { - "page_offset": page_offset, - "page_length": page_length, - "keyword": "", - "category": "", - "type": opls_type, - } - query = { - "guid": "A8D502008EB2E4FD3FE9CE5E0855E8E4", - "appid": "en.pc.bazaar", - } - r = s.get("https://sapi.seeedstudio.com/fusion/opl/list", params=query, data=form) - content = r.text - cache.save(cache_key, content) + for p in parts: + # print(json.dumps(p, indent=4)) + mpn = _get(p, "mpn") + sku = _get(p, "sku") + datasheet = _get(p, "datasheet") + desc = _get(p, "desc") + package = _get(p, "package") - obj = json.loads(content) - supplier_uri = "http://purl.org/ee/supplier/seeed?{}".format(urlencode({"opl": opls_type})) + if mpn is None and sku is None: + continue - parts = obj["data"]["list"] + ladder_price = p["ladder_price"] - for p in parts: - # print(json.dumps(p, indent=4)) - mpn = _get(p, "mpn") - sku = _get(p, "sku") - datasheet = _get(p, "datasheet") - desc = _get(p, "desc") - package = _get(p, "package") + xml = types.Part(references=types.ReferencesList(), price_breaks=types.PriceBreakList()) + xml.supplierProp = supplier_uri - if mpn is None and sku is None: - continue + xml.descriptionProp = desc - ladder_price = p["ladder_price"] + uri_params = { + "opl": opl_type, + } + if sku: + uri_params["sku"] = sku + if mpn: + uri_params["mpn"] = mpn + xml.uriProp = "http://purl.org/ee/supplier/seeed?{}".format(urlencode(uri_params)) - xml = types.Part(references=types.ReferencesList(), price_breaks=types.PriceBreakList()) - xml.supplierProp = supplier_uri + part = Part(xml) - xml.descriptionProp = desc + if mpn: + part.add_mpn(mpn) + if sku: + part.add_spn(sku) - uri_params = { - "opl": opls_type, - } - if sku: - uri_params["sku"] = sku - if mpn: - uri_params["mpn"] = mpn - xml.uriProp = "http://purl.org/ee/supplier/seeed?{}".format(urlencode(uri_params)) + for item in ladder_price: + price = money.parse(item["price"], currency="USD") + part.add_price_break(item["qty"], price) - part = Part(xml) + db.add_entry(part, True) - if mpn: - part.add_mpn(mpn) - if sku: - part.add_spn(sku) + page_offset += 1 + count += len(parts) + if len(parts) != page_length: + break - for item in ladder_price: - price = money.parse(item["price"], currency="USD") - part.add_price_break(item["qty"], price) + print("Imported {} parts from Seeed's {} library".format(count, opl_type)) + save_db(out_path, db, sort=True) - db.add_entry(part, True) - page_offset += 1 - count += len(parts) - if len(parts) != page_length: - break +def init_project(project): + opls = ["SEEED", "HQCHIP"] - print("Imported {} parts from Seeed's {} library".format(count, opls_type)) - save_db(out_dir / "{}.xml".format(opls_type), db, sort=True) + project.cfg.add_section("seeed-opl") + project.cfg["seeed-opl"]["opls"] = ", ".join(opls) |