Exemple #1
0
 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)
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #6
0
 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)
Exemple #9
0
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)
Exemple #10
0
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))
Exemple #11
0
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)
Exemple #12
0
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)
Exemple #13
0
    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)
Exemple #14
0
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
Exemple #16
0
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))
Exemple #17
0
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)
Exemple #18
0
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))