summaryrefslogtreecommitdiff
path: root/octopart/part_search.py
diff options
context:
space:
mode:
Diffstat (limited to 'octopart/part_search.py')
-rw-r--r--octopart/part_search.py65
1 files changed, 43 insertions, 22 deletions
diff --git a/octopart/part_search.py b/octopart/part_search.py
index 438cb67..08834fe 100644
--- a/octopart/part_search.py
+++ b/octopart/part_search.py
@@ -1,7 +1,7 @@
from octopart import enum
import octopart
-def part_search(q, start = 0, limit = False, fields={}, include=[]):
+def part_search(q, start = 0, limit = False, fields={}, includes=[]):
p = {'q': q, 'start': 0}
if limit:
p['limit'] = limit
@@ -17,9 +17,8 @@ def part_search(q, start = 0, limit = False, fields={}, include=[]):
# arr.append(data['q'])
pass
- if len(include) > 0:
- p['include[]'] = include
-
+ if len(includes) > 0:
+ p['include[]'] = includes
# p['spec_drilldown[include]'] = 'true'
@@ -31,21 +30,34 @@ PackageType = enum('through_hole', 'smd')
class ResistorSearch():
def __init__(self):
self.params = {}
- self.fields = ['package_type', 'case', 'resistance', 'tolerance', 'seller']
+ self.fields = ['package_type', 'case', 'resistance', 'tolerance', 'seller', 'power_rating']
+
+ def has_value(self, field):
+ self.assert_has_field(field)
+ try:
+ return self.params[field] is not None
+ except KeyError:
+ return False
- def has_key(self, key):
+ def has_field(self, field):
try:
- self.fields.index(key)
+ self.fields.index(field)
+ return True
except ValueError:
- raise Exception('Invalid key for search: ' + key)
+ return False
+
+ def assert_has_field(self, field):
+ if not self.has_field(field):
+ raise Exception('Missing parameter for search: ' + field)
- def __setitem__(self, key, item):
- self.has_key(key)
- self.params[key] = item
+ def __setitem__(self, field, item):
+ self.assert_has_field(field)
+ if field is not None:
+ self.params[field] = item
- def __getitem__(self, key):
- self.has_key(key)
- return self.params[key]
+ def __getitem__(self, field):
+ self.assert_has_field(field)
+ return self.params[field]
# lifecycle_status
# specs.resistance_tolerance.value
@@ -64,20 +76,29 @@ def resistor_search(search):
fields['specs.resistance.value'] = {'q': search['resistance']}
# case_package is broken (always returns 0 hits), but it is usually in the description
- if search['case'] is not None:
- q += ' ' + search['case']
+ if search.has_value('case'):
+ q += ' ' + search['case']
+
+ if search.has_value('power_rating'):
+ fields['specs.power_rating.value'] = {'q': '[' + str(search['power_rating']) + ' TO 2500]'}
# if package_type == PackageType.smd:
# fields['specs.case_package.value'] = {'q': '1210'}
- seller = search['seller']
- if seller is not None:
- sellers = octopart.seller_search(search['seller'])
+ resolved_seller = None
+ if search.has_value('seller'):
+ seller = search['seller']
+ sellers = octopart.seller_search(seller)
if len(sellers) == 0:
raise Exception('Could not find seller: ' + seller)
- fields['offers.seller.name'] = {'q': sellers[0].name}
+ resolved_seller = sellers[0].name
+ fields['offers.seller.name'] = {'q': resolved_seller}
- res = octopart.part_search(q, limit=100, fields=fields)
- return res
+ includes = []
+# includes.append('specs')
+ res = octopart.part_search(q, limit=100, fields=fields, includes=includes)
+ if resolved_seller:
+ res.filter_seller(resolved_seller)
+ return res