diff --git a/kibot/var_base.py b/kibot/var_base.py index 976789fd..cab5ee23 100644 --- a/kibot/var_base.py +++ b/kibot/var_base.py @@ -4,6 +4,8 @@ # License: GPL-3.0 # Project: KiBot (formerly KiPlot) from .registrable import RegVariant +from .optionable import Optionable +from .fil_base import BaseFilter from .macros import macros, document # noqa: F401 @@ -20,3 +22,34 @@ class BaseVariant(RegVariant): """ A comment for documentation purposes """ self.file_id = '' """ Text to use as the """ + # * Filters + self.exclude_filter = Optionable + """ [string|list(string)=''] Name of the filter to exclude components from BoM processing. + Use '_mechanical' for the default KiBoM behavior """ + self.dnf_filter = Optionable + """ [string|list(string)=''] Name of the filter to mark components as 'Do Not Fit'. + Use '_kibom_dnf' for the default KiBoM behavior """ + self.dnc_filter = Optionable + """ [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): + # Apply all the filters + if self.exclude_filter: + for c in comps: + c.in_bom = self.exclude_filter.filter(c) + if self.dnf_filter: + for c in comps: + c.fitted = self.dnf_filter.filter(c) + if self.dnc_filter: + for c in comps: + c.fixed = self.dnc_filter.filter(c) diff --git a/kibot/var_ibom.py b/kibot/var_ibom.py index 4c0e31f1..5c3e5a07 100644 --- a/kibot/var_ibom.py +++ b/kibot/var_ibom.py @@ -62,6 +62,7 @@ class IBoM(BaseVariant): # noqa: F821 return False def filter(self, comps): + super().filter(comps) logger.debug("Applying IBoM style variants `{}`".format(self.name)) # Make black/white lists case insensitive self.variants_whitelist = [v.lower() for v in self.variants_whitelist] diff --git a/kibot/var_kibom.py b/kibot/var_kibom.py index 069c88e7..44aba572 100644 --- a/kibot/var_kibom.py +++ b/kibot/var_kibom.py @@ -64,6 +64,7 @@ class KiBoM(BaseVariant): # noqa: F821 return not exclusive def filter(self, comps): + super().filter(comps) logger.debug("Applying KiBoM style variants `{}`".format(self.name)) for c in comps: if not (c.fitted and c.in_bom):