Implemented output priorities

- By default `qr_lib` is high priority and `navigate_results`/
  `compress` are low priority.
- Priorities can be configured.
- A command line option disables it.
This commit is contained in:
Salvador E. Tropea 2022-06-07 13:57:32 -03:00
parent 0deed52479
commit 043ee382d3
12 changed files with 177 additions and 72 deletions

View File

@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
### Added ### Added
- General stuff:
- Outputs now can have priorities, by default is applied.
Use `-n` to disable it.
- New outputs: - New outputs:
- `navigate_results` creates web pages to browse the generated outputs. - `navigate_results` creates web pages to browse the generated outputs.
- New globals: - New globals:
@ -20,6 +23,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed ### Changed
- KiCad environment variables: more variables detected, native KiCad 6 names, - KiCad environment variables: more variables detected, native KiCad 6 names,
all exported to the environment (#205) all exported to the environment (#205)
- Consequences of the priorities implementation:
- `qr_lib` outputs are created before others
- `navigate_results` and `compress` outputs are created after others
## [1.1.0] - 2022-05-24 ## [1.1.0] - 2022-05-24
### Added ### Added

View File

@ -1172,6 +1172,8 @@ Next time you need this list just use an alias, like this:
* Valid keys: * Valid keys:
- `output`: [string='%f-%i%I%v.%x'] Filename for the output (%i=boardview, %x=brd). Affected by global options. - `output`: [string='%f-%i%I%v.%x'] Filename for the output (%i=boardview, %x=brd). Affected by global options.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* BoM (Bill of Materials) * BoM (Bill of Materials)
@ -1362,6 +1364,8 @@ Next time you need this list just use an alias, like this:
- `style`: [string='modern-blue'] Head style: modern-blue, modern-green, modern-red and classic. - `style`: [string='modern-blue'] Head style: modern-blue, modern-green, modern-red and classic.
- `title`: [string='KiBot Bill of Materials'] BoM title. - `title`: [string='KiBot Bill of Materials'] BoM title.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* Archiver (files compressor) * Archiver (files compressor)
@ -1396,6 +1400,8 @@ Next time you need this list just use an alias, like this:
- `output`: [string='%f-%i%I%v.%x'] Name for the generated archive (%i=name of the output %x=according to format). Affected by global options. - `output`: [string='%f-%i%I%v.%x'] Name for the generated archive (%i=name of the output %x=according to format). Affected by global options.
- *remove_files*: Alias for move_files. - *remove_files*: Alias for move_files.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=10] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* Datasheets downloader * Datasheets downloader
@ -1424,6 +1430,8 @@ Next time you need this list just use an alias, like this:
It only makes sense if the `output` field makes their output different. It only makes sense if the `output` field makes their output different.
- `variant`: [string=''] Board variant to apply. - `variant`: [string=''] Board variant to apply.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* DXF (Drawing Exchange Format) * DXF (Drawing Exchange Format)
@ -1476,6 +1484,8 @@ Next time you need this list just use an alias, like this:
- `use_aux_axis_as_origin`: [boolean=false] Use the auxiliary axis as origin for coordinates. - `use_aux_axis_as_origin`: [boolean=false] Use the auxiliary axis as origin for coordinates.
- `variant`: [string=''] Board variant to apply. - `variant`: [string=''] Board variant to apply.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* Excellon drill format * Excellon drill format
@ -1517,6 +1527,8 @@ Next time you need this list just use an alias, like this:
- `use_aux_axis_as_origin`: [boolean=false] Use the auxiliary axis as origin for coordinates. - `use_aux_axis_as_origin`: [boolean=false] Use the auxiliary axis as origin for coordinates.
- `zeros_format`: [string='DECIMAL_FORMAT'] [DECIMAL_FORMAT,SUPPRESS_LEADING,SUPPRESS_TRAILING,KEEP_ZEROS] How to handle the zeros. - `zeros_format`: [string='DECIMAL_FORMAT'] [DECIMAL_FORMAT,SUPPRESS_LEADING,SUPPRESS_TRAILING,KEEP_ZEROS] How to handle the zeros.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* GenCAD * GenCAD
@ -1543,6 +1555,8 @@ Next time you need this list just use an alias, like this:
- `save_origin`: [boolean=false] Save the origin coordinates in the file. - `save_origin`: [boolean=false] Save the origin coordinates in the file.
- `unique_pin_names`: [boolean=false] Generate unique pin names. - `unique_pin_names`: [boolean=false] Generate unique pin names.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* Gerber drill format * Gerber drill format
@ -1576,6 +1590,8 @@ Next time you need this list just use an alias, like this:
(%i='drill_report' %x='txt'). (%i='drill_report' %x='txt').
- `use_aux_axis_as_origin`: [boolean=false] Use the auxiliary axis as origin for coordinates. - `use_aux_axis_as_origin`: [boolean=false] Use the auxiliary axis as origin for coordinates.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* Gerber format * Gerber format
@ -1634,6 +1650,8 @@ Next time you need this list just use an alias, like this:
- `use_protel_extensions`: [boolean=false] Use legacy Protel file extensions. - `use_protel_extensions`: [boolean=false] Use legacy Protel file extensions.
- `variant`: [string=''] Board variant to apply. - `variant`: [string=''] Board variant to apply.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* HPGL (Hewlett & Packard Graphics Language) * HPGL (Hewlett & Packard Graphics Language)
@ -1688,6 +1706,8 @@ Next time you need this list just use an alias, like this:
- `uppercase_extensions`: [boolean=false] Use uppercase names for the extensions. - `uppercase_extensions`: [boolean=false] Use uppercase names for the extensions.
- `variant`: [string=''] Board variant to apply. - `variant`: [string=''] Board variant to apply.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* IBoM (Interactive HTML BoM) * IBoM (Interactive HTML BoM)
@ -1763,6 +1783,8 @@ Next time you need this list just use an alias, like this:
- `variants_whitelist`: [string=''] List of board variants to include in the BOM. - `variants_whitelist`: [string=''] List of board variants to include in the BOM.
IBoM option, avoid using in conjunction with KiBot variants/filters. IBoM option, avoid using in conjunction with KiBot variants/filters.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* KiBoM (KiCad Bill of Materials) * KiBoM (KiCad Bill of Materials)
@ -1864,6 +1886,8 @@ Next time you need this list just use an alias, like this:
variants with the ';' (semicolon) character. variants with the ';' (semicolon) character.
This isn't related to the KiBot concept of variants. This isn't related to the KiBot concept of variants.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* KiCost (KiCad Cost calculator) * KiCost (KiCad Cost calculator)
@ -1914,6 +1938,8 @@ Next time you need this list just use an alias, like this:
- `variant`: [string=''] Board variant to apply. - `variant`: [string=''] Board variant to apply.
Don't use the `kicost_variant` when using internal variants/filters. Don't use the `kicost_variant` when using internal variants/filters.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* Navigate Results * Navigate Results
@ -1934,6 +1960,8 @@ Next time you need this list just use an alias, like this:
- `link_from_root`: [string=''] The name of a file to create at the main output directory linking to the home page. - `link_from_root`: [string=''] The name of a file to create at the main output directory linking to the home page.
- `output`: [string='%f-%i%I%v.%x'] Filename for the output (%i=html, %x=navigate). Affected by global options. - `output`: [string='%f-%i%I%v.%x'] Filename for the output (%i=html, %x=navigate). Affected by global options.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=10] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* Netlist * Netlist
@ -1958,6 +1986,8 @@ Next time you need this list just use an alias, like this:
testing, is generated from the 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. - `output`: [string='%f-%i%I%v.%x'] Filename for the output (%i=netlist/IPC-D-356, %x=net/d356). Affected by global options.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* PCB Print * PCB Print
@ -2046,6 +2076,8 @@ Next time you need this list just use an alias, like this:
- `variant`: [string=''] Board variant to apply. - `variant`: [string=''] Board variant to apply.
- `via_color`: [string=''] Color used for through-hole `colored_vias`. - `via_color`: [string=''] Color used for through-hole `colored_vias`.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* PcbDraw - Beautiful 2D PCB render * PcbDraw - Beautiful 2D PCB render
@ -2095,6 +2127,8 @@ Next time you need this list just use an alias, like this:
- `vcuts`: [boolean=false] Render V-CUTS on the Cmts.User layer. - `vcuts`: [boolean=false] Render V-CUTS on the Cmts.User layer.
- `warnings`: [string='visible'] [visible,all,none] Using visible only the warnings about components in the visible side are generated. - `warnings`: [string='visible'] [visible,all,none] Using visible only the warnings about components in the visible side are generated.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* PDF (Portable Document Format) * PDF (Portable Document Format)
@ -2168,6 +2202,8 @@ Next time you need this list just use an alias, like this:
- `plot_footprint_values`: [boolean=true] Include the footprint values. - `plot_footprint_values`: [boolean=true] Include the footprint values.
- `plot_sheet_reference`: [boolean=false] Include the frame and title block. Only available for KiCad 6 and you get a poor result - `plot_sheet_reference`: [boolean=false] Include the frame and title block. Only available for KiCad 6 and you get a poor result
The `pcb_print` output can do a better job for PDF, SVG, PS, EPS and PNG outputs. The `pcb_print` output can do a better job for PDF, SVG, PS, EPS and PNG outputs.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
- `tent_vias`: [boolean=true] Cover the vias. - `tent_vias`: [boolean=true] Cover the vias.
- `uppercase_extensions`: [boolean=false] Use uppercase names for the extensions. - `uppercase_extensions`: [boolean=false] Use uppercase names for the extensions.
@ -2218,6 +2254,8 @@ Next time you need this list just use an alias, like this:
If it starts with `+` the text is concatenated. If it starts with `+` the text is concatenated.
- `variant`: [string=''] Board variant to apply. - `variant`: [string=''] Board variant to apply.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* PDF Schematic Print (Portable Document Format) * PDF Schematic Print (Portable Document Format)
@ -2245,6 +2283,8 @@ Next time you need this list just use an alias, like this:
- `variant`: [string=''] Board variant to apply. - `variant`: [string=''] Board variant to apply.
Not fitted components are crossed. Not fitted components are crossed.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* PDF joiner * PDF joiner
@ -2275,6 +2315,8 @@ Next time you need this list just use an alias, like this:
See the `from_cwd` option. See the `from_cwd` option.
- `use_external_command`: [boolean=false] Use the `pdfunite` tool instead of PyPDF2 Python module. - `use_external_command`: [boolean=false] Use the `pdfunite` tool instead of PyPDF2 Python module.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* Pick & place * Pick & place
@ -2309,6 +2351,8 @@ Next time you need this list just use an alias, like this:
- `use_aux_axis_as_origin`: [boolean=true] Use the auxiliary axis as origin for coordinates (KiCad default). - `use_aux_axis_as_origin`: [boolean=true] Use the auxiliary axis as origin for coordinates (KiCad default).
- `variant`: [string=''] Board variant to apply. - `variant`: [string=''] Board variant to apply.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* PS (Postscript) * PS (Postscript)
@ -2368,6 +2412,8 @@ Next time you need this list just use an alias, like this:
- `width_adjust`: [number=0] This width factor is intended to compensate PS printers/plotters that do not strictly obey line width settings. - `width_adjust`: [number=0] This width factor is intended to compensate PS printers/plotters that do not strictly obey line width settings.
Only used to plot pads and tracks. Only used to plot pads and tracks.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* QR_Lib * QR_Lib
@ -2406,6 +2452,8 @@ Next time you need this list just use an alias, like this:
- `reference`: [string='QR'] The reference prefix. - `reference`: [string='QR'] The reference prefix.
- `use_sch_dir`: [boolean=true] Generate the libs relative to the schematic/PCB dir. - `use_sch_dir`: [boolean=true] Generate the libs relative to the schematic/PCB dir.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=90] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* 3D render of the PCB * 3D render of the PCB
@ -2462,6 +2510,8 @@ Next time you need this list just use an alias, like this:
- `zoom`: [number=0] Zoom steps. Use positive to enlarge, get closer, and negative to reduce. - `zoom`: [number=0] Zoom steps. Use positive to enlarge, get closer, and negative to reduce.
Same result as using the mouse wheel in the 3D viewer. Same result as using the mouse wheel in the 3D viewer.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* Design report * Design report
@ -2495,6 +2545,8 @@ Next time you need this list just use an alias, like this:
- `template`: [string='full'] Name for one of the internal templates (full, full_svg, simple) or a custom template file. - `template`: [string='full'] Name for one of the internal templates (full, full_svg, simple) or a custom template file.
Note: when converting to PDF PanDoc can fail on some Unicode values (use `simple_ASCII`). Note: when converting to PDF PanDoc can fail on some Unicode values (use `simple_ASCII`).
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* Schematic with variant generator * Schematic with variant generator
@ -2518,6 +2570,8 @@ Next time you need this list just use an alias, like this:
A short-cut to use for simple cases where a variant is an overkill. A short-cut to use for simple cases where a variant is an overkill.
- `variant`: [string=''] Board variant to apply. - `variant`: [string=''] Board variant to apply.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* STEP (ISO 10303-21 Clear Text Encoding of the Exchange Structure) * STEP (ISO 10303-21 Clear Text Encoding of the Exchange Structure)
@ -2551,6 +2605,8 @@ Next time you need this list just use an alias, like this:
- `subst_models`: [boolean=true] Substitute STEP or IGS models with the same name in place of VRML models. - `subst_models`: [boolean=true] Substitute STEP or IGS models with the same name in place of VRML models.
- `variant`: [string=''] Board variant to apply. - `variant`: [string=''] Board variant to apply.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* SVG (Scalable Vector Graphics) * SVG (Scalable Vector Graphics)
@ -2604,6 +2660,8 @@ Next time you need this list just use an alias, like this:
- `uppercase_extensions`: [boolean=false] Use uppercase names for the extensions. - `uppercase_extensions`: [boolean=false] Use uppercase names for the extensions.
- `variant`: [string=''] Board variant to apply. - `variant`: [string=''] Board variant to apply.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* SVG PCB Print (Scalable Vector Graphics) * SVG PCB Print (Scalable Vector Graphics)
@ -2652,6 +2710,8 @@ Next time you need this list just use an alias, like this:
If it starts with `+` the text is concatenated. If it starts with `+` the text is concatenated.
- `variant`: [string=''] Board variant to apply. - `variant`: [string=''] Board variant to apply.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
* SVG Schematic Print * SVG Schematic Print
@ -2678,6 +2738,8 @@ Next time you need this list just use an alias, like this:
- `variant`: [string=''] Board variant to apply. - `variant`: [string=''] Board variant to apply.
Not fitted components are crossed. Not fitted components are crossed.
- `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output. - `output_id`: [string=''] Text to use for the %I expansion content. To differentiate variations of this output.
- `priority`: [number=50] [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs.
- `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested. - `run_by_default`: [boolean=true] When enabled this output will be created when no specific outputs are requested.
@ -3130,7 +3192,7 @@ KiBot: KiCad automation tool for documents generation
Usage: Usage:
kibot [-b BOARD] [-e SCHEMA] [-c CONFIG] [-d OUT_DIR] [-s PRE] kibot [-b BOARD] [-e SCHEMA] [-c CONFIG] [-d OUT_DIR] [-s PRE]
[-q | -v...] [-i] [-C] [-m MKFILE] [-g DEF]... [TARGET...] [-q | -v...] [-C | -i | -n] [-m MKFILE] [-g DEF]... [TARGET...]
kibot [-v...] [-b BOARD] [-e SCHEMA] [-c PLOT_CONFIG] --list kibot [-v...] [-b BOARD] [-e SCHEMA] [-c PLOT_CONFIG] --list
kibot [-v...] [-b BOARD] [-d OUT_DIR] [-p | -P] --example kibot [-v...] [-b BOARD] [-d OUT_DIR] [-p | -P] --example
kibot [-v...] [--start PATH] [-d OUT_DIR] [--dry] [-t, --type TYPE]... kibot [-v...] [--start PATH] [-d OUT_DIR] [--dry] [-t, --type TYPE]...
@ -3158,6 +3220,7 @@ Options:
-i, --invert-sel Generate the outputs not listed as targets -i, --invert-sel Generate the outputs not listed as targets
-l, --list List available outputs (in the config file) -l, --list List available outputs (in the config file)
-m MKFILE, --makefile MKFILE Generate a Makefile (no targets created) -m MKFILE, --makefile MKFILE Generate a Makefile (no targets created)
-n, --no-priority Don't sort targets by priority
-p, --copy-options Copy plot options from the PCB file -p, --copy-options Copy plot options from the PCB file
-P, --copy-and-expand As -p but expand the list of layers -P, --copy-and-expand As -p but expand the list of layers
-q, --quiet Remove information logs -q, --quiet Remove information logs

View File

@ -9,7 +9,7 @@
Usage: Usage:
kibot [-b BOARD] [-e SCHEMA] [-c CONFIG] [-d OUT_DIR] [-s PRE] kibot [-b BOARD] [-e SCHEMA] [-c CONFIG] [-d OUT_DIR] [-s PRE]
[-q | -v...] [-i] [-C] [-m MKFILE] [-g DEF]... [TARGET...] [-q | -v...] [-C | -i | -n] [-m MKFILE] [-g DEF]... [TARGET...]
kibot [-v...] [-b BOARD] [-e SCHEMA] [-c PLOT_CONFIG] --list kibot [-v...] [-b BOARD] [-e SCHEMA] [-c PLOT_CONFIG] --list
kibot [-v...] [-b BOARD] [-d OUT_DIR] [-p | -P] --example kibot [-v...] [-b BOARD] [-d OUT_DIR] [-p | -P] --example
kibot [-v...] [--start PATH] [-d OUT_DIR] [--dry] [-t, --type TYPE]... kibot [-v...] [--start PATH] [-d OUT_DIR] [--dry] [-t, --type TYPE]...
@ -37,6 +37,7 @@ Options:
-i, --invert-sel Generate the outputs not listed as targets -i, --invert-sel Generate the outputs not listed as targets
-l, --list List available outputs (in the config file) -l, --list List available outputs (in the config file)
-m MKFILE, --makefile MKFILE Generate a Makefile (no targets created) -m MKFILE, --makefile MKFILE Generate a Makefile (no targets created)
-n, --no-priority Don't sort targets by priority
-p, --copy-options Copy plot options from the PCB file -p, --copy-options Copy plot options from the PCB file
-P, --copy-and-expand As -p but expand the list of layers -P, --copy-and-expand As -p but expand the list of layers
-q, --quiet Remove information logs -q, --quiet Remove information logs
@ -319,7 +320,7 @@ def main():
generate_makefile(args.makefile, plot_config, outputs) generate_makefile(args.makefile, plot_config, outputs)
else: else:
# Do all the job (preflight + outputs) # Do all the job (preflight + outputs)
generate_outputs(outputs, args.target, args.invert_sel, args.skip_pre, args.cli_order) generate_outputs(outputs, args.target, args.invert_sel, args.skip_pre, args.cli_order, args.no_priority)
# Print total warnings # Print total warnings
logger.log_totals() logger.log_totals()

View File

@ -326,7 +326,7 @@ def get_board_comps_data(comps):
c.virtual = True c.virtual = True
def preflight_checks(skip_pre): def preflight_checks(skip_pre, targets):
logger.debug("Preflight checks") logger.debug("Preflight checks")
if skip_pre is not None: if skip_pre is not None:
@ -350,7 +350,7 @@ def preflight_checks(skip_pre):
else: else:
logger.debug('Skipping `{}`'.format(skip)) logger.debug('Skipping `{}`'.format(skip))
o_pre.disable() o_pre.disable()
BasePreFlight.run_enabled() BasePreFlight.run_enabled(targets)
def get_output_dir(o_dir, obj, dry=False): def get_output_dir(o_dir, obj, dry=False):
@ -411,44 +411,63 @@ def run_output(out, dont_stop=False):
raise raise
def generate_outputs(outputs, target, invert, skip_pre, cli_order, dont_stop=False): def generate_outputs(outputs, targets, invert, skip_pre, cli_order, no_priority, dont_stop=False):
logger.debug("Starting outputs for board {}".format(GS.pcb_file)) logger.debug("Starting outputs for board {}".format(GS.pcb_file))
preflight_checks(skip_pre) # Make a list of target outputs
# Check if the preflights pulled options n = len(targets)
for out in RegOutput.get_prioritary_outputs(): if n == 0:
if config_output(out, dont_stop=dont_stop): # No targets means all
logger.info('- '+str(out)) if invert:
run_output(out, dont_stop=dont_stop)
# Check if all must be skipped
n = len(target)
if n == 0 and invert:
# Skip all targets # Skip all targets
logger.debug('Skipping all outputs') logger.debug('Skipping all outputs')
return else:
targets = [out for out in RegOutput.get_outputs() if out.run_by_default]
else:
# Check we got a valid list of outputs # Check we got a valid list of outputs
for name in target: for name in targets:
out = RegOutput.get_output(name) out = RegOutput.get_output(name)
if out is None: if out is None:
logger.error('Unknown output `{}`'.format(name)) logger.error('Unknown output `{}`'.format(name))
exit(EXIT_BAD_ARGS) exit(EXIT_BAD_ARGS)
# Generate outputs # Check for CLI+invert inconsistency
if cli_order and not invert: if cli_order and invert:
# Use the CLI order logger.error("CLI order and invert options can't be used simultaneously")
for name in target: exit(EXIT_BAD_ARGS)
out = RegOutput.get_output(name) # Now convert the list of names into a list of output objects
if config_output(out, dont_stop=dont_stop): if cli_order:
logger.info('- '+str(out)) # Add them in the same order found at the command line
run_output(out, dont_stop) targets = [RegOutput.get_output(name) for name in targets]
else: else:
# Use the declaration order # Add them in the declared order
new_targets = []
if invert:
# Invert the selection
for out in RegOutput.get_outputs(): for out in RegOutput.get_outputs():
if (((n == 0 or ((out.name not in target) and invert)) and out.run_by_default) or if (out.name not in targets) and out.run_by_default:
((out.name in target) and not invert)): new_targets.append(out)
else:
logger.debug('Skipping `{}` output'.format(out.name))
else:
# Normal list
for out in RegOutput.get_outputs():
if out.name in targets:
new_targets.append(out)
else:
logger.debug('Skipping `{}` output'.format(out.name))
targets = new_targets
logger.debug('Outputs before preflights: {}'.format(targets))
# Run the preflights
preflight_checks(skip_pre, targets)
logger.debug('Outputs after preflights: {}'.format(targets))
if not cli_order and not no_priority:
# Sort by priority
targets = sorted(targets, key=lambda o: o.priority, reverse=True)
logger.debug('Outputs after sorting: {}'.format(targets))
# Configure and run the outputs
for out in targets:
if config_output(out, dont_stop=dont_stop): if config_output(out, dont_stop=dont_stop):
logger.info('- '+str(out)) logger.info('- '+str(out))
run_output(out, dont_stop) run_output(out, dont_stop)
else:
logger.debug('Skipping `%s` output', str(out))
def adapt_file_name(name): def adapt_file_name(name):
@ -859,7 +878,7 @@ def generate_targets(config_file):
with open(config_file) as cf_file: with open(config_file) as cf_file:
outputs = cr.read(cf_file) outputs = cr.read(cf_file)
# Do all the job # Do all the job
generate_outputs(outputs, [], False, None, False, dont_stop=True) generate_outputs(outputs, [], False, None, False, False, dont_stop=True)
def _walk(path, depth): def _walk(path, depth):

View File

@ -55,6 +55,9 @@ class BaseOutput(RegOutput):
self.category = Optionable self.category = Optionable
""" [string|list(string)=''] The category for this output. If not specified an internally defined category is used. """ [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 """ Categories looks like file system paths, i.e. PCB/fabrication/gerber """
self.priority = 50
""" [0,100] Priority for this output. High priority outputs are created first.
Internally we use 10 for low priority, 90 for high priority and 50 for most outputs """
if GS.global_dir: if GS.global_dir:
self.dir = GS.global_dir self.dir = GS.global_dir
self._sch_related = False self._sch_related = False
@ -150,6 +153,9 @@ class BaseOutput(RegOutput):
gb['dir'] = dir gb['dir'] = dir
return outs return outs
def fix_priority_help(self):
self._help_priority = self._help_priority.replace('[number=50]', '[number={}]'.format(self.priority))
def run(self, output_dir): def run(self, output_dir):
self.output_dir = output_dir self.output_dir = output_dir
self.options.run(self.expand_filename(output_dir, self.options.output)) self.options.run(self.expand_filename(output_dir, self.options.output))

View File

@ -225,10 +225,14 @@ class Compress(BaseOutput): # noqa: F821
This is used to generate groups of files in compressed file format. """ This is used to generate groups of files in compressed file format. """
def __init__(self): def __init__(self):
super().__init__() super().__init__()
# Make it low priority so it gets created after all the other outputs
self.priority = 10
with document: with document:
self.options = CompressOptions self.options = CompressOptions
""" [dict] Options for the `compress` output """ """ [dict] Options for the `compress` output """
self._none_related = True self._none_related = True
# The help is inherited and already mentions the default priority
self.fix_priority_help()
def get_dependencies(self): def get_dependencies(self):
return self.options.get_dependencies() return self.options.get_dependencies()

View File

@ -455,9 +455,13 @@ class Navigate_Results(BaseOutput): # noqa: F821
Generates a web page to navigate the generated outputs """ Generates a web page to navigate the generated outputs """
def __init__(self): def __init__(self):
super().__init__() super().__init__()
# Make it low priority so it gets created after all the other outputs
self.priority = 10
with document: with document:
self.options = Navigate_ResultsOptions self.options = Navigate_ResultsOptions
""" [dict] Options for the `navigate_results` output """ """ [dict] Options for the `navigate_results` output """
# The help is inherited and already mentions the default priority
self.fix_priority_help()
@staticmethod @staticmethod
def get_conf_examples(name, layers, templates): def get_conf_examples(name, layers, templates):

View File

@ -529,11 +529,15 @@ class QR_Lib(BaseOutput): # noqa: F821
- To keep them updated add the `update_qr` preflight """ - To keep them updated add the `update_qr` preflight """
def __init__(self): def __init__(self):
super().__init__() super().__init__()
# Make it high priority so it gets created before all the other outputs
self.priority = 90
with document: with document:
self.options = QR_LibOptions self.options = QR_LibOptions
""" [dict] Options for the `boardview` output """ """ [dict] Options for the `boardview` output """
self._both_related = True self._both_related = True
self._update_mode = False self._update_mode = False
# The help is inherited and already mentions the default priority
self.fix_priority_help()
@staticmethod @staticmethod
def get_conf_examples(name, layers, templates): def get_conf_examples(name, layers, templates):

View File

@ -17,6 +17,7 @@ class BasePreFlight(Registrable):
_registered = {} _registered = {}
_in_use = {} _in_use = {}
_options = {} _options = {}
_targets = None
def __init__(self, name, value): def __init__(self, name, value):
super().__init__() super().__init__()
@ -49,7 +50,18 @@ class BasePreFlight(Registrable):
return BasePreFlight._options.get(name) return BasePreFlight._options.get(name)
@staticmethod @staticmethod
def run_enabled(): def insert_target(out):
""" Add a target, at the beginning of the list and with high priority """
try:
del BasePreFlight._targets[BasePreFlight._targets.index(out)]
except ValueError:
pass
BasePreFlight._targets.insert(0, out)
out.priority = 90
@staticmethod
def run_enabled(targets):
BasePreFlight._targets = targets
try: try:
for k, v in BasePreFlight._in_use.items(): for k, v in BasePreFlight._in_use.items():
if v._enabled: if v._enabled:

View File

@ -25,8 +25,8 @@ class Update_QR(BasePreFlight): # noqa: F821
self._pcb_related = True self._pcb_related = True
def run(self): def run(self):
for o in list(RegOutput.get_outputs()): # We convert it to a list because we will mutate the dict for o in RegOutput.get_outputs():
if o.type == 'qr_lib': if o.type == 'qr_lib':
RegOutput.make_prioritary(o.name) BasePreFlight.insert_target(o) # noqa: F821
o._update_mode = True o._update_mode = True
logger.debug('Making {} prioritary'.format(o)) logger.debug('Making {} prioritary'.format(o))

View File

@ -45,8 +45,6 @@ class RegOutput(Optionable, Registrable):
_def_variants = {} _def_variants = {}
# List of defined outputs # List of defined outputs
_def_outputs = OrderedDict() _def_outputs = OrderedDict()
# List of priority outputs
_prio_outputs = OrderedDict()
def __init__(self): def __init__(self):
super().__init__() super().__init__()
@ -59,8 +57,6 @@ class RegOutput(Optionable, Registrable):
RegOutput._def_variants = {} RegOutput._def_variants = {}
# List of defined outputs # List of defined outputs
RegOutput._def_outputs = OrderedDict() RegOutput._def_outputs = OrderedDict()
# List of priority outputs
RegOutput._prio_outputs = OrderedDict()
@staticmethod @staticmethod
def add_variants(variants): def add_variants(variants):
@ -108,20 +104,10 @@ class RegOutput(Optionable, Registrable):
def get_outputs(): def get_outputs():
return RegOutput._def_outputs.values() return RegOutput._def_outputs.values()
@staticmethod
def get_prioritary_outputs():
return RegOutput._prio_outputs.values()
@staticmethod @staticmethod
def get_output(name): def get_output(name):
return RegOutput._def_outputs.get(name, None) return RegOutput._def_outputs.get(name, None)
@staticmethod
def make_prioritary(name):
out = RegOutput._def_outputs[name]
del RegOutput._def_outputs[name]
RegOutput._prio_outputs[name] = out
@staticmethod @staticmethod
def check_variant(variant): def check_variant(variant):
if variant: if variant:

View File

@ -6,20 +6,6 @@ preflight:
update_qr: true update_qr: true
outputs: outputs:
- name: 'QRCodes'
comment: "Example of QR codes"
type: qr_lib
options:
output: 'qr.%x'
qrs:
- size_sch: 1
size_pcb: 2
size_units: inches
layer: copper
- name: QR2
text: 'https://github.com/INTI-CMNB/KiBot/'
correction_level: 'high'
- name: 'print_sch' - name: 'print_sch'
comment: "Print schematic (PDF)" comment: "Print schematic (PDF)"
type: pdf_sch_print type: pdf_sch_print
@ -39,3 +25,17 @@ outputs:
layers: layers:
- layer: F.SilkS - layer: F.SilkS
- layer: F.Cu - layer: F.Cu
- name: 'QRCodes'
comment: "Example of QR codes"
type: qr_lib
options:
output: 'qr.%x'
qrs:
- size_sch: 1
size_pcb: 2
size_units: inches
layer: copper
- name: QR2
text: 'https://github.com/INTI-CMNB/KiBot/'
correction_level: 'high'