import pathlib from iottb.definitions import DEVICE_METADATA_FILE from iottb.models.device_metadata_model import DeviceMetadata def setup_init_iottb_root_parser(subparsers): parser = subparsers.add_parser("init", aliases=["idr"]) parser.add_argument("--root_dir", type=pathlib.Path, default=pathlib.Path.cwd()) group = parser.add_mutually_exclusive_group() group.add_argument("--dynamic", action="store_true", help="enable guided setup", default=False) group.add_argument("-n", "--name", action="store", type=str, help="name of device") parser.set_defaults(func=handle_idr) def handle_idr(args): print("Entered iottb initialize-device-root") root_dir = args.root_dir device_name = None if args.dynamic: response = "N" while response == "N": name = input("Please enter name of device: ") # TODO extended config for other fields like apps, firmware etc. response = input(f"Confirm device name: {name} [y/N]") device_name = name else: device_name = args.name root_dir.mkdir(parents=True, exist_ok=True) root_dir.chdir() dev_metadata_model = DeviceMetadata(device_name) file_path = root_dir / device_name / DEVICE_METADATA_FILE assert not file_path.exists(), f"{file_path} already exists" if args.dynamic: response = input(f"Confirm device metadata: {dev_metadata_model.model_dump()} [y/N]") if response.lower() != "y": assert False, "TODO implement dynamic setup" code = dev_metadata_model.save_to_json(file_path) print(f"Device metadata saved to {file_path}") return code