-
-
Notifications
You must be signed in to change notification settings - Fork 89
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 support for Deebot N8 Pro+ Black #619
Conversation
WalkthroughThe changes in this pull request introduce a new file, Changes
Possibly related issues
Possibly related PRs
Suggested labels
Suggested reviewers
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: 0
🧹 Outside diff range and nitpick comments (4)
deebot_client/hardware/deebot/85as7h.py (1)
Line range hint
4-72
: Ensure all imported modules are requiredThe file imports numerous modules and classes. Please verify that all imported modules are actually used in the code to avoid unnecessary dependencies and potential performance impacts.
If any imports are unused, consider removing them to keep the code clean and efficient.
tests/hardware/test_init.py (3)
Line range hint
59-75
: Add test cases for the new device'85as7h'
To ensure comprehensive test coverage, please add the new device
'85as7h'
to thetest_get_static_device_info
function. This will validate that the static device info for'85as7h'
is correctly loaded.Apply this diff to include
'85as7h'
in the test cases:@pytest.mark.parametrize( ("class_", "expected"), [ ("not_specified", lambda: None), ("yna5xi", lambda: DEVICES["yna5xi"]), + ("85as7h", lambda: DEVICES["85as7h"]), ], ) async def test_get_static_device_info( class_: str, expected: Callable[[], StaticDeviceInfo] ) -> None: """Test get_static_device_info.""" static_device_info = await get_static_device_info(class_) assert static_device_info == expected()
Line range hint
78-148
: Include the new device'85as7h'
in capability event extraction testsAdding
'85as7h'
to thetest_capabilities_event_extraction
function will ensure that the capabilities and events for the new device are properly tested.Modify the
@pytest.mark.parametrize
decorator to include'85as7h'
:@pytest.mark.parametrize( ("class_", "expected"), [ ( "5xu9h3", { AdvancedModeEvent: [GetAdvancedMode()], # ... existing mappings ... }, ), ( "itk04l", { AdvancedModeEvent: [GetAdvancedMode()], # ... existing mappings ... }, ), ( "yna5xi", { AdvancedModeEvent: [GetAdvancedMode()], # ... existing mappings ... }, ), + ( + "85as7h", + { + AdvancedModeEvent: [GetAdvancedMode()], + AvailabilityEvent: [GetBattery(is_available_check=True)], + BatteryEvent: [GetBattery()], + # Add the expected event-command mappings for '85as7h' here. + # ... + }, + ), ], ids=["5xu9h3", "itk04l", "yna5xi", "85as7h", "p95mgv"], ) async def test_capabilities_event_extraction( class_: str, expected: dict[type[Event], list[Command]] ) -> None: info = await get_static_device_info(class_) assert info is not None capabilities = info.capabilities assert capabilities._events.keys() == expected.keys() for event, expected_commands in expected.items(): assert ( capabilities.get_refresh_commands(event) == expected_commands ), f"Refresh commands don't match for {event}"Be sure to fill in the expected event-command mappings for
'85as7h'
based on its capabilities.
Line range hint
260-274
: Maintain alphabetical order of device identifiersThe list of device identifiers in
test_all_models_loaded
appears to be sorted. Ensure that the new device'85as7h'
is placed in the correct position to maintain the order.Currently,
'85as7h'
is correctly placed between'77atlz'
and'85nbtp'
. No action needed if the order is already correct.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (2)
deebot_client/hardware/deebot/85as7h.py
(1 hunks)tests/hardware/test_init.py
(1 hunks)
🔇 Additional comments (2)
deebot_client/hardware/deebot/85as7h.py (2)
1-1
:
Remove the unnecessary filename declaration at the top of the file
The line 'x5d34r.py'
at the beginning of the file is unnecessary and may cause confusion. It appears to be leftover from copying the code from another module. Removing it will clean up the code.
Apply this diff to remove the unnecessary line:
- x5d34r.py
from __future__ import annotations
Likely invalid or redundant comment.
Line range hint 74-94
: Verify device registration consistency
Ensure that the device identifier and the filename are consistent throughout the code. Since the file is named 85as7h.py
, confirm that the device is correctly registered with the identifier '85as7h'
.
Run the following script to check for correct device registration:
This script will help ensure that the short_name
function correctly returns '85as7h'
, matching the filename and device registration.
✅ Verification successful
Device registration is consistent with filename
The verification confirms that:
- The file
85as7h.py
correctly registers the device usingDEVICES[short_name(__name__)]
- The
short_name
function extracts the last part after the dot, which will resolve to'85as7h'
from'deebot_client.hardware.deebot.85as7h'
- The device identifier
'85as7h'
is also referenced in the test file, confirming it's a valid device identifier
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify that the device identifier matches the filename.
# Extract the device key from the DEVICES dictionary
grep -rn "DEVICES\[short_name(__name__)\]" deebot_client/hardware/deebot/85as7h.py
# Confirm that short_name resolves to '85as7h'
python -c "from deebot_client.util import short_name; print(short_name('deebot_client.hardware.deebot.85as7h'))"
Length of output: 355
Script:
#!/bin/bash
# Let's verify the device registration using different approaches
# Check the content of the file to see how the device is registered
cat deebot_client/hardware/deebot/85as7h.py
# Search for any references to '85as7h' in the codebase
rg "85as7h" -l
# Check the implementation of short_name function
rg -p "def short_name"
Length of output: 7234
Script:
#!/bin/bash
# Let's check the implementation of short_name function and test file
cat deebot_client/util/__init__.py | grep -A 5 "def short_name"
# Check the test file that references 85as7h
cat tests/hardware/test_init.py | grep -A 5 -B 5 "85as7h"
Length of output: 440
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.
Thanks @r1cht3r 👍
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## dev #619 +/- ##
=======================================
Coverage 86.42% 86.42%
=======================================
Files 88 88
Lines 3301 3301
Branches 298 298
=======================================
Hits 2853 2853
Misses 394 394
Partials 54 54 ☔ View full report in Codecov by Sentry. |
I tried using #617 as it's the same model, but the Deebot N8 Pro+ Black version appears to be a distinct model.
Summary by CodeRabbit
New Features
Tests