aboutsummaryrefslogtreecommitdiff
path: root/src/ee/digikey/__init__.py
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2019-04-14 19:41:30 +0200
committerTrygve Laugstøl <trygvis@inamo.no>2019-04-14 19:41:30 +0200
commit37e4be24129b6980e3e9fced7345d4a596af3d58 (patch)
tree3443f320e6fd77558786fb022cb78b5babcc1985 /src/ee/digikey/__init__.py
parent791cd8213214feb7af77e434ee260e48984086fb (diff)
downloadee-python-37e4be24129b6980e3e9fced7345d4a596af3d58.tar.gz
ee-python-37e4be24129b6980e3e9fced7345d4a596af3d58.tar.bz2
ee-python-37e4be24129b6980e3e9fced7345d4a596af3d58.tar.xz
ee-python-37e4be24129b6980e3e9fced7345d4a596af3d58.zip
digikey:
o More flexibility, making room for the multiple digikey stores. o Removing URLs from core code. new tools: split_parts_by_supplier.
Diffstat (limited to 'src/ee/digikey/__init__.py')
-rw-r--r--src/ee/digikey/__init__.py50
1 files changed, 46 insertions, 4 deletions
diff --git a/src/ee/digikey/__init__.py b/src/ee/digikey/__init__.py
index 9815a8f..31d5c41 100644
--- a/src/ee/digikey/__init__.py
+++ b/src/ee/digikey/__init__.py
@@ -8,6 +8,7 @@ import urllib.parse
from functools import total_ordering
from pathlib import Path
from typing import List, Optional
+from urllib.parse import urlparse, parse_qs
from lxml import html
from selenium import webdriver
@@ -59,6 +60,48 @@ def _first(collection, default=None):
return next(iter(collection), default)
+class DigikeyStore(object):
+ BASEURL = "http://purl.org/ee/supplier/digikey"
+
+ def __init__(self, url, store, products_url):
+ self.url = url
+ self.store = store
+ self.products_url = products_url
+
+ @staticmethod
+ def from_store_code(store_code):
+ url = "{}?store={}".format(DigikeyStore.BASEURL, store_code)
+
+ products_url = "https://www.digikey.com/products/en" if store_code == "us" else \
+ "https://www.digikey.{}/products/en".format(store_code)
+
+ return DigikeyStore(url, store_code, products_url)
+
+ @staticmethod
+ def from_url(store_url) -> Optional["DigikeyStore"]:
+ base = urlparse(DigikeyStore.BASEURL)
+ url = urlparse(store_url)
+
+ if base.scheme != url.scheme or \
+ base.netloc != url.netloc or \
+ base.path != url.path:
+ return None
+
+ q = parse_qs((url.query or "").strip())
+
+ store = q.get("store")
+
+ if not store:
+ return None
+
+ del q["store"]
+
+ if len(q):
+ return None
+
+ return DigikeyStore.from_store_code(store[0])
+
+
class Digikey(object):
def __init__(self):
self.attribute_types = {}
@@ -230,7 +273,8 @@ class DigikeyClient(object):
def __nop(self, message):
pass
- def __init__(self, cache_dir: Path = None, on_download=None):
+ def __init__(self, baseurl, cache_dir: Path = None, on_download=None):
+ self.baseurl = baseurl
self.on_download = on_download or self.__nop
self.cache = ee._utils.maybe_cache(cache_dir)
self.driver: Optional[webdriver.Chrome] = None
@@ -241,13 +285,11 @@ class DigikeyClient(object):
def product_search(self, query: str, page_size=10) -> str:
params = {'lang': 'en', 'site': 'us', 'keywords': query, 'pageSize': str(page_size)}
cache_key = urllib.parse.quote(query)
- page = self._req("https://www.digikey.com/products/en", cache_key=cache_key, params=params)
+ page = self._req(self.baseurl, cache_key=cache_key, params=params)
return page
def _req(self, url, cache_key, params=None):
- if not url.startswith("http"):
- url = "https://www.digikey.com" + url
url = url + ("" if not params else "?" + urllib.parse.urlencode(params))
cached = self.cache.lookup(cache_key)