Added support for kicad-automation-tools v1.4.0 DRC/ERC filters
This commit is contained in:
parent
9e3865d881
commit
c390ec3cb8
|
|
@ -537,6 +537,26 @@ class CfgYamlReader(CfgReader):
|
|||
|
||||
return o_cfg
|
||||
|
||||
def _parse_filters(self, filters, cfg):
|
||||
for filter in filters:
|
||||
if 'filter' in filter:
|
||||
comment = filter['filter']
|
||||
if 'number' in filter:
|
||||
number = filter['number']
|
||||
if number is None:
|
||||
config_error("empty 'number' in 'filter' definition ("+str(filter)+")")
|
||||
else:
|
||||
config_error("missing 'number' for 'filter' definition ("+str(filter)+")")
|
||||
if 'regex' in filter:
|
||||
regex = filter['regex']
|
||||
if regex is None:
|
||||
config_error("empty 'regex' in 'filter' definition ("+str(filter)+")")
|
||||
else:
|
||||
config_error("missing 'regex' for 'filter' definition ("+str(filter)+")")
|
||||
cfg.add_filter(comment, number, regex)
|
||||
else:
|
||||
config_error("'filters' section of 'preflight' must contain 'filter' definitions (not "+str(filter)+")")
|
||||
|
||||
def _parse_preflight(self, pf, cfg):
|
||||
|
||||
logger.debug("Parsing preflight options: {}".format(pf))
|
||||
|
|
@ -556,6 +576,9 @@ class CfgYamlReader(CfgReader):
|
|||
if 'ignore_unconnected' in pf:
|
||||
cfg.ignore_unconnected = pf['ignore_unconnected']
|
||||
|
||||
if 'filters' in pf:
|
||||
self._parse_filters(pf['filters'], cfg)
|
||||
|
||||
def read(self, fstream):
|
||||
"""
|
||||
Read a file object into a config object
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ def check_script(cmd, url, version=None):
|
|||
|
||||
|
||||
def check_eeschema_do(file):
|
||||
check_script(misc.CMD_EESCHEMA_DO, misc.URL_EESCHEMA_DO, '1.1.1')
|
||||
check_script(misc.CMD_EESCHEMA_DO, misc.URL_EESCHEMA_DO, '1.4.0')
|
||||
sch_file = os.path.splitext(file)[0] + '.sch'
|
||||
if not os.path.isfile(sch_file):
|
||||
logger.error('Missing schematic file: ' + sch_file)
|
||||
|
|
@ -157,17 +157,26 @@ class Plotter(object):
|
|||
else:
|
||||
logger.error('Unknown action to skip: '+skip)
|
||||
exit(misc.EXIT_BAD_ARGS)
|
||||
# Create the filters file
|
||||
filter_file = None
|
||||
if (self.cfg.run_erc or self.cfg.run_drc) and self.cfg.filters:
|
||||
filter_file = os.path.join(self.cfg.outdir, 'kiplot_errors.filter')
|
||||
with open(filter_file, 'w') as f:
|
||||
f.write(self.cfg.filters)
|
||||
if self.cfg.run_erc:
|
||||
self._run_erc(brd_file)
|
||||
self._run_erc(brd_file, filter_file)
|
||||
if self.cfg.update_xml:
|
||||
self._update_xml(brd_file)
|
||||
if self.cfg.run_drc:
|
||||
self._run_drc(brd_file, self.cfg.ignore_unconnected,
|
||||
self.cfg.check_zone_fills)
|
||||
self.cfg.check_zone_fills, filter_file)
|
||||
|
||||
def _run_erc(self, brd_file):
|
||||
def _run_erc(self, brd_file, filter_file):
|
||||
sch_file = check_eeschema_do(brd_file)
|
||||
cmd = [misc.CMD_EESCHEMA_DO, 'run_erc', sch_file, self.cfg.outdir]
|
||||
cmd = [misc.CMD_EESCHEMA_DO, 'run_erc']
|
||||
if filter_file:
|
||||
cmd.extend(['-f', filter_file])
|
||||
cmd.extend([sch_file, self.cfg.outdir])
|
||||
# If we are in verbose mode enable debug in the child
|
||||
if logger.getEffectiveLevel() <= logging.DEBUG:
|
||||
cmd.insert(1, '-vv')
|
||||
|
|
@ -196,9 +205,12 @@ class Plotter(object):
|
|||
logger.error('Failed to update the BoM, error %d', ret)
|
||||
exit(misc.BOM_ERROR)
|
||||
|
||||
def _run_drc(self, brd_file, ignore_unconnected, check_zone_fills):
|
||||
check_script(misc.CMD_PCBNEW_RUN_DRC, misc.URL_PCBNEW_RUN_DRC, '1.3.1')
|
||||
cmd = [misc.CMD_PCBNEW_RUN_DRC, 'run_drc', brd_file, self.cfg.outdir]
|
||||
def _run_drc(self, brd_file, ignore_unconnected, check_zone_fills, filter_file):
|
||||
check_script(misc.CMD_PCBNEW_RUN_DRC, misc.URL_PCBNEW_RUN_DRC, '1.4.0')
|
||||
cmd = [misc.CMD_PCBNEW_RUN_DRC, 'run_drc']
|
||||
if filter_file:
|
||||
cmd.extend(['-f', filter_file])
|
||||
cmd.extend([brd_file, self.cfg.outdir])
|
||||
# If we are in verbose mode enable debug in the child
|
||||
if logger.getEffectiveLevel() <= logging.DEBUG:
|
||||
cmd.insert(1, '-vv')
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
import pcbnew
|
||||
|
||||
from . import error
|
||||
from . import log
|
||||
|
||||
logger = log.get_logger(__name__)
|
||||
|
||||
|
||||
class KiPlotConfigurationError(error.KiPlotError):
|
||||
|
|
@ -504,10 +507,19 @@ class PlotConfig(object):
|
|||
self.update_xml = False
|
||||
self.ignore_unconnected = False
|
||||
self.run_erc = False
|
||||
self.filters = None
|
||||
|
||||
def add_output(self, new_op):
|
||||
self._outputs.append(new_op)
|
||||
|
||||
def add_filter(self, comment, number, regex):
|
||||
logger.debug("Adding DRC/ERC filter '{}','{}','{}'".format(comment, number, regex))
|
||||
if self.filters is None:
|
||||
self.filters = ''
|
||||
if comment:
|
||||
self.filters += '# '+comment+'\n'
|
||||
self.filters += '{},{}\n'.format(number, regex)
|
||||
|
||||
def validate(self):
|
||||
errs = []
|
||||
for o in self._outputs:
|
||||
|
|
|
|||
Loading…
Reference in New Issue