def test_save_and_load(self): """Test saving and loading back.""" fname = self._path_for("test1") open(fname, "w+") util_yaml.save_yaml(fname, self.yaml.load(TEST_YAML_A)) data = util_yaml.load_yaml(fname, True) assert data == self.yaml.load(TEST_YAML_A)
def migrate_config(fname: str) -> None: """Add id to views and cards if not present and check duplicates.""" config = yaml.load_yaml(fname, True) updated = False seen_card_ids = set() seen_view_ids = set() index = 0 for view in config.get('views', []): view_id = str(view.get('id', '')) if not view_id: updated = True view.insert(0, 'id', index, comment="Automatically created id") else: if view_id in seen_view_ids: raise DuplicateIdError( 'ID `{}` has multiple occurrences in views'.format( view_id)) seen_view_ids.add(view_id) for card in view.get('cards', []): card_id = str(card.get('id', '')) if not card_id: updated = True card.insert(0, 'id', uuid.uuid4().hex, comment="Automatically created id") else: if card_id in seen_card_ids: raise DuplicateIdError( 'ID `{}` has multiple occurrences in cards'.format( card_id)) seen_card_ids.add(card_id) index += 1 if updated: yaml.save_yaml(fname, config)
def move_card_view(fname: str, card_id: str, view_id: str, position: int = None) -> None: """Move a card to a different view.""" config = yaml.load_yaml(fname, True) for view in config.get('views', []): if str(view.get('id', '')) == view_id: destination = view.get('cards') for card in view.get('cards'): if str(card.get('id', '')) != card_id: continue origin = view.get('cards') card_to_move = card if 'destination' not in locals(): raise ViewNotFoundError("View with ID: {} was not found in {}.".format( view_id, fname)) if 'card_to_move' not in locals(): raise CardNotFoundError("Card with ID: {} was not found in {}.".format( card_id, fname)) origin.pop(origin.index(card_to_move)) if position is None: destination.append(card_to_move) else: destination.insert(position, card_to_move) yaml.save_yaml(fname, config)
def test_save_and_load(self): """Test saving and loading back.""" fname = self._path_for("test1") open(fname, "w+") util_yaml.save_yaml(fname, self.yaml.load(TEST_YAML_A)) data = util_yaml.load_yaml(fname, True) assert data == self.yaml.load(TEST_YAML_A)
def test_overwrite_and_reload(self): """Test that we can overwrite an existing file and read back.""" fname = self._path_for("test2") open(fname, "w+") util_yaml.save_yaml(fname, self.yaml.load(TEST_YAML_A)) util_yaml.save_yaml(fname, self.yaml.load(TEST_YAML_B)) data = util_yaml.load_yaml(fname, True) assert data == self.yaml.load(TEST_YAML_B)
def test_overwrite_and_reload(self): """Test that we can overwrite an existing file and read back.""" fname = self._path_for("test2") open(fname, "w+") util_yaml.save_yaml(fname, self.yaml.load(TEST_YAML_A)) util_yaml.save_yaml(fname, self.yaml.load(TEST_YAML_B)) data = util_yaml.load_yaml(fname, True) assert data == self.yaml.load(TEST_YAML_B)
def test_save_and_load(): """Test saving and loading back.""" yaml = YAML(typ="rt") fname = _path_for("test1") open(fname, "w+").close() util_yaml.save_yaml(fname, yaml.load(TEST_YAML_A)) data = util_yaml.load_yaml(fname, True) assert data == yaml.load(TEST_YAML_A)
def test_overwrite_and_reload(): """Test that we can overwrite an existing file and read back.""" yaml = YAML(typ="rt") fname = _path_for("test2") open(fname, "w+").close() util_yaml.save_yaml(fname, yaml.load(TEST_YAML_A)) util_yaml.save_yaml(fname, yaml.load(TEST_YAML_B)) data = util_yaml.load_yaml(fname, True) assert data == yaml.load(TEST_YAML_B)
def add_view(fname: str, view_config: str, position: int = None, data_format: str = FORMAT_YAML) -> None: """Add a view.""" config = yaml.load_yaml(fname, True) views = config.get('views', []) if data_format == FORMAT_YAML: view_config = yaml.yaml_to_object(view_config) if position is None: views.append(view_config) else: views.insert(position, view_config) yaml.save_yaml(fname, config)
def delete_card(fname: str, card_id: str) -> None: """Delete a card from view.""" config = yaml.load_yaml(fname, True) for view in config.get('views', []): for card in view.get('cards', []): if str(card.get('id', '')) != card_id: continue cards = view.get('cards') cards.pop(cards.index(card)) yaml.save_yaml(fname, config) return raise CardNotFoundError("Card with ID: {} was not found in {}.".format( card_id, fname))
def delete_view(fname: str, view_id: str) -> None: """Delete a view.""" config = yaml.load_yaml(fname, True) views = config.get('views', []) found = None for view in views: if str(view.get('id', '')) == view_id: found = view break if found is None: raise ViewNotFoundError("View with ID: {} was not found in {}.".format( view_id, fname)) views.pop(views.index(found)) yaml.save_yaml(fname, config)
def move_view(fname: str, view_id: str, position: int) -> None: """Move a view to a different position.""" config = yaml.load_yaml(fname, True) views = config.get('views', []) found = None for view in views: if str(view.get('id', '')) == view_id: found = view break if found is None: raise ViewNotFoundError("View with ID: {} was not found in {}.".format( view_id, fname)) views.insert(position, views.pop(views.index(found))) yaml.save_yaml(fname, config)
async def get_schedule(self, entity_id, schedule_id, filename): """Get wiser device schedule.""" schedule_data = self.wiserhub.getSchedule(self.schedules[entity_id]) if schedule_data is not None: for r in (("climate.",""),("switch.",""),("sensor.",""),("_"," ")): entity_id = entity_id.replace(*r) schedule_data = convert_from_wiser_schedule( schedule_data, entity_id.title() ) try: yaml.save_yaml(filename, schedule_data) except Exception as ex: # pylint: disable=broad-except _LOGGER.error("Error saving schedule file. Error is %s", str(ex)) _LOGGER.debug("Saved schedule for %s to file %s", entity_id, filename) else: _LOGGER.error("No schedule data returned for %s", entity_id)
def move_card(fname: str, card_id: str, position: int = None) -> None: """Move a card to a different position.""" if position is None: raise HomeAssistantError( 'Position is required if view is not specified.') config = yaml.load_yaml(fname, True) for view in config.get('views', []): for card in view.get('cards', []): if str(card.get('id', '')) != card_id: continue cards = view.get('cards') cards.insert(position, cards.pop(cards.index(card))) yaml.save_yaml(fname, config) return raise CardNotFoundError("Card with ID: {} was not found in {}.".format( card_id, fname))
def get_schedule(service): """Handle the service call.""" entity_id = service.data[ATTR_ENTITY_ID] filename = (service.data[ATTR_FILENAME] if service.data[ATTR_FILENAME] != "" else ("schedule_" + entity_id + ".yaml")) for room in wiser_rooms: if room.entity_id == entity_id: schedule_data = room.schedule _LOGGER.debug("Sched Service Data = %s", schedule_data) if schedule_data is not None: schedule_data = convert_from_wiser_schedule( schedule_data, room.name) yaml.save_yaml(filename, schedule_data) else: raise Exception("No schedule data returned") break
def update_card(fname: str, card_id: str, card_config: str, data_format: str = FORMAT_YAML) -> None: """Save a specific card config for id.""" config = yaml.load_yaml(fname, True) for view in config.get('views', []): for card in view.get('cards', []): if str(card.get('id', '')) != card_id: continue if data_format == FORMAT_YAML: card_config = yaml.yaml_to_object(card_config) card.clear() card.update(card_config) yaml.save_yaml(fname, config) return raise CardNotFoundError("Card with ID: {} was not found in {}.".format( card_id, fname))
def update_view(fname: str, view_id: str, view_config, data_format: str = FORMAT_YAML) -> None: """Update view.""" config = yaml.load_yaml(fname, True) found = None for view in config.get('views', []): if str(view.get('id', '')) == view_id: found = view break if found is None: raise ViewNotFoundError("View with ID: {} was not found in {}.".format( view_id, fname)) if data_format == FORMAT_YAML: view_config = yaml.yaml_to_object(view_config) view_config['cards'] = found.get('cards', []) found.clear() found.update(view_config) yaml.save_yaml(fname, config)
def add_card(fname: str, view_id: str, card_config: str, position: int = None, data_format: str = FORMAT_YAML) -> None: """Add a card to a view.""" config = yaml.load_yaml(fname, True) for view in config.get('views', []): if str(view.get('id', '')) != view_id: continue cards = view.get('cards', []) if data_format == FORMAT_YAML: card_config = yaml.yaml_to_object(card_config) if position is None: cards.append(card_config) else: cards.insert(position, card_config) yaml.save_yaml(fname, config) return raise ViewNotFoundError("View with ID: {} was not found in {}.".format( view_id, fname))