commit d1debd4ff086b12a77ac663d5bad8d627c921850
parent f1fef869381314bc0741a8df3e145a3f0379aa47
Author: Paco Esteban <paco@e1e0.net>
Date: Mon, 16 Oct 2023 17:03:17 +0200
reorganize ui, hopefully more intuitive and consistent
Diffstat:
M | partsdb/partsdb.py | | | 192 | ++++++++++++++++++++++++++++++++++++++++++++++--------------------------------- |
1 file changed, 113 insertions(+), 79 deletions(-)
diff --git a/partsdb/partsdb.py b/partsdb/partsdb.py
@@ -248,87 +248,112 @@ def list_storages():
def main():
ap = argparse.ArgumentParser()
+ # global options here
ap.add_argument(
"--version", "-v", action="version", version="%(prog)s " + __version__
)
- # Place for global options here
- # parser.add_argument(...)
- # And then the commands
+ # commands
asp = ap.add_subparsers(dest="command")
- # add
- ap_add = asp.add_parser("add", help="Add new part from Octopart")
- ap_add.add_argument("mpn", help="Manufacturer part number")
- ap_add.add_argument("-q", dest="quantity", help="Quantity of new items", type=int)
- ap_add.add_argument(
+ ## part
+ ap_part = asp.add_parser("part", help="Interact with parts.")
+ part_sp = ap_part.add_subparsers(dest="subcommand")
+ ### part -> add
+ ap_part_add = part_sp.add_parser("add", help="Add new part from Octopart")
+ ap_part_add.add_argument("mpn", help="Manufacturer part number")
+ ap_part_add.add_argument(
+ "-q", dest="quantity", help="Quantity of new items", type=int
+ )
+ ap_part_add.add_argument(
"-c", dest="category", help="Which categoryId it belongs to", type=int
)
- ap_add.add_argument(
+ ap_part_add.add_argument(
"-s", dest="storage", help="Which storageId it belongs to", type=int
)
- ap_add.add_argument(
+ ap_part_add.add_argument(
"-t",
dest="type",
choices=["smd", "th"],
default="none",
help="Trhough-hole of smd ?",
)
- # cat
- asp.add_parser("cat", help="List categories")
- # sto
- asp.add_parser("sto", help="List storages")
- # list
- ap_list = asp.add_parser("list", help="List all parts from a category (or all)")
- ap_list.add_argument("category", help="Category Name or ID")
- ap_list.add_argument(
+ ### part -> del (delete)
+ ap_part_del = part_sp.add_parser("del", help="Delete a part")
+ ap_part_del.add_argument("part_id", help="Part Id")
+ ### part -> get
+ ap_part_get = part_sp.add_parser("get", help="Get all details of a part")
+ ap_part_get.add_argument("part_id", help="Part Id")
+ ap_part_get.add_argument(
+ "-d", dest="datasheet", action="store_true", help="Open datasheet if available."
+ )
+ ap_part_get.add_argument(
+ "-i", dest="image", action="store_true", help="Open image if available."
+ )
+ ap_part_get.add_argument(
"-o",
dest="output",
- choices=["full", "short", "json"],
+ choices=["full", "json"],
default="full",
help="Short output",
)
- # search
- ap_search = asp.add_parser("search", help="Search for parts")
- ap_search.add_argument("search_term", help="Term to search for")
- ap_search.add_argument(
+ ### part -> list
+ ap_part_list = part_sp.add_parser("ls", help="List parts")
+ ap_part_list.add_argument(
+ "-c", "--category", default="all", help="Category Name or ID"
+ )
+ ap_part_list.add_argument(
"-o",
dest="output",
choices=["full", "short", "json"],
default="full",
help="Short output",
)
- # get
- ap_get = asp.add_parser("get", help="Get all details for a part")
- ap_get.add_argument("part_id", help="Part Id")
- ap_get.add_argument(
- "-d", dest="datasheet", action="store_true", help="Open datasheet if available."
- )
- ap_get.add_argument(
- "-i", dest="image", action="store_true", help="Open image if available."
- )
- ap_get.add_argument(
+ ### part -> search
+ ap_part_search = part_sp.add_parser("search", help="Search parts")
+ ap_part_search.add_argument("search_term", help="Term to search for")
+ ap_part_search.add_argument(
"-o",
dest="output",
- choices=["full", "json"],
+ choices=["full", "short", "json"],
default="full",
help="Short output",
)
- # delete
- ap_delete = asp.add_parser("delete", help="Delete a part")
- ap_delete.add_argument("part_id", help="Part Id")
- # update
- ap_update = asp.add_parser(
+ ### part -> stock
+ ap_part_stock = part_sp.add_parser("stock", help="Modifies a part stock")
+ ap_part_stock.add_argument("part_id", help="Part Id")
+ ap_part_stock.add_argument(
+ "stock_mod", help="Stock modifier (+ or -) int", type=int
+ )
+ ap_part_stock.add_argument("comment", help="Reason for the stock mod")
+ ### part -> update
+ ap_part_update = part_sp.add_parser(
"update",
help="update a part. Will launch $EDITOR with a YAML dump of the part",
)
- ap_update.add_argument("-d", dest="datasheet", help="Datasheet file to update")
- ap_update.add_argument("-i", dest="image", help="Image file to update")
- ap_update.add_argument("part_id", help="Part Id")
- # stock
- ap_stock = asp.add_parser("stock", help="Modifies a part stock")
- ap_stock.add_argument("part_id", help="Part Id")
- ap_stock.add_argument("stock_mod", help="Stock modifier (+ or -) int", type=int)
- ap_stock.add_argument("comment", help="Reason for the stock mod")
- # export
+ ap_part_update.add_argument("-d", dest="datasheet", help="Datasheet file to update")
+ ap_part_update.add_argument("-i", dest="image", help="Image file to update")
+ ap_part_update.add_argument("part_id", help="Part Id")
+ ## cat (categories)
+ ap_cat = asp.add_parser("cat", help="Interact with categories.")
+ cat_sp = ap_cat.add_subparsers(dest="subcommand")
+ ### cat -> list
+ cat_sp.add_parser("ls", help="List categories")
+ ### cat -> new
+ ap_cat_new = cat_sp.add_parser("new", help="Add a new category")
+ ap_cat_new.add_argument("cat_name", help="New category name")
+ ## sto (storages)
+ ap_sto = asp.add_parser("sto", help="Interact with storages.")
+ sto_sp = ap_sto.add_subparsers(dest="subcommand")
+ ### sto -> del
+ ap_sto_del = sto_sp.add_parser(
+ "del", help="Delete a storage. All affected parts will be put into Unsorted"
+ )
+ ap_sto_del.add_argument("sto_id", help="Storage ID to delete name")
+ ### sto -> list
+ sto_sp.add_parser("ls", help="List storages")
+ ### sto -> new
+ ap_sto_new = sto_sp.add_parser("new", help="Add a new storage")
+ ap_sto_new.add_argument("sto_name", help="New storage name")
+ ## export
ap_export = asp.add_parser("export", help="Exports DB to HTML")
ap_export.add_argument(
"-x",
@@ -353,41 +378,50 @@ def main():
if "part_id" in vars(args).keys():
args.part_id = int(args.part_id, 0)
- if args.command == "add":
- add_part(args.mpn, args.quantity, args.category, args.storage, args.type)
- elif args.command == "list":
- list_parts(args.category, args.output)
- elif args.command == "search":
- search_part(args.search_term, args.output)
- elif args.command == "get":
- get_part(args.part_id, args.output)
- if args.datasheet and args.output != "json":
- open_datasheet(args.part_id)
- if args.image and args.output != "json":
- open_image(args.part_id)
- elif args.command == "delete":
- delete_part(args.part_id)
- elif args.command == "update":
- if args.datasheet:
- update_datasheet(args.part_id, args.datasheet)
- elif args.image:
- update_image(args.part_id, args.image)
- else:
- update_part(args.part_id)
- elif args.command == "stock":
- adjust_stock(args.part_id, args.stock_mod, args.comment)
- elif args.command == "export":
+ if args.command == "part":
+ if args.subcommand == "add":
+ add_part(args.mpn, args.quantity, args.category, args.storage, args.type)
+ elif args.subcommand == "del":
+ delete_part(args.part_id)
+ elif args.subcommand == "get":
+ get_part(args.part_id, args.output)
+ if args.datasheet and args.output != "json":
+ open_datasheet(args.part_id)
+ if args.image and args.output != "json":
+ open_image(args.part_id)
+ elif args.subcommand == "ls":
+ list_parts(args.category, args.output)
+ elif args.subcommand == "search":
+ search_part(args.search_term, args.output)
+ elif args.subcommand == "stock":
+ adjust_stock(args.part_id, args.stock_mod, args.comment)
+ elif args.subcommand == "update":
+ if args.datasheet:
+ update_datasheet(args.part_id, args.datasheet)
+ elif args.image:
+ update_image(args.part_id, args.image)
+ else:
+ update_part(args.part_id)
+
+ if args.command == "cat":
+ if args.subcommand == "ls":
+ list_categories()
+ elif args.subcommand == "new":
+ pass
+
+ if args.command == "sto":
+ if args.subcommand == "ls":
+ list_storages()
+ elif args.subcommand == "del":
+ pass
+ elif args.subcommand == "new":
+ pass
+
+ if args.command == "export":
if args.to_excel:
exports.export_to_excel(args.dest_folder, args.sto_id)
else:
exports.export_to_html(args.dest_folder)
- elif args.command == "cat":
- list_categories()
- elif args.command == "sto":
- list_storages()
- else:
- ap.print_help()
- sys.exit(0)
db.close()