import pathlib from iottb import definitions from iottb.definitions import DEVICE_METADATA_FILE, ReturnCodes from iottb.logger import logger from iottb.models.device_metadata_model import DeviceMetadata from iottb.utils.device_metadata_utils import * def setup_init_device_root_parser(subparsers): parser = subparsers.add_parser("add-device", aliases=["add-device-root", "add"]) parser.add_argument("--root_dir", type=pathlib.Path, default=pathlib.Path.cwd()) group = parser.add_mutually_exclusive_group() group.add_argument("--guided", action="store_true", help="Guided setup", default=False) group.add_argument("--name", action="store", type=str, help="name of device") parser.set_defaults(func=handle_add) def handle_add(args): logger.info(f"Add device handler called with args {args}") args.root_dir.mkdir(parents=True, exist_ok=True) # else metadata.save_to_file will fail TODO: unclear what to assume if args.guided: logger.debug("begin guided setup") metadata = guided_setup(args.root_dir) logger.debug("guided setup complete") else: logger.debug("Setup through passed args: setup") if not args.name: logger.error("No device name specified with unguided setup.") return ReturnCodes.ERROR metadata = DeviceMetadata(args.name, args.root_dir) file_path = args.root_dir / DEVICE_METADATA_FILE if file_path.exists(): print("Directory already contains a metadata file. Aborting.") return ReturnCodes.ABORTED serialized_metadata = metadata.to_json() response = input(f"Confirm device metadata: {serialized_metadata} [y/N]") logger.debug(f"response: {response}") if response not in definitions.AFFIRMATIVE_USER_RESPONSE: print("Adding device aborted by user.") return ReturnCodes.ABORTED logger.debug(f"Device metadata file {file_path}") if metadata.save_to_json(file_path) == ReturnCodes.FILE_ALREADY_EXISTS: logger.error("File exists after checking, which should not happen.") return ReturnCodes.ABORTED print("Device metadata successfully created.") return ReturnCodes.SUCCESS def configure_metadata(): pass def guided_setup(device_root) -> DeviceMetadata: logger.info("Guided setup") response = "N" device_name = "" while response.upper() == "N": device_name = input("Please enter name of device: ") response = input(f"Confirm device name: {device_name} [y/N] ") if device_name == "" or device_name is None: print("Name cannot be empty") logger.warning("Name cannot be empty") logger.debug(f"Response is {response}") logger.debug(f"Device name is {device_name}") return DeviceMetadata(device_name, device_root)