74 lines
2.8 KiB
Python
74 lines
2.8 KiB
Python
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)
|
|
|