import argparse from os.path import isdir from os import mkdir from sys import exit import glob import configparser from trygvis.eda import cli from trygvis.eda.cli import CliException, CliCommand from trygvis.eda.kicad.export import * class InitCommand(CliCommand): def __init__(self): super().__init__("init", "Initialize a EDA-RFD database") def run(self, argv): p = argparse.ArgumentParser(prog=self.key, description=self.description) p.add_argument("--database-url", dest="database_url") p.add_argument("--database-update-url", dest="database_update_url") p.add_argument("--project-file", dest="project_file", required=False) p.add_argument("--project-url", dest="project_url", required=False) args = p.parse_args(argv) run(args) def load_from_kicad_project(args, config: configparser.ConfigParser): project_file = args.project_file if project_file is None: for path in glob.glob('*.pro'): if project_file is not None: raise CliException("Found more than one project file in directly, use --project to specify which one " "you want") project_file = path if project_file is None: raise CliException("Could not find any KiCAD projects (.pro files) in the current directly.") project_url = args.project_url if project_url is None: project_url = os.path.basename(project_file) (project_url, _) = os.path.splitext(project_url) if not project_url.startswith('http'): project_url = quote_plus(project_url) project_url = kicad_rdf.KICAD_BOARD[project_url] cli.info("EDA-RDF project initialized with Project url: %s" % project_url) config['project']['file'] = project_file config['project']['url'] = project_url def run(args): try: mkdir('.eda-rdf') except FileExistsError: if isdir('.eda-rdf'): cli.info('Already initialized') else: cli.info('.eda-rdf exists, but is not a directory') exit(1) config = configparser.ConfigParser() # KiCAD is all that is supported for now config['project'] = { "type": "kicad" } load_from_kicad_project(args, config) config['db'] = { "type": "local" } if args.database_url is not None: config["db"]["type"] = "sparql" config["db"]["url"] = args.database_url if args.database_update_url is not None: config["db"]["update-url"] = args.database_update_url cli.write_config(config)