49 lines
1.8 KiB
Markdown
49 lines
1.8 KiB
Markdown
# KiCost variants (modern style)
|
|
|
|
This is an analysis and test of the *variants* implementation of [KiCost](https://github.com/xesscorp/KiCost)
|
|
An old style used `kicost.VARIANT:FIELD` to assign fields. So you could define `kicost.V1:DNP`.
|
|
|
|
## What goes inside the SCH
|
|
|
|
- The variants are implemented using the `variant` field (`version` is an alias).
|
|
- The `variant` field can contain more than one value, valid separators are: comma `,`, semicolon `;`, slash `/` and space ` `.
|
|
Note: spaces are removed, and a vanriant tag can't contain spaces because this is a separator. (`re.split('[,;/ ]', variants)`)
|
|
- Components without a variant are always included.
|
|
- Components with one or more variants are included only if requested (`--variant REGEX` matches any of the listed variants)
|
|
|
|
## What goes outside the SCH
|
|
|
|
- When you generate the spreadsheet you can select one or more variants using a regex (`--variant REGEX`).
|
|
- Components containing one or more variants that match the regex are added.
|
|
- No exclusion mechanism is available.
|
|
- `REGEX` isn't case sensitive.
|
|
|
|
## Where is in the code?
|
|
|
|
Source `kicost/edas/tools.py` function `remove_dnp_parts(components, variant)`.
|
|
The old mechanism is part of `kicost/edas/eda_kicad.py` function `extract_fields(part, variant)` combined with the above code.
|
|
|
|
## Conclusion
|
|
|
|
### Advantages
|
|
|
|
- Most of the information is inside the project.
|
|
- A regex allows pattern matching.
|
|
|
|
### Disadvantages
|
|
|
|
- You only have an "include only" option.
|
|
- The regex could become complex.
|
|
|
|
## Old mechanism
|
|
|
|
KiCost has a field rename mechanism. Fields named `kicost.VARIANT:FIELD` are:
|
|
|
|
- Renamed to `FIELD` if `VARIANT` matches `--variant REGEX`
|
|
- Discarded otherwise
|
|
|
|
This can be used with the DNP mechanism:
|
|
|
|
- The name of the field is `dnp` or `nopop` (case insensitive)
|
|
- If it contains anything other than 0 (evaluated as float) the component is removed.
|