src: wv_harness_quantity: add support for harness quantity multipliers

This commit is contained in:
Laurier Loiselle 2023-03-29 11:52:54 -04:00
parent 3d2c8c10db
commit c31ef661dc
No known key found for this signature in database
GPG Key ID: 345920CC72089A3F
2 changed files with 86 additions and 0 deletions

View File

@ -34,6 +34,7 @@ setup(
entry_points={ entry_points={
"console_scripts": [ "console_scripts": [
"wireviz=wireviz.wv_cli:cli", "wireviz=wireviz.wv_cli:cli",
"wireviz-qty=wireviz.wv_harness_quantity:qty_multipliers",
], ],
}, },
classifiers=[ classifiers=[

View File

@ -0,0 +1,85 @@
from pathlib import Path
import click
import json
import logging
class HarnessQuantity():
def __init__(self, harnesses, multiplier_file="quantity_multipliers.txt", output_dir=None):
self.harness_names = [harness.stem for harness in harnesses]
self.multipliers = {}
self.folder = output_dir if output_dir is not None else harnesses[0].parent
self.qty_multipliers = self.folder / multiplier_file
def __getitem__(self, harness):
return self.multipliers[harness]
def fetch_qty_multipliers_from_file(self):
if self.qty_multipliers.is_file():
with open(self.qty_multipliers, 'r') as f:
try:
self.multipliers = json.load(f)
except json.decoder.JSONDecodeError as err:
raise ValueError(f'Invalid format for file {self.qty_multipliers}, error: {err}')
else:
self.get_qty_multipliers_from_user()
self.save_qty_multipliers_to_file()
self.check_all_multipliers_defined()
def check_all_multipliers_defined(self):
for name in self.harness_names:
assert name in self.multipliers
def get_qty_multipliers_from_user(self):
for name in self.harness_names:
try:
self.multipliers[name] = int(input("Quantity multiplier for {}? ".format(name)))
except ValueError:
logging.warning("Quantity multiplier must be an integer!")
break
def save_qty_multipliers_to_file(self):
with open(self.qty_multipliers,"w") as f:
json.dump(self.multipliers, f)
def retrieve_harness_qty_multiplier(self, bom_file):
return int(self[Path(Path(bom_file).stem).stem])
@click.command(no_args_is_help=True)
@click.argument(
"files",
type=click.Path(
exists=True,
readable=True,
dir_okay=False,
path_type=Path,
),
nargs=-1,
required=True,
)
@click.option(
"-m",
"--multiplier-file-name",
default='quantity_multipliers.txt',
type=str,
help="name of file used to fetch or save the qty_multipliers",
)
@click.option(
"-f",
"--force-new",
is_flag=True,
type=bool,
help="if set, will always ask for new multipliers",
)
def qty_multipliers(files, multiplier_file_name, force_new):
harnesses = HarnessQuantity(files, multiplier_file_name)
if force_new:
harnesses.qty_multipliers.unlink(missing_ok=True)
harnesses.fetch_qty_multipliers_from_file()
qty_multipliers = harnesses.multipliers
return