Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix duplicate template handling in Persistent Notifications #47217

Merged
merged 1 commit into from Mar 2, 2021

Conversation

frenck
Copy link
Member

@frenck frenck commented Mar 1, 2021

Proposed change

Fixes an issue with the persistent notification services. The service
schema handled each value as a template, however, this is already handled
by the services from config. Nevertheless, it is used directly in code as well.

This PR adjusts the service schema to only render templates, else expect a string.
In the create method we now check if we are dealing with a template, before we
render it.

As an added bonus, this reduces the amount of useless Template renders (for non-templates).

Type of change

  • Dependency upgrade
  • Bugfix (non-breaking change which fixes an issue)
  • New integration (thank you!)
  • New feature (which adds functionality to an existing integration)
  • Breaking change (fix/feature causing existing functionality to break)
  • Code quality improvements to existing code or addition of tests

Example entry for configuration.yaml:

# Example configuration.yaml
alias: New Automation
description: ''
trigger:
  - platform: mqtt
    topic: z2m/family_room_scene_controller/91/0/scene/003
condition: []
action:
  - service: persistent_notification.create
    data:
      message: '{{ trigger.payload }}'
mode: single

Additional information

Checklist

  • The code change is tested and works locally.
  • Local tests pass. Your PR cannot be merged unless tests pass
  • There is no commented out code in this PR.
  • I have followed the development checklist
  • The code has been formatted using Black (black --fast homeassistant tests)
  • Tests have been added to verify that the new code works.

If user exposed functionality or configuration variables are added/changed:

If the code communicates with devices, web services, or third-party tools:

  • The manifest file has all fields filled out correctly.
    Updated and included derived files by running: python3 -m script.hassfest.
  • New or updated dependencies have been added to requirements_all.txt.
    Updated by running python3 -m script.gen_requirements_all.
  • Untested files have been added to .coveragerc.

The integration reached or maintains the following Integration Quality Scale:

  • No score or internal
  • 馃 Silver
  • 馃 Gold
  • 馃弳 Platinum

To help with the load of incoming pull requests:

@project-bot project-bot bot added this to Needs review in Dev Mar 1, 2021
@frenck frenck added this to the 2021.3.0 milestone Mar 1, 2021
except TemplateError as ex:
_LOGGER.error("Error rendering title %s: %s", title, ex)
title = title.template
if isinstance(title, Template):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm surprised this fixes it.

When a template is static, we already don't render it but just return it from async_render (or parse it to create a new object if parse_result=True).

Oh ha: this works because cv.string will extract the raw value again and so it's back to the old value.

Dev automation moved this from Needs review to Reviewer approved Mar 2, 2021
@balloob balloob merged commit 4f9f870 into dev Mar 2, 2021
Dev automation moved this from Reviewer approved to Done Mar 2, 2021
@balloob balloob deleted the frenck-2021-0746 branch March 2, 2021 00:27
@github-actions github-actions bot locked and limited conversation to collaborators Mar 3, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
Dev
  
Done
Development

Successfully merging this pull request may close these issues.

MQTT trigger.payload being interpreted as a dict when passed JSON
3 participants