partsdb

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

commit d9774f60bdf5db9b0ef676758237e2f36f0393c9
parent 0dc43f4e0b7574e0f63b4648379b61efe8b6684f
Author: Paco Esteban <paco@e1e0.net>
Date:   Mon,  9 Oct 2023 19:28:23 +0200

add hex IDs to parts

I plan to include those on the parts labels so they are easier to locate
on boxes with dozens of labels.  I could also change the `pn` field to
be this really.  It would be like my internal part number and I would
keep the `mpn` for the thing that comes from the manufacturer/octopart
API.  Will think about it.

Diffstat:
Mpartsdb/exports/__init__.py | 37++++++++++++++++++-------------------
Mpartsdb/exports/templates/part.html | 2+-
Mpartsdb/helpers.py | 5+++--
Mpartsdb/partsdb.py | 11+++++++----
4 files changed, 29 insertions(+), 26 deletions(-)

diff --git a/partsdb/exports/__init__.py b/partsdb/exports/__init__.py @@ -40,29 +40,28 @@ def export_to_html(dest_folder): def export_to_excel(dest_folder="."): + storages = db.get_storages() + _create_excel(storages, "storage", f"{dest_folder}/storages.xlsx") + + parts = db.list_parts() + _create_excel(parts, "part", f"{dest_folder}/parts.xlsx") + + +def _create_excel(data, data_type, filename): workbook = Workbook() sheet = workbook.active - sheet["A1"] = "Name" - sheet["B1"] = "URL" + sheet["A1"] = "ID" + sheet["B1"] = "Name" + sheet["C1"] = "URL" a = 2 - storages = db.get_storages() - for s in storages: - url = f"{BASE_URL}/storage_{s[0]}.html" - name = s[1] - sheet.cell(row=a, column=1).value = name - sheet.cell(row=a, column=2).value = url - a += 1 - - workbook.save(filename=f"{dest_folder}/locations.xlsx") - - parts = db.list_parts() - for p in parts: - url = f"{BASE_URL}/part_{p[0]}.html" - name = p[1] - sheet.cell(row=a, column=1).value = name - sheet.cell(row=a, column=2).value = url + for d in data: + url = f"{BASE_URL}/{data_type}_{d[0]}.html" + name = d[1] + sheet.cell(row=a, column=1).value = f"{d[0]:04X}" + sheet.cell(row=a, column=2).value = name + sheet.cell(row=a, column=3).value = url a += 1 - workbook.save(filename=f"{dest_folder}/parts.xlsx") + workbook.save(filename=filename) diff --git a/partsdb/exports/templates/part.html b/partsdb/exports/templates/part.html @@ -18,7 +18,7 @@ <table> <tbody> <tr> - <td><span class="field">Id:</span> {{ part.id }}</td> + <td><span class="field">Id:</span> {{ part.id }} ({{ '%04X' % part.id }})</td> <td><span class="field">PN:</span> {{ part.pn }} / <span class="field">MPN:</span> {{ part.mpn }}</td> <td><span class="field">Manufacturer:</span> {{ part.manufacturer }}</td> </tr> diff --git a/partsdb/helpers.py b/partsdb/helpers.py @@ -36,7 +36,7 @@ def _list_ascii(parts): l_desc = l_desc if l_desc > len("Description") else len("Description") header = ( - f"| {'ID':5} | {'PN':{l_pn}} | " + f"| {'ID':11} | {'PN':{l_pn}} | " f"{'Category':{l_cat}} | " f"{'Manufacturer':{l_man}} | " f"{'Description':{l_desc}} | " @@ -50,7 +50,7 @@ def _list_ascii(parts): print(header) print("-" * len(header)) print( - f"| {p['id']:<5} | {p['pn']:{l_pn}} | " + f"| {p['id']:<4} ({p['id']:04X}) | {p['pn']:{l_pn}} | " f"{p['cname']:{l_cat}} | " f"{_sanitize_value(p['manufacturer']):{l_man}} | " f"{_sanitize_value(p['description']):{l_desc}} | " @@ -95,6 +95,7 @@ def print_part(p, history, output="full"): def _part_ascii(p, history): + print(f"Part id: {p['id']} ({p['id']:04X})") print(f"PN: {p['pn']}\tManufacturer: {p['manufacturer']}\tMPN: {p['mpn']}") print( f"Category: {p['cat']}\tType: {p['part_type']}" f"\tFootprint: {p['footprint']}" diff --git a/partsdb/partsdb.py b/partsdb/partsdb.py @@ -284,7 +284,7 @@ def main(): ) # get ap_get = asp.add_parser("get", help="Get all details for a part") - ap_get.add_argument("part_id", help="Part Id", type=int) + ap_get.add_argument("part_id", help="Part Id") ap_get.add_argument( "-d", dest="datasheet", action="store_true", help="Open datasheet if available." ) @@ -300,7 +300,7 @@ def main(): ) # delete ap_delete = asp.add_parser("delete", help="Delete a part") - ap_delete.add_argument("part_id", help="Part Id", type=int) + ap_delete.add_argument("part_id", help="Part Id") # update ap_update = asp.add_parser( "update", @@ -308,10 +308,10 @@ def main(): ) 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", type=int) + 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", type=int) + 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 @@ -329,6 +329,9 @@ def main(): ap.print_help() sys.exit(0) + 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":