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:
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":