-
-
Notifications
You must be signed in to change notification settings - Fork 41
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’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add XML command "SetFanSpeed" #560
base: dev
Are you sure you want to change the base?
Conversation
WalkthroughThe changes introduce new classes and methods to enhance command handling within the Changes
Possibly related PRs
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
Outside diff range, codebase verification and nitpick comments (2)
deebot_client/commands/xml/common.py (2)
71-71
: Add docstring for the class.The class
ExecuteCommand
is missing a docstring.Apply this diff to add a docstring for the class:
class ExecuteCommand(XmlCommandWithMessageHandling, ABC): + """Command, which is executing something (ex. Charge)."""
88-92
: Add docstring for the class.The class
XmlSetCommand
is missing a docstring.Apply this diff to add a docstring for the class:
class XmlSetCommand(ExecuteCommand, SetCommand, ABC): + """Xml base set command. + + Command needs to be linked to the "get" command, for handling (updating) the sensors. + """
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (3)
- deebot_client/commands/xml/common.py (3 hunks)
- deebot_client/commands/xml/fan_speed.py (2 hunks)
- tests/commands/xml/test_fan_speed.py (2 hunks)
Additional context used
Ruff
tests/commands/xml/test_fan_speed.py
15-15:
..json.assert_set_command
imported but unusedRemove unused import:
..json.assert_set_command
(F401)
50-50: f-string without any placeholders
Remove extraneous
f
prefix(F541)
deebot_client/commands/xml/common.py
38-38: Use
False
instead ofFalse and ...
Replace with
False
(SIM223)
Additional comments not posted (1)
deebot_client/commands/xml/fan_speed.py (1)
5-5
: Remove unused import.The import
TYPE_CHECKING
is not used in the file.Apply this diff to remove the unused import:
-from typing import TYPE_CHECKING
Likely invalid or redundant comment.
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## dev #560 +/- ##
==========================================
+ Coverage 86.67% 86.86% +0.19%
==========================================
Files 89 89
Lines 3324 3343 +19
Branches 533 534 +1
==========================================
+ Hits 2881 2904 +23
+ Misses 389 384 -5
- Partials 54 55 +1 ☔ View full report in Codecov by Sentry. |
70ae3c9
to
b968b6c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Caution
Inline review comments failed to post
Actionable comments posted: 1
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (3)
- deebot_client/commands/xml/common.py (3 hunks)
- deebot_client/commands/xml/fan_speed.py (2 hunks)
- tests/commands/xml/test_fan_speed.py (2 hunks)
Additional context used
Ruff
tests/commands/xml/test_fan_speed.py
15-15:
..json.assert_set_command
imported but unusedRemove unused import:
..json.assert_set_command
(F401)
deebot_client/commands/xml/common.py
38-38: Use
False
instead ofFalse and ...
Replace with
False
(SIM223)
Additional comments not posted (8)
deebot_client/commands/xml/fan_speed.py (2)
Line range hint
12-46
: LGTM!The
_handle_xml
method correctly processes the XML response and notifies the event bus for different fan speed levels.The code changes are approved.
49-59
: Improve readability and maintainability.The constructor logic can be simplified for better readability and maintainability.
Apply this diff to simplify the constructor logic:
def __init__(self, speed: FanSpeedLevel | str) -> None: - if isinstance(speed, int): - speed = "strong" if speed in [1, 2] else "normal" + if isinstance(speed, int) and speed in [1, 2]: + speed = "strong" + elif isinstance(speed, int): + speed = "normal" super().__init__({"speed": speed})Likely invalid or redundant comment.
tests/commands/xml/test_fan_speed.py (4)
Line range hint
17-31
: LGTM!The function correctly tests the
GetFanSpeed
command for different fan speed levels using parameterized tests.The code changes are approved.
Tools
Ruff
15-15:
..json.assert_set_command
imported but unusedRemove unused import:
..json.assert_set_command
(F401)
Line range hint
34-46
: LGTM!The function correctly tests the
GetFanSpeed
command for different error scenarios using parameterized tests.The code changes are approved.
48-51
: LGTM!The function correctly tests the
SetFanSpeed
command for the maximum fan speed level.The code changes are approved.
53-56
: LGTM!The function correctly tests the
SetFanSpeed
command for an invalid fan speed value.The code changes are approved.
deebot_client/commands/xml/common.py (2)
71-85
: LGTM!The
_handle_xml
method correctly handles the success and failure of XML commands.The code changes are approved.
88-92
: LGTM!The class correctly serves as a base for XML set commands and links to "get" commands for sensor updates.
The code changes are approved.
Comments failed to post (1)
deebot_client/commands/xml/common.py (1)
37-38: Fix the TypeError in
_get_payload
method.The FIXME comment indicates a potential issue with the
has_sub_element
method being a class method. Address this to prevent the TypeError.Apply this diff to fix the issue:
- # FIXME TypeError: 'classmethod' object is not callable - if False and self.has_sub_element: + if self.has_sub_element():Committable suggestion was skipped due to low confidence.
Tools
Ruff
38-38: Use
False
instead ofFalse and ...
Replace with
False
(SIM223)
b968b6c
to
87b1512
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (3)
- deebot_client/commands/xml/common.py (3 hunks)
- deebot_client/commands/xml/fan_speed.py (2 hunks)
- tests/commands/xml/test_fan_speed.py (2 hunks)
Additional context used
Ruff
tests/commands/xml/test_fan_speed.py
15-15:
..json.assert_set_command
imported but unusedRemove unused import:
..json.assert_set_command
(F401)
deebot_client/commands/xml/common.py
38-38: Use
False
instead ofFalse and ...
Replace with
False
(SIM223)
Additional comments not posted (13)
deebot_client/commands/xml/fan_speed.py (5)
Line range hint
16-46
: LGTM!The code changes are approved.
52-52
: LGTM!The code changes are approved.
53-53
: LGTM!The code changes are approved.
54-54
: LGTM!The code changes are approved.
56-59
: Improve readability and maintainability.The constructor logic can be simplified for better readability and maintainability.
Apply this diff to simplify the constructor logic:
def __init__(self, speed: FanSpeedLevel | str) -> None: - if isinstance(speed, int): - speed = "strong" if speed in [1, 2] else "normal" + if isinstance(speed, int) and speed in [1, 2]: + speed = "strong" + elif isinstance(speed, int): + speed = "normal" super().__init__({"speed": speed})tests/commands/xml/test_fan_speed.py (4)
Line range hint
18-29
: LGTM!The code changes are approved.
Tools
Ruff
15-15:
..json.assert_set_command
imported but unusedRemove unused import:
..json.assert_set_command
(F401)
Line range hint
32-45
: LGTM!The code changes are approved.
48-51
: LGTM!The code changes are approved.
53-56
: LGTM!The code changes are approved.
deebot_client/commands/xml/common.py (4)
Line range hint
30-38
: Address the FIXME comment.The FIXME comment indicates a potential issue with the
has_sub_element
method. The method is defined as a class method but is being called as an instance method.Apply this diff to fix the issue:
- # FIXME TypeError: 'classmethod' object is not callable - if False and self.has_sub_element: + if False and cls.has_sub_element():Tools
Ruff
38-38: Use
False
instead ofFalse and ...
Replace with
False
(SIM223)
Line range hint
49-68
: LGTM!The code changes are approved.
71-85
: LGTM!The code changes are approved.
88-92
: LGTM!The code changes are approved.
87b1512
to
e117ac2
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (4)
- deebot_client/commands/xml/init.py (2 hunks)
- deebot_client/commands/xml/common.py (3 hunks)
- deebot_client/commands/xml/fan_speed.py (2 hunks)
- tests/commands/xml/test_fan_speed.py (2 hunks)
Files skipped from review as they are similar to previous changes (1)
- deebot_client/commands/xml/fan_speed.py
Additional context used
Ruff
tests/commands/xml/test_fan_speed.py
15-15:
..json.assert_set_command
imported but unusedRemove unused import:
..json.assert_set_command
(F401)
deebot_client/commands/xml/common.py
38-38: Use
False
instead ofFalse and ...
Replace with
False
(SIM223)
Additional comments not posted (8)
deebot_client/commands/xml/__init__.py (2)
11-11
: LGTM!The import statement for
SetFanSpeed
is correctly added.
21-21
: LGTM!The addition of
SetFanSpeed
to the__all__
list is correctly done.tests/commands/xml/test_fan_speed.py (2)
9-9
: LGTM!The import statement for
SetFanSpeed
is correctly added.
48-51
: LGTM!The new test function
test_set_fan_speed
is correctly implemented.deebot_client/commands/xml/common.py (4)
11-14
: LGTM!The import statements for
SetCommand
andHandlingState
are correctly added.
71-73
: LGTM!The new class
ExecuteCommand
is correctly implemented.
74-85
: LGTM!The new method
_handle_xml
is correctly implemented.
88-92
: LGTM!The new class
XmlSetCommand
is correctly implemented.
e117ac2
to
136fb4d
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Outside diff range, codebase verification and nitpick comments (2)
deebot_client/commands/xml/fan_speed.py (1)
Line range hint
23-45
: Add a default case to thematch
statement.The
match
statement does not handle unexpected values gracefully. Consider adding a default case to handle unexpected values.match speed.lower(): case "standard": event = FanSpeedEvent(FanSpeedLevel.NORMAL) case "strong": event = FanSpeedEvent(FanSpeedLevel.MAX) + case _: + _LOGGER.warning('Unexpected fan speed value: %s', speed)tests/commands/xml/test_fan_speed.py (1)
Line range hint
27-30
: Remove extraneousf
prefix.The f-string does not contain any placeholders.
json = get_request_xml(f"<ctl ret='ok' speed='{speed}'/>") json = get_request_xml("<ctl ret='ok' speed='{speed}'/>")Tools
Ruff
15-15:
..json.assert_set_command
imported but unusedRemove unused import:
..json.assert_set_command
(F401)
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (4)
- deebot_client/commands/xml/init.py (2 hunks)
- deebot_client/commands/xml/common.py (3 hunks)
- deebot_client/commands/xml/fan_speed.py (2 hunks)
- tests/commands/xml/test_fan_speed.py (2 hunks)
Files skipped from review as they are similar to previous changes (1)
- deebot_client/commands/xml/init.py
Additional context used
Ruff
tests/commands/xml/test_fan_speed.py
15-15:
..json.assert_set_command
imported but unusedRemove unused import:
..json.assert_set_command
(F401)
Additional comments not posted (5)
deebot_client/commands/xml/fan_speed.py (1)
56-59
: Simplify the constructor logic.The constructor logic can be simplified for better readability and maintainability.
def __init__(self, speed: FanSpeedLevel | str) -> None: if isinstance(speed, int) and speed in [1, 2]: speed = "strong" elif isinstance(speed, int): speed = "normal" super().__init__({"speed": speed})Likely invalid or redundant comment.
tests/commands/xml/test_fan_speed.py (2)
48-51
: LGTM!The code changes are approved.
53-56
: LGTM!The code changes are approved.
deebot_client/commands/xml/common.py (2)
Line range hint
36-66
: LGTM!The code changes are approved.
86-90
: LGTM!The code changes are approved.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (1)
- deebot_client/commands/xml/init.py (2 hunks)
Files skipped from review as they are similar to previous changes (1)
- deebot_client/commands/xml/init.py
@@ -25,7 +25,6 @@ class XmlCommand(Command): | |||
data_type: DataType = DataType.XML | |||
|
|||
@property # type: ignore[misc] | |||
@classmethod |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why did you remove it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Otherwise it throws an error TypeError: 'classmethod' object is not callable
.
Maybe you can reproduce it locally when reverting and running the tests.
@edenhaus Do you have a better solution?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (4)
- deebot_client/commands/xml/init.py (1 hunks)
- deebot_client/commands/xml/fan_speed.py (2 hunks)
- deebot_client/events/fan_speed.py (1 hunks)
- tests/commands/xml/test_fan_speed.py (3 hunks)
Additional comments not posted (10)
deebot_client/commands/xml/__init__.py (4)
11-11
: LGTM!The import statement is updated to reflect the new commands for cleaning speed control, which is consistent with the list of alterations.
19-20
: LGTM!The
__all__
list is updated to export the new commands for cleaning speed control, which is consistent with the list of alterations.
30-31
: LGTM!The
_COMMANDS
list is updated to include the new commands for cleaning speed control, which is consistent with the list of alterations.
Line range hint
1-45
: Overall assessment: The changes look good!The changes in this file are focused on replacing the fan speed control commands with cleaning speed control commands. The import statements,
__all__
list, and_COMMANDS
list are updated consistently to reflect these changes.The AI-generated summary accurately captures the essence of the changes, which enhance the module's capabilities related to cleaning operations.
No further changes are required in this file.
tests/commands/xml/test_fan_speed.py (4)
22-29
: LGTM!The changes to the test function and the parameterized test cases align with the shift from
GetFanSpeed
toGetCleanSpeed
. The expected events have been updated correctly.
40-44
: LGTM!The changes to the test function align with the shift from
GetFanSpeed
toGetCleanSpeed
. The test cases for error scenarios remain valid.
47-50
: LGTM!The new test function
test_set_fan_speed
correctly validates the successful execution of theSetCleanSpeed
command when provided with a valid speed level.
53-56
: LGTM!The new test function
test_set_fan_speed_error
correctly validates the error scenario for theSetCleanSpeed
command when provided with an invalid speed level.deebot_client/commands/xml/fan_speed.py (2)
Line range hint
20-46
: LGTM!The changes to the
GetCleanSpeed
class are approved.
49-60
: LGTM!The
SetCleanSpeed
class is correctly implemented and follows the naming convention.
@@ -14,8 +14,10 @@ class FanSpeedLevel(IntEnum): | |||
|
|||
# Values should be sort from low to high on their meanings | |||
QUIET = 1000 | |||
STANDARD = -1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Inconsistent enumeration value.
The STANDARD
value is assigned a negative value (-1
), which is inconsistent with the existing positive values in the FanSpeedLevel
enumeration. This breaks the ordering of the values from low to high based on their meanings, as stated in the comment above the enumeration.
Consider assigning a positive value to STANDARD
that maintains the correct ordering of the values based on their meanings. For example:
QUIET = 1000
STANDARD = 1500
NORMAL = 2000
MAX = 2500
STRONG = 3000
MAX_PLUS = 3500
NORMAL = 0 | ||
MAX = 1 | ||
STRONG = -2 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Inconsistent enumeration value.
The STRONG
value is assigned a negative value (-2
), which is inconsistent with the existing positive values in the FanSpeedLevel
enumeration. This breaks the ordering of the values from low to high based on their meanings, as stated in the comment above the enumeration.
Consider assigning a positive value to STRONG
that maintains the correct ordering of the values based on their meanings. For example:
QUIET = 1000
STANDARD = 1500
NORMAL = 2000
MAX = 2500
STRONG = 3000
MAX_PLUS = 3500
Adds support for deebot 900 XML command "SetFanSpeed".
@edenhaus Could you please review?
Runtime tested:
Summary by CodeRabbit
Summary by CodeRabbit
New Features
Bug Fixes
Tests