partsdb

electronic parts inventory
git clone https://git.e1e0.net/partsdb.git
Log | Files | Refs | README | LICENSE

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:
Mpartsdb/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()