From 7c23381adb08ccdb8289c9a29e907679b7bde2fc Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Wed, 28 Apr 2021 12:13:12 -0300 Subject: [PATCH] Added distributors selection to KiCost+KiBot --- README.md | 8 +-- docs/samples/generic_plot.kibot.yaml | 10 ++-- kibot/bom/xlsx_writer.py | 49 ++++++++++++++++++- kibot/kiplot.py | 2 + kibot/misc.py | 2 +- kibot/out_bom.py | 7 +++ kibot/out_kicost.py | 8 +-- submodules/KiCost | 2 +- tests/data/kitspace_queries.txt | 5 ++ .../KiCost/kibom-variant_2c-bom_dk_mou.csv | 14 ++++++ .../kibom-variant_2c-bom_dk_mou_dnf.csv | 14 ++++++ tests/test_plot/test_kicost.py | 14 ++++++ .../int_bom_kicost_sel_dist_1_xlsx.kibot.yaml | 40 +++++++++++++++ 13 files changed, 157 insertions(+), 18 deletions(-) create mode 100644 tests/reference/5_1_6/KiCost/kibom-variant_2c-bom_dk_mou.csv create mode 100644 tests/reference/5_1_6/KiCost/kibom-variant_2c-bom_dk_mou_dnf.csv create mode 100644 tests/yaml_samples/int_bom_kicost_sel_dist_1_xlsx.kibot.yaml diff --git a/README.md b/README.md index e3ee358f..92ab8a08 100644 --- a/README.md +++ b/README.md @@ -678,6 +678,7 @@ Next time you need this list just use an alias, like this: - `hide_stats_info`: [boolean=false] Hide statistics information. - `quote_all`: [boolean=false] Enclose all values using double quotes. - `separator`: [string=','] CSV Separator. TXT and TSV always use tab as delimiter. + - `distributors`: [string|list(string)] Include this distributors list. Default is all the available. - `dnc_filter`: [string|list(string)='_kibom_dnc'] Name of the filter to mark components as 'Do Not Change'. The default filter marks components with a DNC value or DNC in the Config field. - `dnf_filter`: [string|list(string)='_kibom_dnf'] Name of the filter to mark components as 'Do Not Fit'. @@ -713,6 +714,7 @@ Next time you need this list just use an alias, like this: - `no_conflict`: [list(string)] List of fields where we tolerate conflicts. Use it to avoid undesired warnings. By default the field indicated in `fit_field` and the field `part` are excluded. + - `no_distributors`: [string|list(string)] Exclude this distributors list. They are removed after computing `distributors`. - `normalize_locale`: [boolean=false] When normalizing values use the locale decimal point. - `normalize_values`: [boolean=false] Try to normalize the R, L and C values, producing uniform units and prefixes. - `number`: [number=1] Number of boards to build (components multiplier). @@ -1123,8 +1125,7 @@ Next time you need this list just use an alias, like this: - `file`: [string=''] Name of the XML to aggregate. - `variant`: [string=' '] Variant for this project. - `currency`: [string|list(string)=USD] Currency priority. Use ISO4217 codes (i.e. USD, EUR). - - `distributors`: [string|list(string)] Use only this distributors list. Default is all the available. - Not compatible with `no_distributors` option. + - `distributors`: [string|list(string)] Include this distributors list. Default is all the available. - `dnf_filter`: [string|list(string)=''] Name of the filter to mark components as not fitted. A short-cut to use for simple cases where a variant is an overkill. Internal variants and filters are currently ignored. @@ -1134,8 +1135,7 @@ Next time you need this list just use an alias, like this: - `ignore_fields`: [string|list(string)] List of fields to be ignored. - `kicost_variant`: [string=''] Regular expression to match the variant field (KiCost option, not internal variants). - `no_collapse`: [boolean=false] Do not collapse the part references (collapse=R1-R4). - - `no_distributors`: [string|list(string)] Use all but this distributors list. Default is use all the available. - Not compatible with `distributors` option. + - `no_distributors`: [string|list(string)] Exclude this distributors list. They are removed after computing `distributors`. - `no_price`: [boolean=false] Do not look for components price. For testing purposes. - `output`: [string='%f-%i%v.%x'] Filename for the output (%i=kicost, %x=xlsx). Affected by global options. - `show_cat_url`: [boolean=false] Include the catalogue links in the catalogue code. diff --git a/docs/samples/generic_plot.kibot.yaml b/docs/samples/generic_plot.kibot.yaml index 5816a120..4c61ed32 100644 --- a/docs/samples/generic_plot.kibot.yaml +++ b/docs/samples/generic_plot.kibot.yaml @@ -109,6 +109,8 @@ outputs: quote_all: false # [string=','] CSV Separator. TXT and TSV always use tab as delimiter separator: ',' + # [string|list(string)] Include this distributors list. Default is all the available + distributors: # [string|list(string)='_kibom_dnc'] Name of the filter to mark components as 'Do Not Change'. # The default filter marks components with a DNC value or DNC in the Config field dnc_filter: '_kibom_dnc' @@ -166,6 +168,8 @@ outputs: # Use it to avoid undesired warnings. # By default the field indicated in `fit_field` and the field `part` are excluded no_conflict: ['Config', 'Part'] + # [string|list(string)] Exclude this distributors list. They are removed after computing `distributors` + no_distributors: # [boolean=false] When normalizing values use the locale decimal point normalize_locale: false # [boolean=false] Try to normalize the R, L and C values, producing uniform units and prefixes @@ -707,8 +711,7 @@ outputs: variant: ' ' # [string|list(string)=USD] Currency priority. Use ISO4217 codes (i.e. USD, EUR) currency: USD - # [string|list(string)] Use only this distributors list. Default is all the available. - # Not compatible with `no_distributors` option + # [string|list(string)] Include this distributors list. Default is all the available distributors: # [string|list(string)=''] Name of the filter to mark components as not fitted. # A short-cut to use for simple cases where a variant is an overkill. @@ -725,8 +728,7 @@ outputs: kicost_variant: '' # [boolean=false] Do not collapse the part references (collapse=R1-R4) no_collapse: false - # [string|list(string)] Use all but this distributors list. Default is use all the available. - # Not compatible with `distributors` option + # [string|list(string)] Exclude this distributors list. They are removed after computing `distributors` no_distributors: # [boolean=false] Do not look for components price. For testing purposes no_price: false diff --git a/kibot/bom/xlsx_writer.py b/kibot/bom/xlsx_writer.py index 878b54ac..4be89c93 100644 --- a/kibot/bom/xlsx_writer.py +++ b/kibot/bom/xlsx_writer.py @@ -17,7 +17,7 @@ from base64 import b64decode from .columnlist import ColumnList from .kibot_logo import KIBOT_LOGO from .. import log -from ..misc import W_NOKICOST +from ..misc import W_NOKICOST, W_UNKDIST from ..__main__ import __version__ try: from xlsxwriter import Workbook @@ -37,6 +37,7 @@ try: sys.path.insert(0, rel_path) from kicost.kicost import query_part_info from kicost.spreadsheet import create_worksheet, Spreadsheet + from kicost.distributors import init_distributor_dict, set_distributors_logger, get_distributors_list import kicost.global_vars as kvar KICOST_SUPPORT = True except ModuleNotFoundError: @@ -319,6 +320,8 @@ def write_info(cfg, r_info_start, worksheet, column_widths, col1, fmt_info, fmt_ class Part(object): def __init__(self): super().__init__() + self.datasheet = None + self.lifecycle = None def adapt_extra_cost_columns(cfg): @@ -361,9 +364,44 @@ def apply_join_requests(join, adapted, original): adapted[key] = val + append +def remove_unknown_distributors(distributors, available, silent): + new_distributors = [] + for d in distributors: + d = d.lower() + if d not in available: + if not silent: + logger.warning(W_UNKDIST+'Unknown distributor `{}`'.format(d)) + else: + new_distributors.append(d) + return new_distributors + + +def solve_distributors(cfg, silent=True): + # List of distributors to scrape + available = get_distributors_list() + include = remove_unknown_distributors(cfg.distributors, available, silent) + exclude = remove_unknown_distributors(cfg.no_distributors, available, silent) + # Default is to sort the entries + Spreadsheet.SORT_DISTRIBUTORS = True + if not include: + # All by default + dist_list = available + else: + # Requested to be included + dist_list = include + # Keep user sorting + Spreadsheet.SORT_DISTRIBUTORS = False + # Requested to be excluded + for d in exclude: + dist_list.remove(d) + Spreadsheet.DISTRIBUTORS = dist_list + return dist_list + + def create_kicost_sheet(workbook, groups, image_data, fmt_title, fmt_info, fmt_subtitle, cfg): if not KICOST_SUPPORT: logger.warning(W_NOKICOST, 'KiCost sheet requested but failed to load KiCost support') + return if cfg.debug_level > 2: logger.debug("Groups exported to KiCost:") for g in groups: @@ -373,6 +411,9 @@ def create_kicost_sheet(workbook, groups, image_data, fmt_title, fmt_info, fmt_s logger.debug(pprint.pformat(c.__dict__)) # Force KiCost to use our logger kvar.logger = logger + set_distributors_logger(logger) + # Start with a clean list of available distributors + init_distributor_dict() # Create the projects information structure prj_info = [{'title': p.name, 'company': p.sch.company, 'date': p.sch.date} for p in cfg.aggregate] # Create the worksheets @@ -437,8 +478,12 @@ def create_kicost_sheet(workbook, groups, image_data, fmt_title, fmt_info, fmt_s parts.append(part) # Process any "join" request apply_join_requests(cfg.join_ce, part.fields, g.fields) + # Distributors + dist_list = solve_distributors(cfg) # Get the prices - query_part_info(parts) + query_part_info(parts, dist_list) + # Distributors again. During `query_part_info` user defined distributors could be added + solve_distributors(cfg, silent=False) # Create a class to hold the spreadsheet parameters ss = Spreadsheet(workbook, ws_names[ws], prj_info) wks = ss.wks diff --git a/kibot/kiplot.py b/kibot/kiplot.py index a52df460..1b88209b 100644 --- a/kibot/kiplot.py +++ b/kibot/kiplot.py @@ -12,6 +12,7 @@ Main KiBot code import os import re from sys import exit +from sys import path as sys_path from shutil import which from subprocess import run, PIPE from glob import glob @@ -46,6 +47,7 @@ def _import(name, path): trace_dump() logger.error('Unable to import plug-ins: '+str(e)) logger.error('Make sure you used `--no-compile` if you used pip for installation') + logger.error('Python path: '+str(sys_path)) exit(WRONG_INSTALL) diff --git a/kibot/misc.py b/kibot/misc.py index 305ae8a1..aba822e2 100644 --- a/kibot/misc.py +++ b/kibot/misc.py @@ -124,7 +124,7 @@ DNC = { "fixed", } # KiCost distributors -DISTRIBUTORS = ['digikey', 'farnell', 'mouser', 'newark', 'rs', 'arrow', 'tme', 'lcsc'] +DISTRIBUTORS = ['arrow', 'digikey', 'farnell', 'lcsc', 'mouser', 'newark', 'rs', 'tme'] DISTRIBUTORS_F = [d+'#' for d in DISTRIBUTORS] # ISO ISO4217 currency codes # Not all, but the ones we get from the European Central Bank (march 2021) diff --git a/kibot/out_bom.py b/kibot/out_bom.py index f410977c..9e36d7d9 100644 --- a/kibot/out_bom.py +++ b/kibot/out_bom.py @@ -299,6 +299,10 @@ class BoMOptions(BaseOptions): """ Generate the `Source BoM` column using the reference ID instead of the project name """ self.int_qtys = True """ Component quantities are always expressed as integers. Using the ceil() function """ + self.distributors = Optionable + """ [string|list(string)] Include this distributors list. Default is all the available """ + self.no_distributors = Optionable + """ [string|list(string)] Exclude this distributors list. They are removed after computing `distributors` """ self._format_example = 'CSV' super().__init__() @@ -455,6 +459,9 @@ class BoMOptions(BaseOptions): # Make sure aggregate is a list if isinstance(self.aggregate, type): self.aggregate = [] + # List of distributors + self.distributors = Optionable.force_list(self.distributors) + self.no_distributors = Optionable.force_list(self.no_distributors) # Columns valid_columns = self._get_columns() (self.columns, self.column_levels, self.column_comments, self.column_rename, diff --git a/kibot/out_kicost.py b/kibot/out_kicost.py index aca5a3fc..aec3531b 100644 --- a/kibot/out_kicost.py +++ b/kibot/out_kicost.py @@ -46,11 +46,9 @@ class KiCostOptions(VariantOptions): self.show_cat_url = False """ Include the catalogue links in the catalogue code """ self.distributors = Optionable - """ [string|list(string)] Use only this distributors list. Default is all the available. - Not compatible with `no_distributors` option """ + """ [string|list(string)] Include this distributors list. Default is all the available """ self.no_distributors = Optionable - """ [string|list(string)] Use all but this distributors list. Default is use all the available. - Not compatible with `distributors` option """ + """ [string|list(string)] Exclude this distributors list. They are removed after computing `distributors` """ self.currency = Optionable """ [string|list(string)=USD] Currency priority. Use ISO4217 codes (i.e. USD, EUR) """ self.group_fields = Optionable @@ -95,8 +93,6 @@ class KiCostOptions(VariantOptions): self.output = '%f.%x' self.distributors = self._validate_dis(self.distributors) self.no_distributors = self._validate_dis(self.no_distributors) - if self.distributors and self.no_distributors: - raise KiPlotConfigurationError('`distributors` and `no_distributors` are incompatible, choose one') self.currency = self._validate_cur(self.currency) self.group_fields = Optionable.force_list(self.group_fields) self.ignore_fields = Optionable.force_list(self.ignore_fields) diff --git a/submodules/KiCost b/submodules/KiCost index 81634342..d9aa22ae 160000 --- a/submodules/KiCost +++ b/submodules/KiCost @@ -1 +1 @@ -Subproject commit 81634342361ba5965a3eeab80f7f945a76faa637 +Subproject commit d9aa22aeb2373f5671467887c89d793b6d453e80 diff --git a/tests/data/kitspace_queries.txt b/tests/data/kitspace_queries.txt index b94b2dbd..d652044a 100644 --- a/tests/data/kitspace_queries.txt +++ b/tests/data/kitspace_queries.txt @@ -3,3 +3,8 @@ query=query+%28%24input%3A+%5BMpnOrSku%5D%21%29%7B+match%28parts%3A+%24input%29+ {"data":{"match":[{"mpn":{"manufacturer":"Bourns","part":"CR0603-JW-102ELF"},"datasheet":"http://datasheet.octopart.com/CR0603-JW-102ELF-Bourns-datasheet-5318152.pdf","description":"Res Thick Film 0603 1K Ohm 5% 1/10W ±200ppm/°C Molded SMD SMD Paper Tape on Plastic Reel","specs":[{"key":"resistance","value":"1.00 kΩ"},{"key":"case_package","value":"0603"},{"key":"resistance_tolerance","value":"±5%"},{"key":"power_rating","value":"100 mW"},{"key":"voltage_rating_dc","value":"50.0 V"},{"key":"pin_count","value":"2"},{"key":"case_package_si","value":"1608"},{"key":"packaging","value":"Cut Tape (CT), Tape & Reel (TR)"},{"key":"size_length","value":"1.60 mm"},{"key":"size_width","value":"787 µm"},{"key":"rohs_status","value":"Compliant"},{"key":"temperature_coefficient","value":"-200 ppm/°C to 200 ppm/°C"},{"key":"reach_svhc_compliance","value":"No SVHC"},{"key":"size_thickness","value":"457 µm"}],"offers":[{"product_url":"https://octopart.com/click/track?ai=8078&sig=069f8cc&sid=2402&ppid=2326672&vpid=11963547&ct=offers","sku":{"vendor":"Newark","part":"02J2284"},"description":null,"moq":1,"in_stock_quantity":1829,"prices":{"GBP":null,"USD":[[1,0.001],[25,0.001],[50,0.001],[100,0.001],[250,0.001],[500,0.001]],"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=01d63fa&sid=2402&ppid=2326672&vpid=89390371&ct=offers","sku":{"vendor":"Newark","part":"84W7242"},"description":null,"moq":25000,"in_stock_quantity":55000,"prices":{"GBP":null,"USD":[[25000,0.001]],"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=0f1ab18&sid=2402&ppid=2326672&vpid=477412565&ct=offers","sku":{"vendor":"Newark","part":"27AC2691"},"description":null,"moq":5000,"in_stock_quantity":110000,"prices":{"GBP":null,"USD":[[5000,0.004]],"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=054b326&sid=11744&ppid=2326672&vpid=237116134&ct=offers","sku":{"vendor":"Farnell","part":"1601276"},"description":null,"moq":1,"in_stock_quantity":1829,"prices":{"GBP":null,"USD":null,"EUR":null}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=027a727&sid=11744&ppid=2326672&vpid=190442976&ct=offers","sku":{"vendor":"Farnell","part":"2333561RL"},"description":null,"moq":150,"in_stock_quantity":0,"prices":{"GBP":[[150,0.0053],[500,0.0043],[1000,0.0042],[2500,0.0041],[5000,0.004],[25000,0.0036]],"USD":null,"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=0fa5342&sid=2401&ppid=2326672&vpid=37838761&ct=offers","sku":{"vendor":"Mouser","part":"652CR0603JW102ELF"},"description":null,"moq":1,"in_stock_quantity":52251,"prices":{"GBP":null,"USD":[[1,0.1],[10,0.008],[50,0.008],[100,0.005],[1000,0.003],[10000,0.002]],"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=08e2426&sid=459&ppid=2326672&vpid=58979868&ct=offers","sku":{"vendor":"Digikey","part":"CR0603-JW-102ELFTR-ND"},"description":null,"moq":5000,"in_stock_quantity":50000,"prices":{"GBP":null,"USD":[[5000,0.00197]],"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=03d9cab&sid=819&ppid=2326672&vpid=138669700&ct=offers","sku":{"vendor":"Farnell","part":"2371772"},"description":null,"moq":5000,"in_stock_quantity":55000,"prices":{"GBP":[[5000,0.004]],"USD":null,"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=098a4a8&sid=459&ppid=2326672&vpid=58963564&ct=offers","sku":{"vendor":"Digikey","part":"CR0603-JW-102ELFCT-ND"},"description":null,"moq":1,"in_stock_quantity":51387,"prices":{"GBP":null,"USD":[[1,0.1],[10,0.015],[100,0.0061],[1000,0.00274],[2500,0.00238]],"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=00343fc&sid=819&ppid=2326672&vpid=138669697&ct=offers","sku":{"vendor":"Farnell","part":"2333561"},"description":null,"moq":10,"in_stock_quantity":18657,"prices":{"GBP":[[10,0.0078],[100,0.0053],[500,0.0043],[1000,0.0042],[2500,0.0041],[5000,0.004],[25000,0.0036]],"USD":null,"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=0eaeff2&sid=459&ppid=2326672&vpid=58963565&ct=offers","sku":{"vendor":"Digikey","part":"CR0603-JW-102ELFDKR-ND"},"description":null,"moq":1,"in_stock_quantity":51387,"prices":{"GBP":null,"USD":[[1,0.1],[10,0.015],[100,0.0061],[1000,0.00274],[2500,0.00238]],"EUR":null}}]},{"mpn":{"manufacturer":"Bourns","part":"CR0603-JW-102ELF"},"datasheet":"http://datasheet.octopart.com/CR0603-JW-102ELF-Bourns-datasheet-5318152.pdf","description":"Res Thick Film 0603 1K Ohm 5% 1/10W ±200ppm/°C Molded SMD SMD Paper Tape on Plastic Reel","specs":[{"key":"resistance","value":"1.00 kΩ"},{"key":"case_package","value":"0603"},{"key":"resistance_tolerance","value":"±5%"},{"key":"power_rating","value":"100 mW"},{"key":"voltage_rating_dc","value":"50.0 V"},{"key":"pin_count","value":"2"},{"key":"case_package_si","value":"1608"},{"key":"packaging","value":"Cut Tape (CT), Tape & Reel (TR)"},{"key":"size_length","value":"1.60 mm"},{"key":"size_width","value":"787 µm"},{"key":"rohs_status","value":"Compliant"},{"key":"temperature_coefficient","value":"-200 ppm/°C to 200 ppm/°C"},{"key":"reach_svhc_compliance","value":"No SVHC"},{"key":"size_thickness","value":"457 µm"}],"offers":[{"product_url":"https://octopart.com/click/track?ai=8078&sig=069f8cc&sid=2402&ppid=2326672&vpid=11963547&ct=offers","sku":{"vendor":"Newark","part":"02J2284"},"description":null,"moq":1,"in_stock_quantity":1829,"prices":{"GBP":null,"USD":[[1,0.001],[25,0.001],[50,0.001],[100,0.001],[250,0.001],[500,0.001]],"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=01d63fa&sid=2402&ppid=2326672&vpid=89390371&ct=offers","sku":{"vendor":"Newark","part":"84W7242"},"description":null,"moq":25000,"in_stock_quantity":55000,"prices":{"GBP":null,"USD":[[25000,0.001]],"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=0f1ab18&sid=2402&ppid=2326672&vpid=477412565&ct=offers","sku":{"vendor":"Newark","part":"27AC2691"},"description":null,"moq":5000,"in_stock_quantity":110000,"prices":{"GBP":null,"USD":[[5000,0.004]],"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=054b326&sid=11744&ppid=2326672&vpid=237116134&ct=offers","sku":{"vendor":"Farnell","part":"1601276"},"description":null,"moq":1,"in_stock_quantity":1829,"prices":{"GBP":null,"USD":null,"EUR":null}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=027a727&sid=11744&ppid=2326672&vpid=190442976&ct=offers","sku":{"vendor":"Farnell","part":"2333561RL"},"description":null,"moq":150,"in_stock_quantity":0,"prices":{"GBP":[[150,0.0053],[500,0.0043],[1000,0.0042],[2500,0.0041],[5000,0.004],[25000,0.0036]],"USD":null,"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=0fa5342&sid=2401&ppid=2326672&vpid=37838761&ct=offers","sku":{"vendor":"Mouser","part":"652CR0603JW102ELF"},"description":null,"moq":1,"in_stock_quantity":52251,"prices":{"GBP":null,"USD":[[1,0.1],[10,0.008],[50,0.008],[100,0.005],[1000,0.003],[10000,0.002]],"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=08e2426&sid=459&ppid=2326672&vpid=58979868&ct=offers","sku":{"vendor":"Digikey","part":"CR0603-JW-102ELFTR-ND"},"description":null,"moq":5000,"in_stock_quantity":50000,"prices":{"GBP":null,"USD":[[5000,0.00197]],"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=03d9cab&sid=819&ppid=2326672&vpid=138669700&ct=offers","sku":{"vendor":"Farnell","part":"2371772"},"description":null,"moq":5000,"in_stock_quantity":55000,"prices":{"GBP":[[5000,0.004]],"USD":null,"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=098a4a8&sid=459&ppid=2326672&vpid=58963564&ct=offers","sku":{"vendor":"Digikey","part":"CR0603-JW-102ELFCT-ND"},"description":null,"moq":1,"in_stock_quantity":51387,"prices":{"GBP":null,"USD":[[1,0.1],[10,0.015],[100,0.0061],[1000,0.00274],[2500,0.00238]],"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=00343fc&sid=819&ppid=2326672&vpid=138669697&ct=offers","sku":{"vendor":"Farnell","part":"2333561"},"description":null,"moq":10,"in_stock_quantity":18657,"prices":{"GBP":[[10,0.0078],[100,0.0053],[500,0.0043],[1000,0.0042],[2500,0.0041],[5000,0.004],[25000,0.0036]],"USD":null,"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=0eaeff2&sid=459&ppid=2326672&vpid=58963565&ct=offers","sku":{"vendor":"Digikey","part":"CR0603-JW-102ELFDKR-ND"},"description":null,"moq":1,"in_stock_quantity":51387,"prices":{"GBP":null,"USD":[[1,0.1],[10,0.015],[100,0.0061],[1000,0.00274],[2500,0.00238]],"EUR":null}}]}]}} query=query+%28%24input%3A+%5BMpnOrSku%5D%21%29%7B+match%28parts%3A+%24input%29+%7Bmpn%7Bmanufacturer%2Cpart%7D%2Cdatasheet%2Cdescription%2Cspecs%7Bkey%2Cvalue%7D%2Coffers%28from%3A%5B%22Arrow+Electronics%2C+Inc.%22%2C%22Digikey%22%2C%22Farnell%22%2C%22LCSC%22%2C%22Mouser%22%2C%22Newark%22%2C%22RS%22%2C%22TME%22%5D%29%7Bproduct_url%2Csku%7Bvendor%2Cpart%7D%2Cdescription%2Cmoq%2Cin_stock_quantity%2Cprices%7BGBP%2CEUR%2CUSD%7D%7D%7D+%7D&variables=%7B%22input%22%3A%5B%7B%22sku%22%3A%7B%22vendor%22%3A%22Digikey%22%2C%22part%22%3A%221276-1131-1-ND%22%7D%7D%2C%7B%22mpn%22%3A%7B%22manufacturer%22%3A%22Samsung%22%2C%22part%22%3A%22CL10B102KC8NNNC%22%7D%7D%5D%7D {"data":{"match":[{"mpn":{"manufacturer":"Samsung","part":"CL10B102KC8NNNC"},"datasheet":"http://datasheet.octopart.com/CL10B102KC8NNNC-Samsung-Electro-Mechanics-datasheet-8324245.pdf","description":"CL10 Series 1 nF 100 V ±10% Tolerance X7R SMT Multilayer Ceramic Capacitor","specs":[{"key":"capacitance","value":"1.00 nF"},{"key":"case_package","value":"0603"},{"key":"dielectric_characteristic","value":"X7R"},{"key":"capacitance_tolerance","value":"±10%"},{"key":"voltage_rating_dc","value":"100 V"},{"key":"lead_free_status","value":"Lead Free"},{"key":"rohs_status","value":"Compliant"},{"key":"operating_temperature","value":"-55.0 °C (min)"},{"key":"mounting_style","value":"Surface Mount"}],"offers":[{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=0e1d8c7&sid=10022&ppid=19831549&vpid=562866040&ct=offers","sku":{"vendor":"RS","part":"7665480"},"description":null,"moq":4000,"in_stock_quantity":0,"prices":{"GBP":[[4000,0.006],[12000,0.005],[20000,0.005],[40000,0.005],[100000,0.005]],"USD":null,"EUR":null}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=07d17a9&sid=819&ppid=19831549&vpid=541437280&ct=offers","sku":{"vendor":"Farnell","part":"3013404RL"},"description":null,"moq":150,"in_stock_quantity":0,"prices":{"GBP":[[150,0.0146],[500,0.0101],[1000,0.0083],[2000,0.0081]],"USD":null,"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=038b2f9&sid=1532&ppid=19831549&vpid=88730969&ct=offers","sku":{"vendor":"TME","part":"CL10B102KC8NNNC"},"description":null,"moq":100,"in_stock_quantity":5789,"prices":{"GBP":null,"USD":null,"EUR":[[100,0.01914],[300,0.01166],[1000,0.00806],[4000,0.00514],[12000,0.00473]]}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=018a3ab&sid=2402&ppid=19831549&vpid=511545477&ct=offers","sku":{"vendor":"Newark","part":"82AC9311"},"description":null,"moq":1,"in_stock_quantity":19600,"prices":{"GBP":null,"USD":[[1,0.125],[25,0.04],[50,0.021],[100,0.018],[250,0.015],[500,0.013]],"EUR":null}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=0af2162&sid=459&ppid=19831549&vpid=72523806&ct=offers","sku":{"vendor":"Digikey","part":"1276-1131-1-ND"},"description":null,"moq":1,"in_stock_quantity":0,"prices":{"GBP":null,"USD":[[1,0.1],[10,0.037],[50,0.0204],[100,0.0166],[500,0.01188],[1000,0.00933]],"EUR":null}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=0ea84ba&sid=2402&ppid=19831549&vpid=511545480&ct=offers","sku":{"vendor":"Newark","part":"82AC9312"},"description":null,"moq":40000,"in_stock_quantity":0,"prices":{"GBP":null,"USD":[[40000,0.006]],"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=0721c6c&sid=11744&ppid=19831549&vpid=541618859&ct=offers","sku":{"vendor":"Farnell","part":"3013404"},"description":null,"moq":10,"in_stock_quantity":3860,"prices":{"GBP":[[10,0.0173],[100,0.0146],[500,0.0101],[1000,0.0083],[2000,0.0081]],"USD":null,"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=08fda4e&sid=27971&ppid=19831549&vpid=478449034&ct=offers","sku":{"vendor":"LCSC","part":"C153291"},"description":null,"moq":50,"in_stock_quantity":542250,"prices":{"GBP":[[50,0.0035],[500,0.0027],[1500,0.0026],[5000,0.0024],[25000,0.0024],[50000,0.0023]],"USD":[[50,0.0049],[500,0.0038],[1500,0.0036],[5000,0.0034],[25000,0.0033],[50000,0.0032]],"EUR":[[50,0.0041],[500,0.0032],[1500,0.003],[5000,0.0029],[25000,0.0028],[50000,0.0027]]}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=06cb956&sid=459&ppid=19831549&vpid=72523805&ct=offers","sku":{"vendor":"Digikey","part":"1276-1131-2-ND"},"description":null,"moq":4000,"in_stock_quantity":0,"prices":{"GBP":null,"USD":[[4000,0.0078]],"EUR":null}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=034b810&sid=11744&ppid=19831549&vpid=532416073&ct=offers","sku":{"vendor":"Farnell","part":"3010078"},"description":null,"moq":4000,"in_stock_quantity":0,"prices":{"GBP":[[4000,0.0067],[20000,0.0048]],"USD":null,"EUR":null}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=0c8c974&sid=459&ppid=19831549&vpid=72523807&ct=offers","sku":{"vendor":"Digikey","part":"1276-1131-6-ND"},"description":null,"moq":1,"in_stock_quantity":0,"prices":{"GBP":null,"USD":[[1,0.1],[10,0.037],[50,0.0204],[100,0.0166],[500,0.01188],[1000,0.00933]],"EUR":null}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=015578c&sid=2401&ppid=19831549&vpid=658751317&ct=offers","sku":{"vendor":"Mouser","part":"187CL10B102KC8NNNC"},"description":null,"moq":1,"in_stock_quantity":0,"prices":{"GBP":null,"USD":[[1,0.11],[10,0.025],[50,0.025],[100,0.018],[1000,0.01],[10000,0.007]],"EUR":null}}]},{"mpn":{"manufacturer":"Samsung","part":"CL10B102KC8NNNC"},"datasheet":"http://datasheet.octopart.com/CL10B102KC8NNNC-Samsung-Electro-Mechanics-datasheet-8324245.pdf","description":"CL10 Series 1 nF 100 V ±10% Tolerance X7R SMT Multilayer Ceramic Capacitor","specs":[{"key":"capacitance","value":"1.00 nF"},{"key":"case_package","value":"0603"},{"key":"dielectric_characteristic","value":"X7R"},{"key":"capacitance_tolerance","value":"±10%"},{"key":"voltage_rating_dc","value":"100 V"},{"key":"lead_free_status","value":"Lead Free"},{"key":"rohs_status","value":"Compliant"},{"key":"operating_temperature","value":"-55.0 °C (min)"},{"key":"mounting_style","value":"Surface Mount"}],"offers":[{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=0e1d8c7&sid=10022&ppid=19831549&vpid=562866040&ct=offers","sku":{"vendor":"RS","part":"7665480"},"description":null,"moq":4000,"in_stock_quantity":0,"prices":{"GBP":[[4000,0.006],[12000,0.005],[20000,0.005],[40000,0.005],[100000,0.005]],"USD":null,"EUR":null}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=07d17a9&sid=819&ppid=19831549&vpid=541437280&ct=offers","sku":{"vendor":"Farnell","part":"3013404RL"},"description":null,"moq":150,"in_stock_quantity":0,"prices":{"GBP":[[150,0.0146],[500,0.0101],[1000,0.0083],[2000,0.0081]],"USD":null,"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=038b2f9&sid=1532&ppid=19831549&vpid=88730969&ct=offers","sku":{"vendor":"TME","part":"CL10B102KC8NNNC"},"description":null,"moq":100,"in_stock_quantity":5789,"prices":{"GBP":null,"USD":null,"EUR":[[100,0.01914],[300,0.01166],[1000,0.00806],[4000,0.00514],[12000,0.00473]]}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=018a3ab&sid=2402&ppid=19831549&vpid=511545477&ct=offers","sku":{"vendor":"Newark","part":"82AC9311"},"description":null,"moq":1,"in_stock_quantity":19600,"prices":{"GBP":null,"USD":[[1,0.125],[25,0.04],[50,0.021],[100,0.018],[250,0.015],[500,0.013]],"EUR":null}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=0af2162&sid=459&ppid=19831549&vpid=72523806&ct=offers","sku":{"vendor":"Digikey","part":"1276-1131-1-ND"},"description":null,"moq":1,"in_stock_quantity":0,"prices":{"GBP":null,"USD":[[1,0.1],[10,0.037],[50,0.0204],[100,0.0166],[500,0.01188],[1000,0.00933]],"EUR":null}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=0ea84ba&sid=2402&ppid=19831549&vpid=511545480&ct=offers","sku":{"vendor":"Newark","part":"82AC9312"},"description":null,"moq":40000,"in_stock_quantity":0,"prices":{"GBP":null,"USD":[[40000,0.006]],"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=0721c6c&sid=11744&ppid=19831549&vpid=541618859&ct=offers","sku":{"vendor":"Farnell","part":"3013404"},"description":null,"moq":10,"in_stock_quantity":3860,"prices":{"GBP":[[10,0.0173],[100,0.0146],[500,0.0101],[1000,0.0083],[2000,0.0081]],"USD":null,"EUR":null}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=08fda4e&sid=27971&ppid=19831549&vpid=478449034&ct=offers","sku":{"vendor":"LCSC","part":"C153291"},"description":null,"moq":50,"in_stock_quantity":542250,"prices":{"GBP":[[50,0.0035],[500,0.0027],[1500,0.0026],[5000,0.0024],[25000,0.0024],[50000,0.0023]],"USD":[[50,0.0049],[500,0.0038],[1500,0.0036],[5000,0.0034],[25000,0.0033],[50000,0.0032]],"EUR":[[50,0.0041],[500,0.0032],[1500,0.003],[5000,0.0029],[25000,0.0028],[50000,0.0027]]}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=06cb956&sid=459&ppid=19831549&vpid=72523805&ct=offers","sku":{"vendor":"Digikey","part":"1276-1131-2-ND"},"description":null,"moq":4000,"in_stock_quantity":0,"prices":{"GBP":null,"USD":[[4000,0.0078]],"EUR":null}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=034b810&sid=11744&ppid=19831549&vpid=532416073&ct=offers","sku":{"vendor":"Farnell","part":"3010078"},"description":null,"moq":4000,"in_stock_quantity":0,"prices":{"GBP":[[4000,0.0067],[20000,0.0048]],"USD":null,"EUR":null}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=0c8c974&sid=459&ppid=19831549&vpid=72523807&ct=offers","sku":{"vendor":"Digikey","part":"1276-1131-6-ND"},"description":null,"moq":1,"in_stock_quantity":0,"prices":{"GBP":null,"USD":[[1,0.1],[10,0.037],[50,0.0204],[100,0.0166],[500,0.01188],[1000,0.00933]],"EUR":null}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=015578c&sid=2401&ppid=19831549&vpid=658751317&ct=offers","sku":{"vendor":"Mouser","part":"187CL10B102KC8NNNC"},"description":null,"moq":1,"in_stock_quantity":0,"prices":{"GBP":null,"USD":[[1,0.11],[10,0.025],[50,0.025],[100,0.018],[1000,0.01],[10000,0.007]],"EUR":null}}]}]}} +# kibom-variant_2c, Mouser and Digi-Key only +query=query+%28%24input%3A+%5BMpnOrSku%5D%21%29%7B+match%28parts%3A+%24input%29+%7Bmpn%7Bmanufacturer%2Cpart%7D%2Cdatasheet%2Cdescription%2Cspecs%7Bkey%2Cvalue%7D%2Coffers%28from%3A%5B%22Digikey%22%2C%22Mouser%22%5D%29%7Bproduct_url%2Csku%7Bvendor%2Cpart%7D%2Cdescription%2Cmoq%2Cin_stock_quantity%2Cprices%7BGBP%2CEUR%2CUSD%7D%7D%7D+%7D&variables=%7B%22input%22%3A%5B%7B%22sku%22%3A%7B%22vendor%22%3A%22Digikey%22%2C%22part%22%3A%22CR0603-JW-102ELFCT-ND%22%7D%7D%2C%7B%22mpn%22%3A%7B%22manufacturer%22%3A%22Bourns%22%2C%22part%22%3A%22CR0603-JW-102ELF%22%7D%7D%5D%7D +{"data":{"match":[{"mpn":{"manufacturer":"Bourns","part":"CR0603-JW-102ELF"},"datasheet":"http://datasheet.octopart.com/CR0603-JW-102ELF-Bourns-datasheet-5318152.pdf","description":"Res Thick Film 0603 1K Ohm 5% 1/10W ±200ppm/°C Molded SMD SMD Paper Tape on Plastic Reel","specs":[{"key":"resistance","value":"1.00 kΩ"},{"key":"case_package","value":"0603"},{"key":"resistance_tolerance","value":"±5%"},{"key":"power_rating","value":"100 mW"},{"key":"voltage_rating_dc","value":"50.0 V"},{"key":"pin_count","value":"2"},{"key":"case_package_si","value":"1608"},{"key":"packaging","value":"Cut Tape (CT), Tape & Reel (TR)"},{"key":"size_length","value":"1.60 mm"},{"key":"size_width","value":"787 µm"},{"key":"rohs_status","value":"Compliant"},{"key":"temperature_coefficient","value":"-200 ppm/°C to 200 ppm/°C"},{"key":"reach_svhc_compliance","value":"No SVHC"},{"key":"size_thickness","value":"457 µm"}],"offers":[{"product_url":"https://octopart.com/click/track?ai=8078&sig=08e2426&sid=459&ppid=2326672&vpid=58979868&ct=offers","sku":{"vendor":"Digikey","part":"CR0603-JW-102ELFTR-ND"},"description":null,"moq":5000,"in_stock_quantity":35000,"prices":{"GBP":null,"EUR":null,"USD":[[5000,0.00197]]}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=0fa5342&sid=2401&ppid=2326672&vpid=37838761&ct=offers","sku":{"vendor":"Mouser","part":"652CR0603JW102ELF"},"description":null,"moq":1,"in_stock_quantity":110042,"prices":{"GBP":null,"EUR":null,"USD":[[1,0.1],[10,0.008],[50,0.008],[100,0.005],[1000,0.003],[10000,0.002]]}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=0eaeff2&sid=459&ppid=2326672&vpid=58963565&ct=offers","sku":{"vendor":"Digikey","part":"CR0603-JW-102ELFDKR-ND"},"description":null,"moq":1,"in_stock_quantity":38625,"prices":{"GBP":null,"EUR":null,"USD":[[1,0.1],[10,0.015],[100,0.0061],[1000,0.00274],[2500,0.00238]]}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=098a4a8&sid=459&ppid=2326672&vpid=58963564&ct=offers","sku":{"vendor":"Digikey","part":"CR0603-JW-102ELFCT-ND"},"description":null,"moq":1,"in_stock_quantity":38625,"prices":{"GBP":null,"EUR":null,"USD":[[1,0.1],[10,0.015],[100,0.0061],[1000,0.00274],[2500,0.00238]]}}]},{"mpn":{"manufacturer":"Bourns","part":"CR0603-JW-102ELF"},"datasheet":"http://datasheet.octopart.com/CR0603-JW-102ELF-Bourns-datasheet-5318152.pdf","description":"Res Thick Film 0603 1K Ohm 5% 1/10W ±200ppm/°C Molded SMD SMD Paper Tape on Plastic Reel","specs":[{"key":"resistance","value":"1.00 kΩ"},{"key":"case_package","value":"0603"},{"key":"resistance_tolerance","value":"±5%"},{"key":"power_rating","value":"100 mW"},{"key":"voltage_rating_dc","value":"50.0 V"},{"key":"pin_count","value":"2"},{"key":"case_package_si","value":"1608"},{"key":"packaging","value":"Cut Tape (CT), Tape & Reel (TR)"},{"key":"size_length","value":"1.60 mm"},{"key":"size_width","value":"787 µm"},{"key":"rohs_status","value":"Compliant"},{"key":"temperature_coefficient","value":"-200 ppm/°C to 200 ppm/°C"},{"key":"reach_svhc_compliance","value":"No SVHC"},{"key":"size_thickness","value":"457 µm"}],"offers":[{"product_url":"https://octopart.com/click/track?ai=8078&sig=08e2426&sid=459&ppid=2326672&vpid=58979868&ct=offers","sku":{"vendor":"Digikey","part":"CR0603-JW-102ELFTR-ND"},"description":null,"moq":5000,"in_stock_quantity":35000,"prices":{"GBP":null,"EUR":null,"USD":[[5000,0.00197]]}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=0fa5342&sid=2401&ppid=2326672&vpid=37838761&ct=offers","sku":{"vendor":"Mouser","part":"652CR0603JW102ELF"},"description":null,"moq":1,"in_stock_quantity":110042,"prices":{"GBP":null,"EUR":null,"USD":[[1,0.1],[10,0.008],[50,0.008],[100,0.005],[1000,0.003],[10000,0.002]]}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=0eaeff2&sid=459&ppid=2326672&vpid=58963565&ct=offers","sku":{"vendor":"Digikey","part":"CR0603-JW-102ELFDKR-ND"},"description":null,"moq":1,"in_stock_quantity":38625,"prices":{"GBP":null,"EUR":null,"USD":[[1,0.1],[10,0.015],[100,0.0061],[1000,0.00274],[2500,0.00238]]}},{"product_url":"https://octopart.com/click/track?ai=8078&sig=098a4a8&sid=459&ppid=2326672&vpid=58963564&ct=offers","sku":{"vendor":"Digikey","part":"CR0603-JW-102ELFCT-ND"},"description":null,"moq":1,"in_stock_quantity":38625,"prices":{"GBP":null,"EUR":null,"USD":[[1,0.1],[10,0.015],[100,0.0061],[1000,0.00274],[2500,0.00238]]}}]}]}} +query=query+%28%24input%3A+%5BMpnOrSku%5D%21%29%7B+match%28parts%3A+%24input%29+%7Bmpn%7Bmanufacturer%2Cpart%7D%2Cdatasheet%2Cdescription%2Cspecs%7Bkey%2Cvalue%7D%2Coffers%28from%3A%5B%22Digikey%22%2C%22Mouser%22%5D%29%7Bproduct_url%2Csku%7Bvendor%2Cpart%7D%2Cdescription%2Cmoq%2Cin_stock_quantity%2Cprices%7BGBP%2CEUR%2CUSD%7D%7D%7D+%7D&variables=%7B%22input%22%3A%5B%7B%22sku%22%3A%7B%22vendor%22%3A%22Digikey%22%2C%22part%22%3A%221276-1131-1-ND%22%7D%7D%2C%7B%22mpn%22%3A%7B%22manufacturer%22%3A%22Samsung%22%2C%22part%22%3A%22CL10B102KC8NNNC%22%7D%7D%5D%7D +{"data":{"match":[{"mpn":{"manufacturer":"Samsung","part":"CL10B102KC8NNNC"},"datasheet":"http://datasheet.octopart.com/CL10B102KC8NNNC-Samsung-Electro-Mechanics-datasheet-8324245.pdf","description":"CL10 Series 1 nF 100 V ±10% Tolerance X7R SMT Multilayer Ceramic Capacitor","specs":[{"key":"capacitance","value":"1.00 nF"},{"key":"case_package","value":"0603"},{"key":"dielectric_characteristic","value":"X7R"},{"key":"capacitance_tolerance","value":"±10%"},{"key":"voltage_rating_dc","value":"100 V"},{"key":"lead_free_status","value":"Lead Free"},{"key":"rohs_status","value":"Compliant"},{"key":"operating_temperature","value":"-55.0 °C (min)"},{"key":"mounting_style","value":"Surface Mount"}],"offers":[{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=0af2162&sid=459&ppid=19831549&vpid=72523806&ct=offers","sku":{"vendor":"Digikey","part":"1276-1131-1-ND"},"description":null,"moq":1,"in_stock_quantity":0,"prices":{"GBP":null,"EUR":null,"USD":[[1,0.1],[10,0.037],[50,0.0204],[100,0.0166],[500,0.01188],[1000,0.00933]]}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=06cb956&sid=459&ppid=19831549&vpid=72523805&ct=offers","sku":{"vendor":"Digikey","part":"1276-1131-2-ND"},"description":null,"moq":4000,"in_stock_quantity":0,"prices":{"GBP":null,"EUR":null,"USD":[[4000,0.0078]]}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=0c8c974&sid=459&ppid=19831549&vpid=72523807&ct=offers","sku":{"vendor":"Digikey","part":"1276-1131-6-ND"},"description":null,"moq":1,"in_stock_quantity":0,"prices":{"GBP":null,"EUR":null,"USD":[[1,0.1],[10,0.037],[50,0.0204],[100,0.0166],[500,0.01188],[1000,0.00933]]}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=015578c&sid=2401&ppid=19831549&vpid=658751317&ct=offers","sku":{"vendor":"Mouser","part":"187CL10B102KC8NNNC"},"description":null,"moq":1,"in_stock_quantity":0,"prices":{"GBP":null,"EUR":null,"USD":[[1,0.11],[10,0.025],[50,0.025],[100,0.018],[1000,0.01],[10000,0.007]]}}]},{"mpn":{"manufacturer":"Samsung","part":"CL10B102KC8NNNC"},"datasheet":"http://datasheet.octopart.com/CL10B102KC8NNNC-Samsung-Electro-Mechanics-datasheet-8324245.pdf","description":"CL10 Series 1 nF 100 V ±10% Tolerance X7R SMT Multilayer Ceramic Capacitor","specs":[{"key":"capacitance","value":"1.00 nF"},{"key":"case_package","value":"0603"},{"key":"dielectric_characteristic","value":"X7R"},{"key":"capacitance_tolerance","value":"±10%"},{"key":"voltage_rating_dc","value":"100 V"},{"key":"lead_free_status","value":"Lead Free"},{"key":"rohs_status","value":"Compliant"},{"key":"operating_temperature","value":"-55.0 °C (min)"},{"key":"mounting_style","value":"Surface Mount"}],"offers":[{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=0af2162&sid=459&ppid=19831549&vpid=72523806&ct=offers","sku":{"vendor":"Digikey","part":"1276-1131-1-ND"},"description":null,"moq":1,"in_stock_quantity":0,"prices":{"GBP":null,"EUR":null,"USD":[[1,0.1],[10,0.037],[50,0.0204],[100,0.0166],[500,0.01188],[1000,0.00933]]}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=06cb956&sid=459&ppid=19831549&vpid=72523805&ct=offers","sku":{"vendor":"Digikey","part":"1276-1131-2-ND"},"description":null,"moq":4000,"in_stock_quantity":0,"prices":{"GBP":null,"EUR":null,"USD":[[4000,0.0078]]}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=0c8c974&sid=459&ppid=19831549&vpid=72523807&ct=offers","sku":{"vendor":"Digikey","part":"1276-1131-6-ND"},"description":null,"moq":1,"in_stock_quantity":0,"prices":{"GBP":null,"EUR":null,"USD":[[1,0.1],[10,0.037],[50,0.0204],[100,0.0166],[500,0.01188],[1000,0.00933]]}},{"product_url":"https://octopart.com/click/track?c=1&ai=8078&sig=015578c&sid=2401&ppid=19831549&vpid=658751317&ct=offers","sku":{"vendor":"Mouser","part":"187CL10B102KC8NNNC"},"description":null,"moq":1,"in_stock_quantity":0,"prices":{"GBP":null,"EUR":null,"USD":[[1,0.11],[10,0.025],[50,0.025],[100,0.018],[1000,0.01],[10000,0.007]]}}]}]}} diff --git a/tests/reference/5_1_6/KiCost/kibom-variant_2c-bom_dk_mou.csv b/tests/reference/5_1_6/KiCost/kibom-variant_2c-bom_dk_mou.csv new file mode 100644 index 00000000..e9674b50 --- /dev/null +++ b/tests/reference/5_1_6/KiCost/kibom-variant_2c-bom_dk_mou.csv @@ -0,0 +1,14 @@ +,,,,KiBot Bill of Materials,,,,,,,,,,,,,,,, +,,,,Schematic:,kibom-variant_2c,,,,Board Qty:,50,,,,,,,,,, +,,,,Variant:,default,,,,Unit Cost:,0,,,,,,,,,, +,,,,Revision:,A,,,,Total Cost:,0,,,,0,0,,,,0,0 +,,,,Date:,2021-04-06,,,,,,,,,,,,,,, +,,,,KiCad Version:,,,,,,,,,,,,,,,, + +Global Part Info,,,,,,,,,,,Mouser,,,,,Digi-Key,,,, +References,Value,Real value,Tolerancia,Voltage,Footprint,Manufacturer,Manufacturer P/N,Build Quantity,Unit$,Ext$,Avail,Purch,Unit$,Ext$,Cat#,Avail,Purch,Unit$,Ext$,Cat# +R1 R2,1k,1000,1%,,,Bourns,CR0603-JW-102ELF,100,0,0,110042,,0,0,652CR0603JW102ELF,38625,,0,0,CR0603-JW-102ELFCT-ND + +,,,,,,,,,Total Purchase:,0,Buy here,0,,0,,Buy here,0,,0, +Created:,,,,,,,,,Purchase description:,,,0,,,,,0,,, +KiCost,,,,,,,,,,,,,,,,,,,, diff --git a/tests/reference/5_1_6/KiCost/kibom-variant_2c-bom_dk_mou_dnf.csv b/tests/reference/5_1_6/KiCost/kibom-variant_2c-bom_dk_mou_dnf.csv new file mode 100644 index 00000000..116b60a6 --- /dev/null +++ b/tests/reference/5_1_6/KiCost/kibom-variant_2c-bom_dk_mou_dnf.csv @@ -0,0 +1,14 @@ +,,,,KiBot Bill of Materials,,,,,,,,,,,,,,,, +,,,,Schematic:,kibom-variant_2c,,,,Board Qty:,50,,,,,,,,,, +,,,,Variant:,default,,,,Unit Cost:,0,,,,,,,,,, +,,,,Revision:,A,,,,Total Cost:,0,,,,0,0,,,,0,0 +,,,,Date:,2021-04-06,,,,,,,,,,,,,,, +,,,,KiCad Version:,,,,,,,,,,,,,,,, + +Global Part Info,,,,,,,,,,,Mouser,,,,,Digi-Key,,,, +References,Value,Real value,Tolerancia,Voltage,Footprint,Manufacturer,Manufacturer P/N,Build Quantity,Unit$,Ext$,Avail,Purch,Unit$,Ext$,Cat#,Avail,Purch,Unit$,Ext$,Cat# +C1 C2,1nF, 1000pF,20%,50 V 100 V,,Samsung,CL10B102KC8NNNC,100,0,0,NonStk,,0,0,187CL10B102KC8NNNC,NonStk,,0,0,1276-1131-1-ND + +,,,,,,,,,Total Purchase:,0,Buy here,0,,0,,Buy here,0,,0, +Created:,,,,,,,,,Purchase description:,,,0,,,,,0,,, +KiCost,,,,,,,,,,,,,,,,,,,, diff --git a/tests/test_plot/test_kicost.py b/tests/test_plot/test_kicost.py index 7dd263ca..f94a9f20 100644 --- a/tests/test_plot/test_kicost.py +++ b/tests/test_plot/test_kicost.py @@ -75,3 +75,17 @@ def test_kicost_bom_simple(test_dir): convert2csv(ctx.get_out_path(output), sheet='Costs (DNF)') ctx.compare_txt(csv, output[:-5]+'_dnf.csv') ctx.clean_up() + + +def test_kicost_bom_sel_dist_1(test_dir): + prj = 'kibom-variant_2c' + ctx = context.TestContextSCH(test_dir, 'test_kicost_bom_sel_dist_1', prj, 'int_bom_kicost_sel_dist_1_xlsx', OUT_DIR) + ctx.run(kicost=True) # , extra_debug=True + output = op.join(OUT_DIR, prj+'-bom.xlsx') + ctx.expect_out_file(output) + convert2csv(ctx.get_out_path(output), sheet='Costs') + csv = output[:-4]+'csv' + ctx.compare_txt(csv, output[:-5]+'_dk_mou.csv') + convert2csv(ctx.get_out_path(output), sheet='Costs (DNF)') + ctx.compare_txt(csv, output[:-5]+'_dk_mou_dnf.csv') + ctx.clean_up() diff --git a/tests/yaml_samples/int_bom_kicost_sel_dist_1_xlsx.kibot.yaml b/tests/yaml_samples/int_bom_kicost_sel_dist_1_xlsx.kibot.yaml new file mode 100644 index 00000000..bd2a0202 --- /dev/null +++ b/tests/yaml_samples/int_bom_kicost_sel_dist_1_xlsx.kibot.yaml @@ -0,0 +1,40 @@ +# Example KiBot config file +kibot: + version: 1 + +outputs: + - name: 'bom_internal' + comment: "Bill of Materials in HTML format" + type: bom + dir: KiCost + options: + use_alt: true + number: 50 + columns: + - References + - Part + - Value + - Quantity Per PCB + - field: manf + name: Manufacturer + - field: manf# + name: Manufacturer P/N + - field: digikey# + level: 1 + comment: 'Code used to buy the part at Digi-Key' + cost_extra_columns: + - field: 'Resistance' + name: 'Real value' + comment: 'Verdadero valor' + join: 'Capacitance' + level: 1 + - field: 'Tolerance' + name: Tolerancia + comment: 'La tolerancia' + level: 1 + - 'Voltage' + distributors: + - Mouser + - digikey + xlsx: + kicost: true