import json import logging import uuid from datetime import datetime import logging import click from iottb.utils.string_processing import make_canonical_name logger = logging.getLogger(__name__) class DeviceMetadata: def __init__(self, device_name, description="", model="", manufacturer="", firmware_version="", device_type="", supported_interfaces="", companion_applications="", save_to_file=None, aliases=None): self.device_id = str(uuid.uuid4()) self.device_name = device_name cn, default_aliases = make_canonical_name(device_name) logger.debug(f'cn, default aliases = {cn}, {str(default_aliases)}') self.aliases = default_aliases if aliases is None else default_aliases + aliases self.canonical_name = cn self.date_added = datetime.now().isoformat() self.description = description self.model = model self.manufacturer = manufacturer self.current_firmware_version = firmware_version self.device_type = device_type self.supported_interfaces = supported_interfaces self.companion_applications = companion_applications self.last_metadata_update = datetime.now().isoformat() if save_to_file is not None: click.echo('TODO: Implement saving config to file after creation!') def add_alias(self, alias: str = ""): if alias == "": return self.aliases.append(alias) def get_canonical_name(self): return self.canonical_name def print_attributes(self): print(f'Printing attribute value pairs in {__name__}') for attr, value in self.__dict__.items(): print(f'{attr}: {value}') def save_metadata_to_file(self, metadata_path): with open(metadata_path, 'w') as metadata_file: json.dump(self.__dict__, metadata_file, indent=4) click.echo(f'Metadata saved to {metadata_path}')