partsdb

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

__init__.py (2272B)


      1 import os
      2 from jinja2 import Environment, PackageLoader, select_autoescape
      3 from openpyxl import Workbook
      4 
      5 from partsdb import database as pdb
      6 from partsdb import helpers
      7 
      8 
      9 BASE_URL = "https://e1e0.net/partsdb"
     10 
     11 db = pdb.PartsDB(
     12     os.getenv("PARTSDB_FILE", f"{os.getenv('HOME')}/.local/share/partsdb/parts.db")
     13 )
     14 
     15 
     16 def export_to_html(dest_folder):
     17     env = Environment(
     18         loader=PackageLoader("partsdb.exports", "templates"),
     19         autoescape=select_autoescape(["html", "xml"]),
     20     )
     21     categories = db.get_categories()
     22     storages = db.get_storages()
     23     helpers.html_main_index(dest_folder, categories, storages, env)
     24     for s in categories:
     25         parts = db.list_parts_by_category(s["name"])
     26         helpers.html_category_index(dest_folder, s, parts, env)
     27     for s in storages:
     28         parts = db.list_parts_by_storage(s["name"])
     29         helpers.html_storage_index(dest_folder, s, parts, env)
     30     parts = db.list_parts()
     31     for p in parts:
     32         part = db.get_part(p["id"])
     33         history = db.get_part_history(p["id"])
     34         helpers.html_part(dest_folder, part, history, env)
     35         image = db.get_image(p["id"])
     36         datasheet = db.get_datasheet(p["id"])
     37         helpers.html_attachments(dest_folder, p["id"], datasheet, image)
     38     helpers.html_css(dest_folder, env)
     39     helpers.html_aux_files(dest_folder)
     40 
     41 
     42 def export_to_excel(dest_folder=".", storage_id=0):
     43     if storage_id == 0:
     44         storages = db.get_storages()
     45         _create_excel(storages, "storage", f"{dest_folder}/storages.xlsx")
     46         parts = db.list_parts()
     47         part_filename = "parts_all"
     48     else:
     49         parts = db.list_parts_by_storage(storage_id)
     50         part_filename = f"parts_sto_{storage_id}"
     51 
     52     _create_excel(parts, "part", f"{dest_folder}/{part_filename}.xlsx")
     53 
     54 
     55 def _create_excel(data, data_type, filename):
     56     workbook = Workbook()
     57     sheet = workbook.active
     58 
     59     sheet["A1"] = "PN/ID"
     60     sheet["B1"] = "Name"
     61     sheet["C1"] = "URL"
     62     a = 2
     63 
     64     for d in data:
     65         url = f"{BASE_URL}/{data_type}_{d[0]}.html"
     66         name = d[1]
     67         sheet.cell(row=a, column=1).value = f"{d[0]:04X}"
     68         sheet.cell(row=a, column=2).value = name
     69         sheet.cell(row=a, column=3).value = url
     70         a += 1
     71 
     72     workbook.save(filename=filename)