The board object is no longer passed to run methodes.

The global GS.board is used instead.
This commit is contained in:
Salvador E. Tropea 2021-01-15 14:14:17 -03:00
parent 159e8996e8
commit b347a6ca30
16 changed files with 52 additions and 53 deletions

View File

@ -124,6 +124,9 @@ def exec_with_retry(cmd):
def load_board(pcb_file=None):
if GS.board is not None:
# Already loaded
return GS.board
import pcbnew
if not pcb_file:
GS.check_pcb()
@ -172,8 +175,7 @@ def get_board_comps_data(comps):
Note that we do it every time the function is called to reset transformation filters like rot_footprint. """
if not GS.pcb_file:
return
if not GS.board:
load_board()
load_board()
comps_hash = {c.ref: c for c in comps}
for m in GS.board.GetModules():
ref = m.GetReference()
@ -256,19 +258,18 @@ def generate_outputs(outputs, target, invert, skip_pre):
logger.debug('Skipping all outputs')
return
# Generate outputs
board = None
for out in outputs:
if (n == 0) or ((out.name in target) ^ invert):
# Should we load the PCB?
if out.is_pcb() and (board is None):
board = load_board()
if out.is_pcb():
load_board()
if out.is_sch():
load_sch()
config_output(out)
logger.info('- '+str(out))
GS.current_output = out.name
try:
out.run(get_output_dir(out.dir), board)
out.run(get_output_dir(out.dir))
except PlotError as e:
logger.error("In output `"+str(out)+"`: "+str(e))
exit(PLOT_ERROR)

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2020 Salvador E. Tropea
# Copyright (c) 2020 Instituto Nacional de Tecnología Industrial
# Copyright (c) 2020-2021 Salvador E. Tropea
# Copyright (c) 2020-2021 Instituto Nacional de Tecnología Industrial
# License: GPL-3.0
# Project: KiBot (formerly KiPlot)
import os
@ -102,13 +102,13 @@ class AnyDrill(BaseOptions):
# PTH
return self.pth_id if self.pth_id is not None else d+'_drill'
def run(self, output_dir, board):
def run(self, output_dir):
# dialog_gendrill.cpp:357
if self.use_aux_axis_as_origin:
offset = get_aux_origin(board)
offset = get_aux_origin(GS.board)
else:
offset = wxPoint(0, 0)
drill_writer, ext = self._configure_writer(board, offset)
drill_writer, ext = self._configure_writer(GS.board, offset)
logger.debug("Generating drill files in "+output_dir)
gen_map = self.map is not None

View File

@ -96,10 +96,10 @@ class AnyLayerOptions(VariantOptions):
self.uncross_modules(board, self.comps_hash)
self.restore_paste_and_glue(board, self.comps_hash)
def run(self, output_dir, board, layers):
super().run(output_dir, board)
def run(self, output_dir, layers):
super().run(output_dir)
# fresh plot controller
plot_ctrl = PLOT_CONTROLLER(board)
plot_ctrl = PLOT_CONTROLLER(GS.board)
# set up plot options for the whole output
po = plot_ctrl.GetPlotOptions()
self._configure_plot_ctrl(po, output_dir)
@ -107,10 +107,10 @@ class AnyLayerOptions(VariantOptions):
# We need to assist KiCad
create_job = po.GetCreateGerberJobFile()
if create_job:
jobfile_writer = GERBER_JOBFILE_WRITER(board)
jobfile_writer = GERBER_JOBFILE_WRITER(GS.board)
plot_ctrl.SetColorMode(True)
# Apply the variants and filters
exclude = self.filter_components(board)
exclude = self.filter_components(GS.board)
# Plot every layer in the output
generated = {}
layers = Layer.solve(layers)
@ -179,7 +179,7 @@ class AnyLayerOptions(VariantOptions):
f.write(content)
# Restore the eliminated layers
if exclude:
self.unfilter_components(board)
self.unfilter_components(GS.board)
def read_vals_from_po(self, po):
# excludeedgelayer
@ -213,5 +213,5 @@ class AnyLayer(BaseOutput):
if isinstance(self.layers, type):
raise KiPlotConfigurationError("Missing `layers` list")
def run(self, output_dir, board):
self.options.run(output_dir, board, self.layers)
def run(self, output_dir):
self.options.run(output_dir, self.layers)

View File

@ -55,8 +55,8 @@ class BaseOutput(RegOutput):
# Configure them using an empty tree
self.options.config()
def run(self, output_dir, board):
self.options.run(output_dir, board)
def run(self, output_dir):
self.options.run(output_dir)
class BoMRegex(Optionable):
@ -253,7 +253,7 @@ class VariantOptions(BaseOptions):
for gi in self.old_badhes:
gi.SetLayer(self.badhes)
def run(self, output_dir, board):
def run(self, output_dir):
""" Makes the list of components available """
if not self.dnf_filter and not self.variant:
return

View File

@ -384,7 +384,7 @@ class BoMOptions(BaseOptions):
# This is the ordered list with the case style defined by the user
self.columns = columns
def run(self, output_dir, board):
def run(self, output_dir):
format = self.format.lower()
output = self.expand_filename_sch(output_dir, self.output, 'bom', format)
# Add some info needed for the output to the config object.

View File

@ -104,10 +104,8 @@ class CompressOptions(BaseOptions):
ext += '.'+sub_ext
return ext
def run(self, output_dir, board):
def run(self, output_dir):
# Output file name
logger.debug('output_dir '+output_dir)
logger.debug('GS.out_dir '+GS.out_dir)
output = self.expand_filename(output_dir, self.output, GS.current_output, self.solve_extension())
logger.debug('Collecting files')
output_real = os.path.realpath(output)

View File

@ -89,8 +89,8 @@ class IBoMOptions(VariantOptions):
super().config()
self.netlist_file = self.expand_filename('', self.netlist_file, 'ibom', 'xml')
def run(self, output_dir, board):
super().run(output_dir, board)
def run(self, output_dir):
super().run(output_dir)
check_script(CMD_IBOM, URL_IBOM)
logger.debug('Doing Interactive BoM')
# Tell ibom we don't want to use the screen

View File

@ -355,7 +355,7 @@ class KiBoMOptions(BaseOptions):
self.conf.save(conf)
self.conf = conf
def run(self, output_dir, board):
def run(self, output_dir):
check_script(CMD_KIBOM, URL_KIBOM, '1.8.0')
format = self.format.lower()
prj = GS.sch_no_ext

View File

@ -227,8 +227,8 @@ class PcbDrawOptions(VariantOptions):
cmd.append(svg)
return svg
def run(self, output_dir, board):
super().run(output_dir, board)
def run(self, output_dir):
super().run(output_dir)
check_script(PCBDRAW, URL_PCBDRAW, '0.6.0')
# Output file name
output = self.expand_filename(output_dir, self.output, 'bottom' if self.bottom else 'top', self.format)

View File

@ -85,8 +85,8 @@ class PDF_Pcb_PrintOptions(VariantOptions):
self.restore_paste_and_glue(board, comps_hash)
return fname, fproj
def run(self, output_dir, board, layers):
super().run(board, layers)
def run(self, output_dir, layers):
super().run(layers)
check_script(CMD_PCBNEW_PRINT_LAYERS, URL_PCBNEW_PRINT_LAYERS, '1.5.2')
layers = Layer.solve(layers)
# Output file name
@ -104,7 +104,7 @@ class PDF_Pcb_PrintOptions(VariantOptions):
cmd.append('--separate')
if self.mirror:
cmd.append('--mirror')
board_name, proj_name = self.filter_components(board)
board_name, proj_name = self.filter_components(GS.board)
cmd.extend([board_name, output_dir])
if GS.debug_enabled:
cmd.insert(1, '-vv')
@ -146,5 +146,5 @@ class PDF_Pcb_Print(BaseOutput): # noqa: F821
if isinstance(self.layers, type):
raise KiPlotConfigurationError("Missing `layers` list")
def run(self, output_dir, board):
self.options.run(output_dir, board, self.layers)
def run(self, output_dir):
self.options.run(output_dir, self.layers)

View File

@ -24,8 +24,8 @@ class PDF_Sch_PrintOptions(VariantOptions):
super().__init__()
self.add_to_doc('variant', "Not fitted components are crossed")
def run(self, output_dir, board):
super().run(output_dir, board)
def run(self, output_dir):
super().run(output_dir)
check_eeschema_do()
if self._comps:
# Save it to a temporal dir

View File

@ -87,7 +87,7 @@ class PositionOptions(VariantOptions):
new_columns[new_col] = new_name
self.columns = new_columns
def _do_position_plot_ascii(self, board, output_dir, columns, modulesStr, maxSizes):
def _do_position_plot_ascii(self, output_dir, columns, modulesStr, maxSizes):
topf = None
botf = None
bothf = None
@ -145,7 +145,7 @@ class PositionOptions(VariantOptions):
if bothf is not None:
bothf.close()
def _do_position_plot_csv(self, board, output_dir, columns, modulesStr):
def _do_position_plot_csv(self, output_dir, columns, modulesStr):
topf = None
botf = None
bothf = None
@ -200,8 +200,8 @@ class PositionOptions(VariantOptions):
return PositionOptions.is_pure_smd_5, PositionOptions.is_not_virtual_5
return PositionOptions.is_pure_smd_6, PositionOptions.is_not_virtual_6
def run(self, output_dir, board):
super().run(output_dir, board)
def run(self, output_dir):
super().run(output_dir)
columns = self.columns.values()
# Note: the parser already checked the units are milimeters or inches
conv = 1.0
@ -214,7 +214,7 @@ class PositionOptions(VariantOptions):
modules = []
is_pure_smd, is_not_virtual = self.get_attr_tests()
quote_char = '"' if self.format == 'CSV' else ''
for m in sorted(board.GetModules(), key=lambda c: _ref_key(c.GetReference())):
for m in sorted(GS.board.GetModules(), key=lambda c: _ref_key(c.GetReference())):
ref = m.GetReference()
value = None
# Apply any filter or variant data
@ -265,9 +265,9 @@ class PositionOptions(VariantOptions):
maxlengths.append(max_l)
# Note: the parser already checked the format is ASCII or CSV
if self.format == 'ASCII':
self._do_position_plot_ascii(board, output_dir, columns, modules, maxlengths)
self._do_position_plot_ascii(output_dir, columns, modules, maxlengths)
else: # if self.format == 'CSV':
self._do_position_plot_csv(board, output_dir, columns, modules)
self._do_position_plot_csv(output_dir, columns, modules)
@output_class

View File

@ -12,8 +12,8 @@ class Sch_Variant_Options(VariantOptions):
def __init__(self):
super().__init__()
def run(self, output_dir, board):
super().run(output_dir, board)
def run(self, output_dir):
super().run(output_dir)
# Create the schematic
GS.sch.save_variant(output_dir)

View File

@ -185,8 +185,8 @@ class STEPOptions(VariantOptions):
models.push_front(model)
return fname
def run(self, output_dir, board):
super().run(output_dir, board)
def run(self, output_dir):
super().run(output_dir)
# Output file name
output = self.expand_filename(output_dir, self.output, '3D', 'step')
# Make units explicit

View File

@ -25,8 +25,8 @@ class SVG_Sch_PrintOptions(VariantOptions):
super().__init__()
self.add_to_doc('variant', "Not fitted components are crossed")
def run(self, output_dir, board):
super().run(output_dir, board)
def run(self, output_dir):
super().run(output_dir)
check_eeschema_do()
if self._comps:
# Save it to a temporal dir

View File

@ -72,7 +72,7 @@ def test_pcbdraw_miss_rsvg(caplog, monkeypatch):
o.config()
cov.load()
cov.start()
o.run('', None)
o.run('')
cov.stop()
cov.save()
assert 'using unreliable PNG/JPG' in caplog.text, caplog.text
@ -91,7 +91,7 @@ def test_pcbdraw_miss_convert(caplog, monkeypatch):
o.config()
cov.load()
cov.start()
o.run('', None)
o.run('')
cov.stop()
cov.save()
assert 'using unreliable PNG/JPG' in caplog.text, caplog.text