Codex updated: Fix discovery crash from quirk removing ZCL attributes#833
Draft
dmulcahey wants to merge 1 commit into
Draft
Codex updated: Fix discovery crash from quirk removing ZCL attributes#833dmulcahey wants to merge 1 commit into
dmulcahey wants to merge 1 commit into
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## dev #833 +/- ##
=======================================
Coverage 97.27% 97.27%
=======================================
Files 55 55
Lines 10930 10940 +10
=======================================
+ Hits 10632 10642 +10
Misses 298 298 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request was created with Codex and is an updated version of the pull request it supersedes.
Original pull request: #788
DRAFT.
Proposed change
This fixes an issue where a (custom) quirk can remove standard ZCL attributes. Most entity platforms already have guards checking if the attribute even exists, but some do not. This adds them.
Additional information
I'm not sure if this is something we should add – quirks shouldn't misbehave like this. Or are there valid use-cases for deleting ZCL attributes...? But currently, ZHA startup breaks completely when using these custom quirks.
Should address:
This "regression" was introduced with:
AI summary
Issue and fix summary (CLICK TO EXPAND)
Issue
Some custom v1 quirks fully replace a standard cluster's attribute definitions, e.g. the widely used
ts0601_trv_moes.pyfrom jacekk015/zha_quirks does:The resulting
OnOffcluster has noon_off/start_up_on_offattribute definitions.Cluster.is_attribute_unsupported()(andfind_attribute()) raiseKeyErrorfor attribute names without a definition.Since #657,
Switch._is_supported()callscluster.is_attribute_unsupported("on_off")during entity discovery. TheKeyErrorpropagated throughDevice._add_pending_entities()→Gateway.load_devices()→ HA'sasync_setup_entry, so one broken custom quirk prevented the entire ZHA integration from starting (ConfigEntryNotReadyretry loop). Previously, the cluster-handler-based code tolerated these clusters.Affected code paths
Switch._is_supported()was the only_is_supportedimplementation missing theattributes_by_nameguard that all other platforms already had (the crash from the linked issue).WindowCoveringInversionSwitch._is_supported()had the guard, but evaluatedis_attribute_unsupported()first.configure_cluster_configs()calledfind_attribute()unguarded on reporting attributes aggregated from entities not yet filtered byis_supported(), failing on device join/reconfigure.AggregatedClusterPoller.async_update()calledis_attribute_unsupported()unguarded on sibling entities' cluster-config attributes during polling.Fix
Check
attr_name in cluster.attributes_by_namebefore callingis_attribute_unsupported()/find_attribute()at the four sites above, treating attributes without definitions as unsupported (entity not created / reporting skipped with a debug log).A regression test joins a device with a quirks v2 quirk (local registry) that replaces the
OnOffcluster with one whoseAttributeDefsdoes not inherit the standard definitions, reproducing the exactKeyError: 'on_off'from the issue on unfixed code, and asserts device initialization succeeds with no switch entity created.