diff options
Diffstat (limited to 'trygvis/eda/cli/eda_rdf.py')
-rw-r--r-- | trygvis/eda/cli/eda_rdf.py | 157 |
1 files changed, 114 insertions, 43 deletions
diff --git a/trygvis/eda/cli/eda_rdf.py b/trygvis/eda/cli/eda_rdf.py index 7bf0934..33018ec 100644 --- a/trygvis/eda/cli/eda_rdf.py +++ b/trygvis/eda/cli/eda_rdf.py @@ -3,44 +3,47 @@ import sys import trygvis.eda.cli as cli -def main(): - parser = argparse.ArgumentParser() +class CliCommand(object): + def __init__(self, key, description): + self.key = key + self.description = description + + +class AddToDb(CliCommand): + def __init__(self): + super().__init__("add-to-db", "Import RDF triplet file to the database") - subparsers = parser.add_subparsers(dest="cmd") + def run(self, argv): + p = argparse.ArgumentParser(prog=self.key, description=self.description) + p.add_argument("files", nargs='*') + args = p.parse_args(argv) - # kicad-* - p = subparsers.add_parser("kicad-bom-to-ttl") - p.add_argument("-o", "--output", required=False) - p.add_argument("-i", "--input", required=False) + from trygvis.eda.cli import add_to_db + add_to_db.run(args.files, args) - # db-* - p = subparsers.add_parser("add-to-db") - p.add_argument("-d", "--db", required=True) - p.add_argument("files", nargs='*') - p = subparsers.add_parser("db-stats") - p.add_argument("-d", "--db", required=True) +class DbStats(CliCommand): + def __init__(self): + super().__init__("db-stats", "Show some statistics about the data in the database") - # digikey-* - p = subparsers.add_parser("digikey-download-for-schematic") - p.add_argument("-d", "--db", required=True) - p.add_argument("--schematic", required=True) + def run(self, argv): + p = argparse.ArgumentParser(prog=self.key, description=self.description) + args = p.parse_args(argv) - p = subparsers.add_parser("digikey-download-attribute-types-for-category") - p.add_argument("-c", "--category", required=True) - p.add_argument("-s", "--sub-category", required=True) - p.add_argument("-o", "--output", required=False) + from trygvis.eda.cli import db_stats + db_stats.run() - # Other - p = subparsers.add_parser("make-bom") - p.add_argument("-d", "--db", required=True) - p.add_argument("--schematic", required=True) - args = parser.parse_args() +class KicadBomToTtl(CliCommand): + def __init__(self): + super().__init__("kicad-bom-to-ttl", "Create RDF triples from a KiCAD BOM.xml file") - cli.init() + def run(self, argv): + p = argparse.ArgumentParser(prog=self.key, description=self.description) + p.add_argument("-o", "--output", required=False) + p.add_argument("-i", "--input", required=False) + args = p.parse_args(argv) - if args.cmd == "kicad-bom-to-ttl": from trygvis.eda.cli import kicad_bom_to_ttl if args.input is not None: @@ -56,24 +59,92 @@ def main(): with src, dst: kicad_bom_to_ttl.run(src, dst, args) - elif args.cmd == "add-to-db": - from trygvis.eda.cli import add_to_db - - add_to_db.run(args.files, args.db, args) - elif args.cmd == "db-stats": - from trygvis.eda.cli import db_stats - db_stats.run(args.db) +class DigikeyDownloadForSchematic(CliCommand): + def __init__(self): + super().__init__("digikey-download-for-schematic", "Download missing data from digikey.com") - elif args.cmd == "make-bom": - from trygvis.eda.cli import make_bom - make_bom.run(args.schematic, args.db) + def run(self, argv): + p = argparse.ArgumentParser(prog=self.key, description=self.description) + p.add_argument("--schematic", required=True) + args = p.parse_args(argv) - elif args.cmd == "digikey-download-for-schematic": from trygvis.eda.cli import digikey_download_for_schematic - digikey_download_for_schematic.run(args.schematic, args.db, args) - elif args.cmd == "digikey-download-attribute-types-for-category": + digikey_download_for_schematic.run(args.schematic, args) + + +class DigikeyDownloadAttributeTypesForCategory(CliCommand): + def __init__(self): + super().__init__("digikey-download-attribute-types-for-category", "Download the attribute types for a category from digikey.com") + + def run(self, argv): + p = argparse.ArgumentParser(prog=self.key, description=self.description) + p.add_argument("-c", "--category", required=True) + p.add_argument("-s", "--sub-category", required=True) + p.add_argument("-o", "--output", required=False) + args = p.parse_args(argv) + from trygvis.eda.cli import digikey_download_attribute_types_for_category digikey_download_attribute_types_for_category.run(args.category, args.sub_category, args.output, args) - else: - sys.exit("Unknown command: %s" % args.cmd) + +class MakeBom(CliCommand): + def __init__(self): + super().__init__("make-bom", "Create a BOM for a project with all info for each part.") + + def run(self, argv): + p = argparse.ArgumentParser(prog=self.key, description=self.description) + p.add_argument("--schematic", required=True) + args = p.parse_args(argv) + + from trygvis.eda.cli import make_bom + make_bom.run(args.schematic) + + +class Init(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") + args = p.parse_args(argv) + + from trygvis.eda.cli import init + init.run(args) + + +def main(): + cli.initialize() + + commands = [ + AddToDb(), + Init(), + DbStats(), + MakeBom(), + KicadBomToTtl(), + DigikeyDownloadForSchematic(), + DigikeyDownloadAttributeTypesForCategory(), + ] + + parser = argparse.ArgumentParser( + description='EDA RFD tools', + usage="""eda-rdf <command> [<args>] + +Available commands + +""" + "\n".join([" %-50s %s" % (cmd.key, cmd.description) for cmd in commands])) + parser.add_argument('command', help='Subcommand to run', nargs='?') + args = parser.parse_args(sys.argv[1:2]) + cmd_args = sys.argv[2:] + + if args.command is None: + print(parser.usage) + print() + sys.exit(1) + + for cmd in commands: + if cmd.key == args.command: + cmd.run(cmd_args) + return + + print("Unknown command: %s" % args.command) |