#!/usr/bin/python3 from __future__ import absolute_import import argparse import os import sys # Add ../ to the path # Works if this script is executed without installing the module script_dir = os.path.dirname(os.path.abspath(os.path.realpath(__file__))) sys.path.insert(0, os.path.dirname(script_dir)) # Pretend we are part of a module # Avoids: ImportError: attempted relative import with no known parent package __package__ = os.path.basename(script_dir) __import__(__package__) # python 2 and 3 compatibility hack def to_utf(s): if isinstance(s, bytes): return s.decode('utf-8') else: return s def main(): create_wx_app = 'INTERACTIVE_HTML_BOM_NO_DISPLAY' not in os.environ import wx if create_wx_app: app = wx.App() if hasattr(wx, "APP_ASSERT_SUPPRESS"): app.SetAssertMode(wx.APP_ASSERT_SUPPRESS) elif hasattr(wx, "DisableAsserts"): wx.DisableAsserts() from .core import ibom from .core.config import Config from .ecad import get_parser_by_extension from .version import version from .errors import (ExitCodes, ParsingException, exit_error) parser = argparse.ArgumentParser( description='KiCad InteractiveHtmlBom plugin CLI.', formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('file', type=lambda s: to_utf(s), help="KiCad PCB file") Config.add_options(parser, version) args = parser.parse_args() logger = ibom.Logger(cli=True) if not os.path.isfile(args.file): exit_error(logger, ExitCodes.ERROR_FILE_NOT_FOUND, "File %s does not exist." % args.file) print("Loading %s" % args.file) config = Config(version, os.path.dirname(os.path.abspath(args.file))) parser = get_parser_by_extension( os.path.abspath(args.file), config, logger) if args.show_dialog: if not create_wx_app: exit_error(logger, ExitCodes.ERROR_NO_DISPLAY, "Can not show dialog when " "INTERACTIVE_HTML_BOM_NO_DISPLAY is set.") try: ibom.run_with_dialog(parser, config, logger) except ParsingException as e: exit_error(logger, ExitCodes.ERROR_PARSE, e) else: config.set_from_args(args) try: ibom.main(parser, config, logger) except ParsingException as e: exit_error(logger, ExitCodes.ERROR_PARSE, str(e)) return 0 if __name__ == "__main__": main()