Moved KiBoM default behavior to the KiBoM variant.
So it can be applied to other outputs.
This commit is contained in:
parent
1163d28e71
commit
d719718eca
|
|
@ -180,6 +180,10 @@ class BaseFilter(RegFilter):
|
|||
for name in names:
|
||||
if not name:
|
||||
continue
|
||||
if isinstance(name, Registrable):
|
||||
# A filter already converted
|
||||
filters.append(name)
|
||||
continue
|
||||
if name[0] == '!':
|
||||
invert = True
|
||||
name = name[1:]
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ from .gs import GS
|
|||
from .optionable import Optionable, BaseOptions
|
||||
from .registrable import RegOutput
|
||||
from .error import KiPlotConfigurationError
|
||||
from .misc import IFILL_MECHANICAL
|
||||
from .kiplot import get_board_comps_data
|
||||
from .macros import macros, document, output_class # noqa: F401
|
||||
from .bom.columnlist import ColumnList, BoMError
|
||||
|
|
@ -273,6 +272,9 @@ class BoMOptions(BaseOptions):
|
|||
self.variant.config_field = self.fit_field
|
||||
self.variant.variant = []
|
||||
self.variant.name = 'default'
|
||||
# Delegate any filter to the variant
|
||||
self.variant.set_def_filters(self.exclude_filter, self.dnf_filter, self.dnc_filter)
|
||||
self.exclude_filter = self.dnf_filter = self.dnc_filter = None
|
||||
self.variant.config() # Fill or adjust any detail
|
||||
|
||||
def config(self):
|
||||
|
|
@ -303,9 +305,9 @@ class BoMOptions(BaseOptions):
|
|||
if isinstance(self.component_aliases, type):
|
||||
self.component_aliases = DEFAULT_ALIASES
|
||||
# Filters
|
||||
self.exclude_filter = BaseFilter.solve_filter(self.exclude_filter, 'exclude_filter', IFILL_MECHANICAL)
|
||||
self.dnf_filter = BaseFilter.solve_filter(self.dnf_filter, 'dnf_filter', '_kibom_dnf_'+self.fit_field)
|
||||
self.dnc_filter = BaseFilter.solve_filter(self.dnc_filter, 'dnc_filter', '_kibom_dnc_'+self.fit_field)
|
||||
self.exclude_filter = BaseFilter.solve_filter(self.exclude_filter, 'exclude_filter')
|
||||
self.dnf_filter = BaseFilter.solve_filter(self.dnf_filter, 'dnf_filter')
|
||||
self.dnc_filter = BaseFilter.solve_filter(self.dnc_filter, 'dnc_filter')
|
||||
# Variants, make it an object
|
||||
self._normalize_variant()
|
||||
# Field names are handled in lowercase
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
# Project: KiBot (formerly KiPlot)
|
||||
from .registrable import RegVariant
|
||||
from .optionable import Optionable
|
||||
from .fil_base import BaseFilter, apply_in_bom_filter, apply_fitted_filter, apply_fixed_filter
|
||||
from .fil_base import apply_in_bom_filter, apply_fitted_filter, apply_fixed_filter
|
||||
from .macros import macros, document # noqa: F401
|
||||
|
||||
|
||||
|
|
@ -33,15 +33,6 @@ class BaseVariant(RegVariant):
|
|||
""" [string|list(string)=''] Name of the filter to mark components as 'Do Not Change'.
|
||||
Use '_kibom_dnc' for the default KiBoM behavior """
|
||||
|
||||
def config(self):
|
||||
super().config()
|
||||
# exclude_filter
|
||||
self.exclude_filter = BaseFilter.solve_filter(self.exclude_filter, 'exclude_filter')
|
||||
# dnf_filter
|
||||
self.dnf_filter = BaseFilter.solve_filter(self.dnf_filter, 'dnf_filter')
|
||||
# dnc_filter
|
||||
self.dnc_filter = BaseFilter.solve_filter(self.dnc_filter, 'dnc_filter')
|
||||
|
||||
def filter(self, comps, reset):
|
||||
# Apply all the filters
|
||||
apply_in_bom_filter(comps, self.exclude_filter, reset)
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ Implements the IBoM variants mechanism.
|
|||
"""
|
||||
from .optionable import Optionable
|
||||
from .gs import GS
|
||||
from .fil_base import BaseFilter
|
||||
from .macros import macros, document, variant_class # noqa: F401
|
||||
from . import log
|
||||
|
||||
|
|
@ -46,6 +47,9 @@ class IBoM(BaseVariant): # noqa: F821
|
|||
|
||||
def config(self):
|
||||
super().config()
|
||||
self.exclude_filter = BaseFilter.solve_filter(self.exclude_filter, 'exclude_filter')
|
||||
self.dnf_filter = BaseFilter.solve_filter(self.dnf_filter, 'dnf_filter')
|
||||
self.dnc_filter = BaseFilter.solve_filter(self.dnc_filter, 'dnc_filter')
|
||||
self.variants_blacklist = self._force_list(self.variants_blacklist)
|
||||
self.variants_whitelist = self._force_list(self.variants_whitelist)
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@ Implements the KiBoM variants mechanism.
|
|||
"""
|
||||
from .optionable import Optionable
|
||||
from .gs import GS
|
||||
from .misc import IFILL_MECHANICAL
|
||||
from .fil_base import BaseFilter
|
||||
from .macros import macros, document, variant_class # noqa: F401
|
||||
from . import log
|
||||
|
||||
|
|
@ -22,13 +24,23 @@ class KiBoM(BaseVariant): # noqa: F821
|
|||
+VARIANT includes the component only if we are using this variant. """
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self._def_exclude_filter = None
|
||||
self._def_dnf_filter = None
|
||||
self._def_dnc_filter = None
|
||||
with document:
|
||||
self.config_field = 'Config'
|
||||
""" Name of the field used to clasify components """
|
||||
self.variant = Optionable
|
||||
""" [string|list(string)=''] Board variant(s) """
|
||||
|
||||
def set_def_filters(self, exclude_filter, dnf_filter, dnc_filter):
|
||||
""" Filters delegated to the variant """
|
||||
self._def_exclude_filter = exclude_filter
|
||||
self._def_dnf_filter = dnf_filter
|
||||
self._def_dnc_filter = dnc_filter
|
||||
|
||||
def config(self):
|
||||
# Now we can let the parent initialize the filters
|
||||
super().config()
|
||||
# Variants, ensure a list
|
||||
if isinstance(self.variant, type):
|
||||
|
|
@ -39,6 +51,22 @@ class KiBoM(BaseVariant): # noqa: F821
|
|||
else:
|
||||
self.variant = []
|
||||
self.variant = [v.lower() for v in self.variant]
|
||||
# Filters priority:
|
||||
# 1) Defined here
|
||||
# 2) Delegated from the output format
|
||||
# 3) KiBoM default behavior
|
||||
# exclude_filter
|
||||
if not self._def_exclude_filter:
|
||||
self._def_exclude_filter = IFILL_MECHANICAL
|
||||
self.exclude_filter = BaseFilter.solve_filter(self.exclude_filter, 'exclude_filter', self._def_exclude_filter)
|
||||
# dnf_filter
|
||||
if not self._def_dnf_filter:
|
||||
self._def_dnf_filter = '_kibom_dnf_'+self.config_field
|
||||
self.dnf_filter = BaseFilter.solve_filter(self.dnf_filter, 'dnf_filter', self._def_dnf_filter)
|
||||
# dnc_filter
|
||||
if not self._def_dnc_filter:
|
||||
self._def_dnc_filter = '_kibom_dnc_'+self.config_field
|
||||
self.dnc_filter = BaseFilter.solve_filter(self.dnc_filter, 'dnc_filter', self._def_dnc_filter)
|
||||
# Config field must be lowercase
|
||||
self.config_field = self.config_field.lower()
|
||||
|
||||
|
|
|
|||
|
|
@ -118,4 +118,3 @@ def test_ibom_variant_1():
|
|||
logging.debug("* `bla bla` variant")
|
||||
check_modules(ctx, prj+'-ibom_bla_bla.html', ['R1', 'R4'])
|
||||
ctx.clean_up()
|
||||
|
||||
|
|
|
|||
|
|
@ -9,15 +9,13 @@ variants:
|
|||
type: kibom
|
||||
file_id: '_(V1)'
|
||||
variant: V1
|
||||
dnc_filter: '_kibom_dnc'
|
||||
dnf_filter: '_kibom_dnf_Config'
|
||||
exclude_filter: '_mechanical'
|
||||
|
||||
- name: 't1_v1b'
|
||||
comment: 'Test 1 Variant V1'
|
||||
type: kibom
|
||||
file_id: '_(V1b)'
|
||||
variant: V1
|
||||
dnc_filter: '_none'
|
||||
|
||||
outputs:
|
||||
- name: 'bom_internal_v1'
|
||||
|
|
@ -26,9 +24,6 @@ outputs:
|
|||
dir: BoM
|
||||
options:
|
||||
variant: t1_v1
|
||||
dnc_filter: '_none'
|
||||
dnf_filter: '_none'
|
||||
exclude_filter: '_none'
|
||||
|
||||
- name: 'bom_internal_v1b'
|
||||
comment: "Bill of Materials in CSV format for variant t1_v1"
|
||||
|
|
|
|||
Loading…
Reference in New Issue