import octopart def enum(*sequential, **named): enums = dict(zip(sequential, range(len(sequential))), **named) return type('Enum', (), enums) PackageType = enum('through_hole', 'smd') class ResistorSearch(): def __init__(self): self.params = {} self.fields = ['package_type', 'case', 'resistance', 'tolerance', 'seller'] def has_key(self, key): try: self.fields.index(key) except ValueError: raise Exception('Invalid key for search: ' + key) def __setitem__(self, key, item): self.has_key(key) self.params[key] = item def __getitem__(self, key): self.has_key(key) return self.params[key] # lifecycle_status # specs.resistance_tolerance.value def resistor_search(search): q = '' categories = octopart.category_search('Resistors') categories = filter(lambda c: c.name == 'Resistors', categories) if len(categories) == 0: raise Exception("Could not find category for resistors") category = categories[0] fields = {} # 'specs.case_package.value': {'q': '1206'}, fields['category_uids'] = {'q': category.uid} 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 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']) if len(sellers) == 0: raise Exception('Could not find seller: ' + seller) fields['offers.seller.name'] = {'q': sellers[0].name} res = octopart.part_search(q, limit=100, fields=fields) return res #search_response = resistor_search(1000, PackageType.smd, '1206') search = ResistorSearch() search['resistance'] = 1000 search['package_type'] = PackageType.smd search['case'] = '1206' search['seller'] = 'farnell' search_response = resistor_search(search) print "Hits: {}".format(search_response.hits) for search_result in search_response.results: p = search_result.item print "{}: Snippet: {}".format(p.uid, search_result.snippet) # print "Uid: {}".format(p.uid) # print "Offers: " # for o in p.offers: # print " SKU: {}".format(o.sku) # for (currency, prices) in o.prices.iteritems(): # for price in prices: # print " {}: {}@{}".format(currency, price.amount, price.quantity) # pass