diff --git a/README.md b/README.md index 575b22d3..b0c40d58 100644 --- a/README.md +++ b/README.md @@ -2644,6 +2644,12 @@ Notes: from the schematic. The `ipc` format is the IPC-D-356 format, useful for PCB testing, is generated from the PCB. - **`output`**: [string='%f-%i%I%v.%x'] Filename for the output (%i=netlist/IPC-D-356, %x=net/d356). Affected by global options. + - `dnf_filter`: [string|list(string)='_none'] Name of the filter to mark components as not fitted. + A short-cut to use for simple cases where a variant is an overkill. + - `pre_transform`: [string|list(string)='_none'] Name of the filter to transform fields before applying other filters. + A short-cut to use for simple cases where a variant is an overkill. + - `variant`: [string=''] Board variant to apply. + Used for sub-PCBs. - `category`: [string|list(string)=''] The category for this output. If not specified an internally defined category is used. Categories looks like file system paths, i.e. PCB/fabrication/gerber. - `disable_run_by_default`: [string|boolean] Use it to disable the `run_by_default` status of other output. diff --git a/docs/samples/generic_plot.kibot.yaml b/docs/samples/generic_plot.kibot.yaml index 64003b10..24c0a20c 100644 --- a/docs/samples/generic_plot.kibot.yaml +++ b/docs/samples/generic_plot.kibot.yaml @@ -1323,12 +1323,21 @@ outputs: type: 'netlist' dir: 'Example/netlist_dir' options: + # [string|list(string)='_none'] Name of the filter to mark components as not fitted. + # A short-cut to use for simple cases where a variant is an overkill + dnf_filter: '_none' # [string='classic'] [classic,ipc] The `classic` format is the KiCad internal format, and is generated # from the schematic. The `ipc` format is the IPC-D-356 format, useful for PCB # testing, is generated from the PCB format: 'classic' # [string='%f-%i%I%v.%x'] Filename for the output (%i=netlist/IPC-D-356, %x=net/d356). Affected by global options output: '%f-%i%I%v.%x' + # [string|list(string)='_none'] Name of the filter to transform fields before applying other filters. + # A short-cut to use for simple cases where a variant is an overkill + pre_transform: '_none' + # [string=''] Board variant to apply. + # Used for sub-PCBs + variant: '' # Panelize: # It currently uses the KiKit tool, which must be available. # Consult KiKit docs for detailed information. diff --git a/kibot/out_netlist.py b/kibot/out_netlist.py index 8fd91098..7e67ddcb 100644 --- a/kibot/out_netlist.py +++ b/kibot/out_netlist.py @@ -12,7 +12,7 @@ Dependencies: """ import os from .gs import GS -from .optionable import BaseOptions +from .out_base import VariantOptions from .misc import FAILED_EXECUTE from .kiplot import exec_with_retry, add_extra_options from .macros import macros, document, output_class # noqa: F401 @@ -21,7 +21,7 @@ from . import log logger = log.get_logger() -class NetlistOptions(BaseOptions): +class NetlistOptions(VariantOptions): def __init__(self): with document: self.output = GS.def_global_output @@ -31,6 +31,7 @@ class NetlistOptions(BaseOptions): from the schematic. The `ipc` format is the IPC-D-356 format, useful for PCB testing, is generated from the PCB """ super().__init__() + self.help_only_sub_pcbs() def config(self, parent): super().config(parent) @@ -48,10 +49,12 @@ class NetlistOptions(BaseOptions): def run(self, name): command = self.ensure_tool('KiAuto') + super().run(name) + to_remove = [] if self.format == 'ipc': command = command.replace('eeschema_do', 'pcbnew_do') subcommand = 'ipc_netlist' - file = GS.pcb_file + file = self.save_tmp_board_if_variant(to_remove) else: subcommand = 'netlist' file = GS.sch_file @@ -59,16 +62,16 @@ class NetlistOptions(BaseOptions): # Output file name cmd = [command, subcommand, '--output_name', name, file, output_dir] cmd, video_remove = add_extra_options(cmd) + if video_remove: + to_remove.append(os.path.join(self.expand_filename_pcb(GS.out_dir), command[:-3]+'_'+subcommand+'_screencast.ogv')) # Execute it ret = exec_with_retry(cmd) if ret: logger.error(command+' returned %d', ret) exit(FAILED_EXECUTE) - # Remove the video if needed - if video_remove: - video_name = os.path.join(self.expand_filename_pcb(GS.out_dir), command[:-3]+'_'+subcommand+'_screencast.ogv') - if os.path.isfile(video_name): - os.remove(video_name) + for f in to_remove: + if os.path.isfile(f): + os.remove(f) @output_class diff --git a/tests/yaml_samples/netlist_ipc_sub_pcb_bp.kibot.yaml b/tests/yaml_samples/netlist_ipc_sub_pcb_bp.kibot.yaml new file mode 100644 index 00000000..b5e9d0c2 --- /dev/null +++ b/tests/yaml_samples/netlist_ipc_sub_pcb_bp.kibot.yaml @@ -0,0 +1,15 @@ +# This is a working example. +# For a more complete reference use `--example` +kibot: + version: 1 + +import: + - file: battery_pack_sub_pcbs.kibot.yaml + +outputs: + - name: ipc_netlist + comment: IPC-D-356 netlist for testing + type: netlist + dir: Export + options: + format: ipc