diff --git a/setup.py b/setup.py index 6bf765c..347e793 100644 --- a/setup.py +++ b/setup.py @@ -34,6 +34,7 @@ setup( entry_points={ "console_scripts": [ "wireviz=wireviz.wv_cli:cli", + "wireviz-qty=wireviz.wv_harness_quantity:qty_multipliers", ], }, classifiers=[ diff --git a/src/wireviz/wv_harness_quantity.py b/src/wireviz/wv_harness_quantity.py new file mode 100644 index 0000000..2e4b316 --- /dev/null +++ b/src/wireviz/wv_harness_quantity.py @@ -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 +