Fixed problems with KiCost using internal variants
- The XML didn't remove `variant` field properly (lack of lower) - THe XML didn't support UTF-8
This commit is contained in:
parent
054a090258
commit
23e632303d
|
|
@ -5,9 +5,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
### Added
|
||||||
- New outputs:
|
- New outputs:
|
||||||
- KiCad netlist generation
|
- KiCad netlist generation
|
||||||
- IPC-D-356 netlist generation
|
- IPC-D-356 netlist generation (#197)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- KiCost+Internal variants: UTF-8 problems
|
||||||
|
- KiCost+Internal variants: problem with `variant` field capitalization
|
||||||
|
|
||||||
## [1.0.0] - 2022-05-10
|
## [1.0.0] - 2022-05-10
|
||||||
### Added
|
### Added
|
||||||
|
|
|
||||||
|
|
@ -1907,7 +1907,7 @@ class Schematic(object):
|
||||||
if user_fields:
|
if user_fields:
|
||||||
fields = SubElement(comp, 'fields')
|
fields = SubElement(comp, 'fields')
|
||||||
for fname, fvalue in user_fields:
|
for fname, fvalue in user_fields:
|
||||||
if fname in no_field:
|
if fname.lower() in no_field:
|
||||||
continue
|
continue
|
||||||
fld = SubElement(fields, 'field')
|
fld = SubElement(fields, 'field')
|
||||||
fld.set('name', fname)
|
fld.set('name', fname)
|
||||||
|
|
@ -2026,5 +2026,5 @@ class Schematic(object):
|
||||||
SubElement(root, 'nets')
|
SubElement(root, 'nets')
|
||||||
# Make it look nice
|
# Make it look nice
|
||||||
rough_string = tostring(root, encoding='utf8')
|
rough_string = tostring(root, encoding='utf8')
|
||||||
reparsed = minidom.parseString(rough_string)
|
reparsed = minidom.parseString(rough_string.decode('utf8'))
|
||||||
fhandle.write(reparsed.toprettyxml(indent=" ", encoding='UTF-8'))
|
fhandle.write(reparsed.toprettyxml(indent=" ", encoding='UTF-8'))
|
||||||
|
|
|
||||||
|
|
@ -152,6 +152,7 @@ class KiCostOptions(VariantOptions):
|
||||||
# Write a custom netlist to a temporal dir
|
# Write a custom netlist to a temporal dir
|
||||||
net_dir = mkdtemp(prefix='tmp-kibot-kicost-')
|
net_dir = mkdtemp(prefix='tmp-kibot-kicost-')
|
||||||
netlist = os.path.join(net_dir, GS.sch_basename+'.xml')
|
netlist = os.path.join(net_dir, GS.sch_basename+'.xml')
|
||||||
|
logger.debug('Creating variant netlist `{}`'.format(netlist))
|
||||||
with open(netlist, 'wb') as f:
|
with open(netlist, 'wb') as f:
|
||||||
GS.sch.save_netlist(f, self._comps, no_field=var_fields)
|
GS.sch.save_netlist(f, self._comps, no_field=var_fields)
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,7 @@ class KiCost(BaseVariant): # noqa: F821
|
||||||
return comps
|
return comps
|
||||||
# Apply to all the components
|
# Apply to all the components
|
||||||
for c in comps:
|
for c in comps:
|
||||||
logger.debug("{} {} {}".format(c.ref, c.fitted, c.included))
|
logger.debug("{} fitted: {} included: {}".format(c.ref, c.fitted, c.included))
|
||||||
if not (c.fitted and c.included):
|
if not (c.fitted and c.included):
|
||||||
# Don't check if we already discarded it
|
# Don't check if we already discarded it
|
||||||
continue
|
continue
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
Prj:,KiBom Test Schematic,,,,Board Qty:,100
|
Prj:,KiBom Test Schematic,,,,Board Qty:,100
|
||||||
Co.:,https://github.com/SchrodingersGat/KiBom,,,,Unit Cost:,0
|
Co.:,https://github.com/SchrodingersGat/KiBom,,,,Unit Cost:,0
|
||||||
Prj date:,mar 30 mar 2021 09:46:24,,,,Total Cost:,0
|
Prj date:,,,,,Total Cost:,0
|
||||||
$ date:,,,,,,
|
$ date:,,,,,,
|
||||||
Global Part Info,,,,,,
|
Global Part Info,,,,,,
|
||||||
Refs,Value,Footprint,Manf#,Qty,Unit$,Ext$
|
Refs,Value,Footprint,Manf#,Qty,Unit$,Ext$
|
||||||
|
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Prj:,KiBom Test Schematic,,,,Board Qty:,100
|
Prj:,KiBom Test Schematic,,,,Board Qty:,100
|
||||||
Co.:,https://github.com/SchrodingersGat/KiBom,,,,Unit Cost:,0
|
Co.:,https://github.com/SchrodingersGat/KiBom,,,,Unit Cost:,0
|
||||||
Prj date:,mar 30 mar 2021 09:46:24,,,,Total Cost:,0
|
Prj date:,,,,,Total Cost:,0
|
||||||
$ date:,,,,,,
|
$ date:,,,,,,
|
||||||
Global Part Info,,,,,,
|
Global Part Info,,,,,,
|
||||||
Refs,Value,Footprint,Manf#,Qty,Unit$,Ext$
|
Refs,Value,Footprint,Manf#,Qty,Unit$,Ext$
|
||||||
|
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Prj:,KiBom Test Schematic,,,,Board Qty:,100
|
Prj:,KiBom Test Schematic,,,,Board Qty:,100
|
||||||
Co.:,https://github.com/SchrodingersGat/KiBom,,,,Unit Cost:,0
|
Co.:,https://github.com/SchrodingersGat/KiBom,,,,Unit Cost:,0
|
||||||
Prj date:,mar 30 mar 2021 09:46:24,,,,Total Cost:,0
|
Prj date:,,,,,Total Cost:,0
|
||||||
$ date:,,,,,,
|
$ date:,,,,,,
|
||||||
Global Part Info,,,,,,
|
Global Part Info,,,,,,
|
||||||
Refs,Value,Footprint,Manf#,Qty,Unit$,Ext$
|
Refs,Value,Footprint,Manf#,Qty,Unit$,Ext$
|
||||||
|
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Prj:,KiBom Test Schematic,,,,Board Qty:,100
|
Prj:,KiBom Test Schematic,,,,Board Qty:,100
|
||||||
Co.:,https://github.com/SchrodingersGat/KiBom,,,,Unit Cost:,0
|
Co.:,https://github.com/SchrodingersGat/KiBom,,,,Unit Cost:,0
|
||||||
Prj date:,mar 30 mar 2021 09:46:24,,,,Total Cost:,0
|
Prj date:,,,,,Total Cost:,0
|
||||||
$ date:,,,,,,
|
$ date:,,,,,,
|
||||||
Global Part Info,,,,,,
|
Global Part Info,,,,,,
|
||||||
Refs,Value,Footprint,Manf#,Qty,Unit$,Ext$
|
Refs,Value,Footprint,Manf#,Qty,Unit$,Ext$
|
||||||
|
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ def convert2csv(xlsx, skip_empty=False, sheet=None):
|
||||||
subprocess.check_output(cmd)
|
subprocess.check_output(cmd)
|
||||||
with open(csv, 'rt') as f:
|
with open(csv, 'rt') as f:
|
||||||
content = f.read()
|
content = f.read()
|
||||||
content = re.sub(r'\$ date:,[^,]+', '$ date:,', content, 1)
|
content = re.sub(r'(\$|Prj) date:,[^,]+', r'\1 date:,', content, 2)
|
||||||
content = re.sub(r'KiCost[^,]+', 'KiCost', content, 1)
|
content = re.sub(r'KiCost[^,]+', 'KiCost', content, 1)
|
||||||
content = re.sub(r'KiCad Version:,[^,]+', 'KiCad Version:,', content)
|
content = re.sub(r'KiCad Version:,[^,]+', 'KiCad Version:,', content)
|
||||||
content = re.sub(r'Created:,[^,]+', 'Created:,', content, 1)
|
content = re.sub(r'Created:,[^,]+', 'Created:,', content, 1)
|
||||||
|
|
@ -64,6 +64,18 @@ def test_kicost_simple(test_dir):
|
||||||
ctx.clean_up()
|
ctx.clean_up()
|
||||||
|
|
||||||
|
|
||||||
|
def test_kicost_int_variant(test_dir):
|
||||||
|
""" External KiCost using internal variants """
|
||||||
|
prj = 'kibom-variant_kicost'
|
||||||
|
ctx = context.TestContextSCH(test_dir, 'test_kicost_int_variant', prj, 'kicost_int_variant', OUT_DIR)
|
||||||
|
ctx.run(extra_debug=True)
|
||||||
|
check_simple(ctx, '')
|
||||||
|
check_simple(ctx, 'default')
|
||||||
|
check_simple(ctx, 'production')
|
||||||
|
check_simple(ctx, 'test')
|
||||||
|
ctx.clean_up()
|
||||||
|
|
||||||
|
|
||||||
def test_kicost_bom_simple(test_dir):
|
def test_kicost_bom_simple(test_dir):
|
||||||
""" Internal BoM + KiCost, very simple case. With DNF sheet. """
|
""" Internal BoM + KiCost, very simple case. With DNF sheet. """
|
||||||
prj = 'kibom-variant_2c'
|
prj = 'kibom-variant_2c'
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
# KiCost basic test
|
||||||
|
kibot:
|
||||||
|
version: 1
|
||||||
|
|
||||||
|
variants:
|
||||||
|
- name: 'production'
|
||||||
|
comment: 'Production variant'
|
||||||
|
type: kicost
|
||||||
|
file_id: '_(production)'
|
||||||
|
variant: production
|
||||||
|
|
||||||
|
- name: 'test'
|
||||||
|
comment: 'Test variant'
|
||||||
|
type: kicost
|
||||||
|
file_id: '_(test)'
|
||||||
|
variant: 't.*'
|
||||||
|
|
||||||
|
- name: 'default'
|
||||||
|
comment: 'Default variant'
|
||||||
|
type: kicost
|
||||||
|
variant: default
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- name: 'Costs'
|
||||||
|
comment: "Components costs spreadsheet"
|
||||||
|
type: kicost
|
||||||
|
dir: KiCost
|
||||||
|
options:
|
||||||
|
output: 'simple'
|
||||||
|
no_price: true
|
||||||
|
no_collapse: true
|
||||||
|
|
||||||
|
- name: 'Costs (default)'
|
||||||
|
comment: "Components costs spreadsheet default variant"
|
||||||
|
type: kicost
|
||||||
|
dir: KiCost
|
||||||
|
options:
|
||||||
|
output: 'simple_default'
|
||||||
|
no_price: true
|
||||||
|
variant: default
|
||||||
|
|
||||||
|
- name: 'Costs (production)'
|
||||||
|
comment: "Components costs spreadsheet production variant"
|
||||||
|
type: kicost
|
||||||
|
dir: KiCost
|
||||||
|
options:
|
||||||
|
output: 'simple_production'
|
||||||
|
no_price: true
|
||||||
|
variant: production
|
||||||
|
|
||||||
|
- name: 'Costs (test)'
|
||||||
|
comment: "Components costs spreadsheet test variant"
|
||||||
|
type: kicost
|
||||||
|
dir: KiCost
|
||||||
|
options:
|
||||||
|
output: 'simple_test'
|
||||||
|
no_price: true
|
||||||
|
variant: test
|
||||||
Loading…
Reference in New Issue