Added support to rename fields matching the variant to value.

This commit is contained in:
Salvador E. Tropea 2020-12-23 12:11:39 -03:00
parent 204ad189de
commit 9f8ecff5d1
7 changed files with 263 additions and 2 deletions

View File

@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- File name patterns: %F is the name of the source file without extension, but
with the path.
- A hint for pip installations without using `--no-compile`.
- KiBoM variants: support to field overwrite according to variant (experimental).
- Support to field overwrite according to variant.
### Fixed
- Now we support missing field names in schematic library entries.

View File

@ -318,6 +318,7 @@ Currently the only type available is `generic`.
- `comment`: [string=''] A comment for documentation purposes.
- `name`: [string=''] Used to identify this particular filter definition.
- `separator`: [string=':'] Separator used between the variant and the field name.
- `variant_to_value`: [boolean=false] Rename fields matching the variant to the value of the component.

View File

@ -27,6 +27,8 @@ class Var_Rename(BaseFilter): # noqa: F821
with document:
self.separator = ':'
""" Separator used between the variant and the field name """
self.variant_to_value = False
""" Rename fields matching the variant to the value of the component """
def config(self):
super().config()
@ -46,5 +48,10 @@ class Var_Rename(BaseFilter): # noqa: F821
f_field = res[1].lower()
if f_variant == variant:
if GS.debug_level > 2:
logger.debug('ref: {} value: {} -> {}'.format(comp.ref, comp.get_field_value(f_field), value))
logger.debug('ref: {} {}: {} -> {}'.
format(comp.ref, f_field, comp.get_field_value(f_field), value))
comp.set_field(f_field, value)
elif self.variant_to_value and name.lower() == variant:
if GS.debug_level > 2:
logger.debug('ref: {} value: {} -> {}'.format(comp.ref, comp.value, value))
comp.set_field('value', value)

View File

@ -821,6 +821,14 @@ class SchematicComponent(object):
return self.dfields[field].value
return ''
def get_free_field_number(self):
""" Looks for a field number that isn't currently in use """
max_num = -1
for f in self.fields:
if f.number > max_num:
max_num = f.number
return max_num+1
def set_field(self, field, value):
""" Change the value for an existing field """
if field in self.dfields:
@ -829,6 +837,12 @@ class SchematicComponent(object):
# Adjust special fields
if target.number < 4:
self._solve_fields(LineReader(None, '**Internal**'))
else:
f = SchematicField()
f.name = field
f.value = value
f.number = self.get_free_field_number()
self.add_field(f)
# def get_field_names(self):
# return [f.name for f in self.fields]

View File

@ -0,0 +1,172 @@
EESchema Schematic File Version 4
EELAYER 30 0
EELAYER END
$Descr A4 11693 8268
encoding utf-8
Sheet 1 1
Title ""
Date ""
Rev ""
Comp ""
Comment1 ""
Comment2 ""
Comment3 ""
Comment4 ""
$EndDescr
$Comp
L Device:R_US R1
U 1 1 5FDD0409
P 4850 3100
F 0 "R1" V 4950 3125 50 0000 C CNN
F 1 "RES-000007-00" H 4850 2650 50 0001 C CNN
F 2 "Resistors:R0402" H 4850 2350 50 0001 C CNN
F 3 "" H 4850 2750 50 0001 C CNN
F 4 "Stackpole Electronics Inc" H 4850 2550 50 0001 C CNN "Manufacturer"
F 5 "RMCF0402FT4K70" H 4850 2450 50 0001 C CNN "Manufacturer Part Number"
F 6 "4.7K" V 4700 3125 50 0000 C CNN "Resistance (Ohms)"
F 7 "±1%" H 5000 3000 50 0001 L CNN "Tolerance (%)"
F 8 "0402" V 4775 3125 50 0000 C CNN "Package Type"
F 9 "1/16W" H 4850 2800 50 0001 C CNN "Power (Watts)"
F 10 "RES-000045-00" H 4850 3100 50 0001 C CNN "DEV:Value"
F 11 "Yageo" H 4850 3100 50 0001 C CNN "DEV:Manufacturer"
F 12 "RC0402FR-071KL" H 4850 3100 50 0001 C CNN "DEV:Manufacturer Part Number"
F 13 "RES SMD 1K OHM 1% 1/16W 0402" H 4850 3100 50 0001 C CNN "DEV:Description"
1 4850 3100
0 1 1 0
$EndComp
$Comp
L Device:LED_ALT D1
U 1 1 5FDD1589
P 5400 3100
F 0 "D1" H 5400 3410 50 0000 C CNN
F 1 "DIO-000062-00" H 5400 2600 50 0001 C CNN
F 2 "Diodes:LED0603-YELLOW" H 5400 2300 50 0001 C CNN
F 3 "" H 5400 2700 50 0001 C CNN
F 4 "Würth Elektronik" H 5400 2500 50 0001 C CNN "Manufacturer"
F 5 "150060YS75000" H 5400 2400 50 0001 C CNN "Manufacturer Part Number"
F 6 "150060YS75000" H 5400 2700 50 0001 C CNN "Part Number"
F 7 "2V" H 5400 3319 50 0000 C CNN "Forward Voltage (Volt)"
F 8 "Yellow" H 5400 3228 50 0000 C CNN "LED Color"
1 5400 3100
-1 0 0 1
$EndComp
$Comp
L power:+3.3V #PWR0101
U 1 1 5FDD2CE3
P 4500 3000
F 0 "#PWR0101" H 4500 2850 50 0001 C CNN
F 1 "+3.3V" H 4500 3173 50 0000 C CNN
F 2 "" H 4500 3000 60 0000 C CNN
F 3 "" H 4500 3000 60 0000 C CNN
1 4500 3000
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR0102
U 1 1 5FDD32E7
P 5750 3200
F 0 "#PWR0102" H 5750 3030 50 0001 C CNN
F 1 "GND" H 5750 3050 50 0000 C CNN
F 2 "" H 5750 3300 60 0000 C CNN
F 3 "" H 5730 3110 60 0000 C CNN
1 5750 3200
1 0 0 -1
$EndComp
Wire Wire Line
4500 3000 4500 3100
Wire Wire Line
4500 3100 4700 3100
Wire Wire Line
5000 3100 5250 3100
Wire Wire Line
5550 3100 5750 3100
Wire Wire Line
5750 3100 5750 3200
$Comp
L Device:R_US R2
U 1 1 5FDD4C1B
P 6500 3100
F 0 "R2" V 6600 3100 50 0000 C CNN
F 1 "RES-000007-00" H 6500 2650 50 0001 C CNN
F 2 "Resistors:R0402" H 6500 2350 50 0001 C CNN
F 3 "" H 6500 2750 50 0001 C CNN
F 4 "Stackpole Electronics Inc" H 6500 2550 50 0001 C CNN "Manufacturer"
F 5 "RMCF0402FT4K70" H 6500 2450 50 0001 C CNN "Manufacturer Part Number"
F 6 "4.7K" V 6325 3100 50 0000 C CNN "Resistance (Ohms)"
F 7 "±1%" H 6650 3000 50 0001 L CNN "Tolerance (%)"
F 8 "0402" V 6400 3100 50 0000 C CNN "Package Type"
F 9 "1/16W" H 6500 2800 50 0001 C CNN "Power (Watts)"
F 10 "dnp" H 6500 3100 50 0001 C CNN "PROD"
1 6500 3100
0 1 1 0
$EndComp
$Comp
L Device:LED_ALT D2
U 1 1 5FDD4C26
P 7050 3100
F 0 "D2" H 7050 3410 50 0000 C CNN
F 1 "DIO-000062-00" H 7050 2600 50 0001 C CNN
F 2 "Diodes:LED0603-YELLOW" H 7050 2300 50 0001 C CNN
F 3 "" H 7050 2700 50 0001 C CNN
F 4 "Würth Elektronik" H 7050 2500 50 0001 C CNN "Manufacturer"
F 5 "150060YS75000" H 7050 2400 50 0001 C CNN "Manufacturer Part Number"
F 6 "150060YS75000" H 7050 2700 50 0001 C CNN "Part Number"
F 7 "2V" H 7050 3319 50 0000 C CNN "Forward Voltage (Volt)"
F 8 "Yellow" H 7050 3228 50 0000 C CNN "LED Color"
F 9 "dnp" H 7050 3100 50 0001 C CNN "PROD"
1 7050 3100
-1 0 0 1
$EndComp
$Comp
L power:+3.3V #PWR0103
U 1 1 5FDD4C2C
P 6150 3000
F 0 "#PWR0103" H 6150 2850 50 0001 C CNN
F 1 "+3.3V" H 6150 3173 50 0000 C CNN
F 2 "" H 6150 3000 60 0000 C CNN
F 3 "" H 6150 3000 60 0000 C CNN
1 6150 3000
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR0104
U 1 1 5FDD4C32
P 7400 3200
F 0 "#PWR0104" H 7400 3030 50 0001 C CNN
F 1 "GND" H 7400 3050 50 0000 C CNN
F 2 "" H 7400 3300 60 0000 C CNN
F 3 "" H 7380 3110 60 0000 C CNN
1 7400 3200
1 0 0 -1
$EndComp
Wire Wire Line
6150 3000 6150 3100
Wire Wire Line
6150 3100 6350 3100
Wire Wire Line
6650 3100 6900 3100
Wire Wire Line
7200 3100 7400 3100
Wire Wire Line
7400 3100 7400 3200
Wire Notes Line
4350 2700 5900 2700
Wire Notes Line
5900 2700 5900 3500
Wire Notes Line
5900 3500 4350 3500
Wire Notes Line
4350 3500 4350 2700
Wire Notes Line
6000 2700 7550 2700
Wire Notes Line
7550 2700 7550 3500
Wire Notes Line
7550 3500 6000 3500
Wire Notes Line
6000 3500 6000 2700
Text Notes 4350 2700 0 50 ~ 0
[Prod] R1=4.7K / [Dev] R1=1K
Text Notes 6000 2700 0 50 ~ 0
[Prod] R2, D2=dnp
$EndSCHEMATC

View File

@ -1238,6 +1238,19 @@ def test_int_bom_variant_t2c():
ctx.clean_up()
def test_int_bom_variant_rename_1():
prj = 'f_rename_1'
ctx = context.TestContextSCH('test_int_bom_variant_rename_1', prj, 'int_bom_var_rename_1_csv', BOM_DIR)
ctx.run(extra_debug=True)
rows, header, info = ctx.load_csv(prj+'-bom_(PROD).csv')
ref_column = header.index(REF_COLUMN_NAME)
val_column = header.index(VALUE_COLUMN_NAME)
check_kibom_test_netlist(rows, ref_column, 2, ['R2', 'D2'], ['R1', 'D1'])
rows, header, info = ctx.load_csv(prj+'-bom_(DEV).csv')
check_kibom_test_netlist(rows, ref_column, 3, None, ['R1', 'R2', 'D1', 'D2'])
ctx.clean_up()
def test_int_bom_variant_t2s():
prj = 'kibom-variant_2'
ctx = context.TestContextSCH('test_int_bom_variant_t2s', prj, 'int_bom_var_t2s_csv', BOM_DIR)

View File

@ -0,0 +1,54 @@
# Example KiBot config file
kibot:
version: 1
filters:
- name: 'Variant rename'
type: var_rename
separator: ':'
variant_to_value: true
variants:
- name: 'production'
comment: 'Production variant'
type: kibom
file_id: '_(PROD)'
variant: PROD
pre_transform: 'Variant rename'
- name: 'development'
comment: 'Development variant'
type: kibom
file_id: '_(DEV)'
variant: DEV
pre_transform: 'Variant rename'
outputs:
- name: 'bom_internal_production'
comment: "Bill of Materials in CSV format for production"
type: bom
dir: BoM
options:
variant: production
columns:
- Row
- References
- Value
- Description
- Manufacturer
- Manufacturer Part Number
- name: 'bom_internal_test'
comment: "Bill of Materials in CSV format for development"
type: bom
dir: BoM
options:
variant: development
columns:
- Row
- References
- Value
- Description
- Manufacturer
- Manufacturer Part Number