-
Notifications
You must be signed in to change notification settings - Fork 0
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
Refactor directory structure and update manifest for SNCB/NMBS integration #2
base: main
Are you sure you want to change the base?
Conversation
📝 WalkthroughWalkthroughThe pull request modifies the Belgian Train Home Assistant integration by transitioning from a generic integration blueprint to a specific implementation for SNCB/NMBS. Key changes include renaming classes, updating function signatures, and improving documentation across several files. The Changes
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 (
|
…a models, and entity classes
@coderabbitai review |
@coderabbitai full review |
✅ Actions performedReview triggered.
|
✅ Actions performedFull review triggered. |
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
🧹 Nitpick comments (4)
.devcontainer/devcontainer.json (1)
Line range hint
32-53
: Good choice of VS Code extensions, but consider adding Pylance back.The extension selection is good, particularly adding Ruff for modern Python linting/formatting. However, Pylance provides valuable type checking and IntelliSense features that complement the basic Python extension.
Consider adding back the Pylance extension:
"extensions": [ "charliermarsh.ruff", "github.vscode-pull-request-github", - "ms-python.python" + "ms-python.python", + "ms-python.vscode-pylance" ],custom_components/belgiantrain/data.py (1)
16-17
: Add author, colon, and issue link to TODO comments.The static analysis hints point out missing details in the TODO lines. Consider extending these comments with more context, an author mention, and a link to an issue for better collaboration and tracking.
Here is an example snippet:
-# TODO Create ConfigEntry type alias with API object +# TODO(@tjorim): Create ConfigEntry type alias with API object +# Issue: https://github.com/tjorim/belgiantrain/issues/123 -# TODO Rename type alias and update all entry annotations +# TODO(@tjorim): Rename type alias and update all entry annotations +# Issue: https://github.com/tjorim/belgiantrain/issues/124🧰 Tools
🪛 Ruff (0.8.2)
16-16: Missing author in TODO; try:
# TODO(<author_name>): ...
or# TODO @<author_name>: ...
(TD002)
16-16: Missing colon in TODO
(TD004)
16-16: Missing issue link on the line following this TODO
(TD003)
16-16: Line contains TODO, consider resolving the issue
(FIX002)
17-17: Missing author in TODO; try:
# TODO(<author_name>): ...
or# TODO @<author_name>: ...
(TD002)
17-17: Missing colon in TODO
(TD004)
17-17: Missing issue link on the line following this TODO
(TD003)
17-17: Line contains TODO, consider resolving the issue
(FIX002)
custom_components/belgiantrain/entity.py (1)
3-12
: Fix import ordering and formatting.According to the pipeline failure logs, the import block is unsorted or unformatted. Consider sorting the imports by standard library, third-party, and local modules to comply with style guidelines.
Here is an example diff:
-from __future__ import annotations -from homeassistant.helpers.device_registry import DeviceInfo -from homeassistant.helpers.update_coordinator import CoordinatorEntity -from .const import ATTRIBUTION -from . import BelgiantrainDataUpdateCoordinator +from __future__ import annotations +from homeassistant.helpers.device_registry import DeviceInfo +from homeassistant.helpers.update_coordinator import CoordinatorEntity +from . import BelgiantrainDataUpdateCoordinator +from .const import ATTRIBUTION🧰 Tools
🪛 GitHub Actions: Lint
[warning] 3-12: Import block is unsorted or unformatted
custom_components/belgiantrain/__init__.py (1)
Line range hint
65-81
: Clean up TODO and LGTM on implementation.The unload/reload implementation follows Home Assistant best practices. Just update the TODO format:
-# TODO Update entry annotation +# TODO(@tjorim): Update entry annotation with proper type hints +# Issue: <link-to-issue>🧰 Tools
🪛 Ruff (0.8.2)
65-65: Missing author in TODO; try:
# TODO(<author_name>): ...
or# TODO @<author_name>: ...
(TD002)
65-65: Missing colon in TODO
(TD004)
65-65: Missing issue link on the line following this TODO
(TD003)
65-65: Line contains TODO, consider resolving the issue
(FIX002)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (11)
.devcontainer/devcontainer.json
(3 hunks)custom_components/belgiantrain/__init__.py
(2 hunks)custom_components/belgiantrain/api.py
(3 hunks)custom_components/belgiantrain/binary_sensor.py
(2 hunks)custom_components/belgiantrain/const.py
(1 hunks)custom_components/belgiantrain/coordinator.py
(2 hunks)custom_components/belgiantrain/data.py
(1 hunks)custom_components/belgiantrain/entity.py
(1 hunks)custom_components/belgiantrain/sensor.py
(1 hunks)custom_components/belgiantrain/switch.py
(1 hunks)custom_components/integration_blueprint/data.py
(0 hunks)
💤 Files with no reviewable changes (1)
- custom_components/integration_blueprint/data.py
🧰 Additional context used
🪛 Ruff (0.8.2)
custom_components/belgiantrain/data.py
16-16: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
16-16: Missing colon in TODO
(TD004)
16-16: Missing issue link on the line following this TODO
(TD003)
16-16: Line contains TODO, consider resolving the issue
(FIX002)
17-17: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
17-17: Missing colon in TODO
(TD004)
17-17: Missing issue link on the line following this TODO
(TD003)
17-17: Line contains TODO, consider resolving the issue
(FIX002)
custom_components/belgiantrain/__init__.py
22-22: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
22-22: Missing colon in TODO
(TD004)
22-22: Missing issue link on the line following this TODO
(TD003)
22-22: Line contains TODO, consider resolving the issue
(FIX002)
31-31: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
31-31: Missing colon in TODO
(TD004)
31-31: Line contains TODO, consider resolving the issue
(FIX002)
38-38: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
38-38: Missing colon in TODO
(TD004)
38-38: Missing issue link on the line following this TODO
(TD003)
38-38: Line contains TODO, consider resolving the issue
(FIX002)
39-39: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
39-39: Missing colon in TODO
(TD004)
39-39: Missing issue link on the line following this TODO
(TD003)
39-39: Line contains TODO, consider resolving the issue
(FIX002)
40-40: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
40-40: Missing colon in TODO
(TD004)
40-40: Missing issue link on the line following this TODO
(TD003)
40-40: Line contains TODO, consider resolving the issue
(FIX002)
41-41: Found commented-out code
Remove commented-out code
(ERA001)
65-65: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
65-65: Missing colon in TODO
(TD004)
65-65: Missing issue link on the line following this TODO
(TD003)
65-65: Line contains TODO, consider resolving the issue
(FIX002)
🪛 GitHub Actions: Lint
custom_components/belgiantrain/entity.py
[warning] 3-12: Import block is unsorted or unformatted
custom_components/belgiantrain/__init__.py
[warning] 22-22: Multiple TODO issues: Missing author, missing colon, missing issue link, and needs resolution
[warning] 31-40: Multiple TODO comments need proper formatting with author, colon, and issue links
[warning] 41-41: Found commented-out code that should be removed: 'entry.runtime_data = MyAPI(...)'
🔇 Additional comments (52)
.devcontainer/devcontainer.json (5)
4-5
: LGTM! Clear container naming and appropriate base image.The container name is now more descriptive and accurately reflects its purpose. Using the official Microsoft Python 3.12 image is a good choice for development.
Line range hint
20-29
: LGTM! Proper port configuration for Home Assistant.The port forwarding configuration is well-documented and includes appropriate labeling. Port 8123 is the standard port for Home Assistant development.
56-56
: LGTM! Standard remote user configuration.Using "vscode" as the remote user is the recommended practice for dev containers.
30-31
: Verify setup script existence and permissions.The post-creation command references a setup script that needs verification.
Let's check the setup script:
✅ Verification successful
Let me check the content of the setup script to ensure it's properly configured.
Let me verify if the requirements.txt file exists and check its content since it's referenced in the setup script.
Setup script and dependencies are properly configured
The verification shows that:
- The setup script exists with proper executable permissions (755)
- The script is well-structured with error handling (
set -e
)- It correctly references and installs Python dependencies from requirements.txt
- The requirements.txt file exists with valid package specifications
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Verify setup script existence and permissions if [ -f "scripts/setup" ]; then ls -l "scripts/setup" else echo "Warning: scripts/setup not found" fiLength of output: 110
Script:
#!/bin/bash # Display the content of the setup script cat scripts/setupLength of output: 127
Script:
#!/bin/bash # Check if requirements.txt exists and show its content if [ -f "requirements.txt" ]; then echo "requirements.txt exists:" cat requirements.txt else echo "Warning: requirements.txt not found" fiLength of output: 176
7-19
: Well-structured features configuration with essential tools.Good selection of development tools and dependencies. The use of versioned feature references is a best practice. The included packages (ffmpeg, libturbojpeg0, libpcap-dev) are appropriate for Home Assistant development.
Let's verify if these are all the required packages for SNCB/NMBS integration:
✅ Verification successful
Let me check the requirements.txt file to ensure we have all necessary dependencies:
The devcontainer features and packages are appropriate for development
The verification shows that the devcontainer configuration is well-structured and includes all necessary dependencies:
- The Python packages required for development are properly managed through
requirements.txt
(colorlog, homeassistant, pip, ruff)- The system packages (ffmpeg, libturbojpeg0, libpcap-dev) are included as apt packages
- No direct usage of these system packages was found in the code, but they are common dependencies for Home Assistant development
- The included development tools (git, github-cli, python, ruff) match the development requirements
The configuration follows best practices by using versioned feature references and includes all necessary tools for development.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Search for any additional package requirements in the codebase rg -i "(?:import|from)\s+(?:ffmpeg|turbojpeg|pcap)" || echo "No direct usage found" # Check if there are any other package requirements mentioned in docs fd -t f -e md -e txt . | xargs rg -i "(?:requirements?|dependencies?|packages?)"Length of output: 368
Script:
#!/bin/bash # Check contents of requirements.txt cat requirements.txt || echo "requirements.txt not found" # Look for any setup.py or pyproject.toml that might list dependencies fd "setup.py|pyproject.toml" | xargs cat 2>/dev/null || echo "No setup.py or pyproject.toml found" # Search for any system dependencies mentioned in documentation rg -i "system\s+(?:requirements?|dependencies?|packages?)"Length of output: 191
custom_components/belgiantrain/const.py (2)
1-1
: Good docstring update.Renaming the docstring to reflect the SNCB/NMBS integration is aligned with the PR objective of reorganizing the codebase to match the new naming scheme.
7-7
: Appropriate domain value change.Switching the
DOMAIN
from"integration_blueprint"
to"belgiantrain"
correctly reflects the integration's scope. Ensure that any references in other parts of the codebase have been updated.custom_components/belgiantrain/data.py (3)
1-1
: Descriptive module docstring.This docstring sets a clear context for the new file.
18-18
: Type alias introduced.Using a typed config entry helps ensure consistent references throughout the integration. This is a good practice and aligns with modern typing conventions in Home Assistant.
21-27
: Effective usage of dataclasses.The
BelgiantrainData
dataclass neatly encapsulates the core objects needed for the integration. This structure promotes readability and easy management of your integration data.custom_components/belgiantrain/entity.py (4)
1-1
: Concise descriptive docstring.Renaming the entity docstring clarifies the purpose of this class in line with the updated domain naming.
9-9
: Valid coordinator import.The renamed import is consistent with the included refactoring.
12-13
: Class renaming is consistent.Renaming
IntegrationBlueprintEntity
toBelgiantrainEntity
aligns well with the overall integration rename.
17-17
: Clear constructor definition.Specifying
BelgiantrainDataUpdateCoordinator
as the constructor argument ensures type consistency.custom_components/belgiantrain/coordinator.py (7)
1-1
: Updated docstring matches integration rename.This change provides coherency with the rest of the codebase.
10-12
: Refactored exception imports.Importing
BelgiantrainApiClientAuthenticationError
andBelgiantrainApiClientError
for domain-specific handling is a logical improvement.
16-16
: Appropriate config entry import.Switching from
IntegrationBlueprintConfigEntry
toBelgiantrainConfigEntry
is on par with the domain rename.
20-20
: Class renamed to foster clarity.The new class name clarifies its responsibility for updating data in the Belgiantrain integration.
23-23
: Typed config entry reference.Explicitly annotating
config_entry
withBelgiantrainConfigEntry
improves type checking and maintainability.
29-29
: Proper handling of authentication errors.Raising
ConfigEntryAuthFailed
ensures precise error management for invalid credentials.
31-31
: Proper handling of API errors.Raising
UpdateFailed
effectively flags a recoverable failure without bringing down the entire integration.custom_components/belgiantrain/sensor.py (7)
1-1
: Docstring updated to reflect new integration name.
This line correctly updates the integration docstring from “integration_blueprint” to “belgiantrain,” ensuring clarity of purpose.
9-9
: Import statement updated to the new entity class.
Replacing the old import withBelgiantrainEntity
aligns with the refactor and maintains consistency.
15-16
: Updated imports to BelgiantrainDataUpdateCoordinator and BelgiantrainConfigEntry.
These imports align with the new naming scheme and reflect the correct types used throughout the codebase.
20-21
: Revised entity description to 'Belgiantrain Sensor.'
Changing the key and name to “belgiantrain” clarifies the sensor’s integration context.
29-29
: Refined type hint for the configuration entry.
Switching fromIntegrationBlueprintConfigEntry
toBelgiantrainConfigEntry
ensures consistency across modules.
34-34
: Updated to instantiate the BelgiantrainSensor.
This ensures that the correct sensor class is created with the latest naming.
42-47
: Renamed the sensor class and constructor signature.
Renaming fromIntegrationBlueprintSensor
toBelgiantrainSensor
(and updating the coordinator type) completes the refactor. The logic remains sound, and no further changes are needed.custom_components/belgiantrain/binary_sensor.py (7)
1-1
: Docstring updated to reflect new integration context.
This helps maintain uniformity across modules.
13-13
: Imported BelgiantrainEntity correctly.
This change further aligns the binary sensor with the Belgiantrain integration.
19-20
: Coordinator import references updated.
UsingBelgiantrainDataUpdateCoordinator
andBelgiantrainConfigEntry
fosters consistency in naming.
24-25
: Entity description key and name updated.
Renaming to “belgiantrain” clarifies the purpose and avoids confusion with the old blueprint.
33-33
: Configuration entry type changed.
Switching toBelgiantrainConfigEntry
aligns with the new integration’s naming convention.
38-38
: Entities now use the BelgiantrainBinarySensor class.
Ensuring the new class is instantiated addresses the refactor thoroughly.
46-47
: Class renamed to BelgiantrainBinarySensor and constructor updated.
Renaming fromIntegrationBlueprintBinarySensor
toBelgiantrainBinarySensor
(with the updated coordinator parameter) consolidates the migration to the new integration.Also applies to: 51-51
custom_components/belgiantrain/switch.py (7)
1-1
: Docstring updated to 'belgiantrain.'
This reflects the integration rename in the switch platform.
9-9
: Import replaced with BelgiantrainEntity.
This continues the consistent shift away from the blueprint references.
15-16
: Coordinator imports reference 'Belgiantrain' now.
This ensures correct usage of the new classes in the switch platform.
20-21
: Switch entity description updated to 'Belgiantrain Switch.'
Renaming clarifies the relationship to the Belgiantrain integration.
29-29
: async_setup_entry now takes BelgiantrainConfigEntry.
This type hint change matches the new integration naming and data structures.
34-34
: Switched entity creation to BelgiantrainSwitch.
Instances are now properly tied to the updated switch class.
42-43
: Renaming the class and constructor argument.
Changing fromIntegrationBlueprintSwitch
toBelgiantrainSwitch
(with the updated coordinator parameter) completes the switch platform rename.Also applies to: 47-47
custom_components/belgiantrain/api.py (7)
12-14
: Renamed general API error class to BelgiantrainApiClientError.
This rename is consistent with the move away from the blueprint references.
16-18
: Renamed communication error class to BelgiantrainApiClientCommunicationError.
This preserves the error-handling logic under a more relevant name.
22-24
: Renamed authentication error class to BelgiantrainApiClientAuthenticationError.
This aligns the authentication error handling with the new integration naming.
32-32
: Raising BelgiantrainApiClientAuthenticationError on invalid credentials.
Switching from the old blueprint exception ensures correct error references.
38-38
: Renamed the API client to BelgiantrainApiClient.
This is a key part of the project’s refactoring, reflecting the integration’s new identity.
89-94
: Raising BelgiantrainApiClientCommunicationError for errors fetching data.
Replacing old blueprint communication errors preserves the same logic under a new class name.
99-99
: Raising the renamed BelgiantrainApiClientError.
This finalizes the transition to Belgiantrain naming conventions for general exceptions.custom_components/belgiantrain/__init__.py (3)
1-20
: LGTM! Clean import structure and proper type handling.The module-level organization follows best practices with:
- Clear docstring describing the integration's purpose
- Proper separation of runtime and type-checking imports
- Well-organized import groups
Line range hint
42-54
: Verify the update interval for SNCB/NMBS data.The coordinator is configured with a 1-hour update interval. Please verify if this is appropriate for SNCB/NMBS train data, which might need more frequent updates.
Could you confirm if 1 hour is the optimal interval for train schedule updates? Consider factors like:
- Real-time train status changes
- API rate limits
- User experience requirements
🧰 Tools
🪛 Ruff (0.8.2)
22-22: Missing author in TODO; try:
# TODO(<author_name>): ...
or# TODO @<author_name>: ...
(TD002)
22-22: Missing colon in TODO
(TD004)
22-22: Missing issue link on the line following this TODO
(TD003)
22-22: Line contains TODO, consider resolving the issue
(FIX002)
31-31: Missing author in TODO; try:
# TODO(<author_name>): ...
or# TODO @<author_name>: ...
(TD002)
31-31: Missing colon in TODO
(TD004)
31-31: Line contains TODO, consider resolving the issue
(FIX002)
38-38: Missing author in TODO; try:
# TODO(<author_name>): ...
or# TODO @<author_name>: ...
(TD002)
38-38: Missing colon in TODO
(TD004)
38-38: Missing issue link on the line following this TODO
(TD003)
38-38: Line contains TODO, consider resolving the issue
(FIX002)
39-39: Missing author in TODO; try:
# TODO(<author_name>): ...
or# TODO @<author_name>: ...
(TD002)
39-39: Missing colon in TODO
(TD004)
39-39: Missing issue link on the line following this TODO
(TD003)
39-39: Line contains TODO, consider resolving the issue
(FIX002)
40-40: Missing author in TODO; try:
# TODO(<author_name>): ...
or# TODO @<author_name>: ...
(TD002)
40-40: Missing colon in TODO
(TD004)
40-40: Missing issue link on the line following this TODO
(TD003)
40-40: Line contains TODO, consider resolving the issue
(FIX002)
41-41: Found commented-out code
Remove commented-out code
(ERA001)
🪛 GitHub Actions: Lint
[warning] 22-22: Multiple TODO issues: Missing author, missing colon, missing issue link, and needs resolution
[warning] 31-40: Multiple TODO comments need proper formatting with author, colon, and issue links
[warning] 41-41: Found commented-out code that should be removed: 'entry.runtime_data = MyAPI(...)'
22-28
: 🛠️ Refactor suggestionAddress contradictory TODO comment and platform configuration.
The TODO comment suggests limiting to 1 platform for the initial PR, but 3 platforms are configured. Additionally, the TODO comment needs proper formatting.
Verify if all three platforms are intentional:
Update the TODO comment following the proper format:
-# TODO List the platforms that you want to support. -# For your initial PR, limit it to 1 platform. +# TODO(@tjorim): Verify platform support requirements +# Issue: <link-to-issue> +# Consider limiting platforms for initial PR if needed✅ Verification successful
All three platforms are properly implemented - TODO comment can be removed
The verification shows that all three platforms (sensor, binary_sensor, and switch) have their corresponding implementation files with proper platform-specific entity classes and imports. Since this appears to be a complete implementation rather than an initial PR, the TODO comment is outdated and can be safely removed.
- Remove the TODO comment block as it's no longer relevant
- Keep the current platform configuration as is since all platforms are properly implemented
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Check for platform-specific files and their implementations for platform in sensor binary_sensor switch; do echo "Checking $platform implementation..." if [ -f "custom_components/belgiantrain/$platform.py" ]; then echo "Found $platform.py:" head -n 10 "custom_components/belgiantrain/$platform.py" else echo "$platform.py not found" fi doneLength of output: 1595
🧰 Tools
🪛 Ruff (0.8.2)
22-22: Missing author in TODO; try:
# TODO(<author_name>): ...
or# TODO @<author_name>: ...
(TD002)
22-22: Missing colon in TODO
(TD004)
22-22: Missing issue link on the line following this TODO
(TD003)
22-22: Line contains TODO, consider resolving the issue
(FIX002)
🪛 GitHub Actions: Lint
[warning] 22-22: Multiple TODO issues: Missing author, missing colon, missing issue link, and needs resolution
# TODO Update entry annotation | ||
# https://developers.home-assistant.io/docs/config_entries_index/#setting-up-an-entry | ||
async def async_setup_entry( | ||
hass: HomeAssistant, | ||
entry: IntegrationBlueprintConfigEntry, | ||
entry: BelgiantrainConfigEntry, | ||
) -> bool: | ||
"""Set up this integration using UI.""" | ||
coordinator = BlueprintDataUpdateCoordinator( | ||
"""Set up the SNCB/NMBS integration from a config entry using UI.""" | ||
# TODO 1. Create API instance | ||
# TODO 2. Validate the API connection (and authentication) | ||
# TODO 3. Store an API object for your platforms to access | ||
# entry.runtime_data = MyAPI(...) |
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.
🛠️ Refactor suggestion
Clean up TODO comments and remove commented code.
Multiple TODOs need proper formatting and the commented-out code should be removed.
Apply this diff:
-# TODO Update entry annotation
+# TODO(@tjorim): Update entry annotation with proper type hints
+# Issue: <link-to-issue>
# https://developers.home-assistant.io/docs/config_entries_index/#setting-up-an-entry
async def async_setup_entry(
hass: HomeAssistant,
entry: BelgiantrainConfigEntry,
) -> bool:
"""Set up the SNCB/NMBS integration from a config entry using UI."""
- # TODO 1. Create API instance
- # TODO 2. Validate the API connection (and authentication)
- # TODO 3. Store an API object for your platforms to access
- # entry.runtime_data = MyAPI(...)
+ # TODO(@tjorim): Implement API validation
+# Issue: <link-to-issue>
+# 1. Validate the API connection and authentication
+# 2. Consider implementing connection error handling
Committable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 Ruff (0.8.2)
31-31: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
31-31: Missing colon in TODO
(TD004)
31-31: Line contains TODO, consider resolving the issue
(FIX002)
38-38: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
38-38: Missing colon in TODO
(TD004)
38-38: Missing issue link on the line following this TODO
(TD003)
38-38: Line contains TODO, consider resolving the issue
(FIX002)
39-39: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
39-39: Missing colon in TODO
(TD004)
39-39: Missing issue link on the line following this TODO
(TD003)
39-39: Line contains TODO, consider resolving the issue
(FIX002)
40-40: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
40-40: Missing colon in TODO
(TD004)
40-40: Missing issue link on the line following this TODO
(TD003)
40-40: Line contains TODO, consider resolving the issue
(FIX002)
41-41: Found commented-out code
Remove commented-out code
(ERA001)
🪛 GitHub Actions: Lint
[warning] 31-40: Multiple TODO comments need proper formatting with author, colon, and issue links
[warning] 41-41: Found commented-out code that should be removed: 'entry.runtime_data = MyAPI(...)'
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
🧹 Nitpick comments (11)
.devcontainer/devcontainer.json (1)
Line range hint
32-55
: Consider keeping Pylance for enhanced Python language support.While the current extensions are good, Pylance provides enhanced type checking and IntelliSense features that complement the basic Python extension.
Consider adding back the Pylance extension:
"extensions": [ "charliermarsh.ruff", "github.vscode-pull-request-github", - "ms-python.python" + "ms-python.python", + "ms-python.vscode-pylance" ],custom_components/belgiantrain/data.py (1)
16-17
: Address TODO items and follow recommended formatting.
The static analysis suggests including an author, colon, and a link on the next line. For instance:-# TODO Create ConfigEntry type alias with API object -# TODO Rename type alias and update all entry annotations +# TODO(@maintainer): Create ConfigEntry type alias with API object +# Link: https://github.com/tjorim/belgiantrain/issues/2 +# TODO(@maintainer): Rename type alias and update all entry annotations +# Link: https://github.com/tjorim/belgiantrain/issues/2🧰 Tools
🪛 Ruff (0.8.2)
16-16: Missing author in TODO; try:
# TODO(<author_name>): ...
or# TODO @<author_name>: ...
(TD002)
16-16: Missing colon in TODO
(TD004)
16-16: Missing issue link on the line following this TODO
(TD003)
16-16: Line contains TODO, consider resolving the issue
(FIX002)
17-17: Missing author in TODO; try:
# TODO(<author_name>): ...
or# TODO @<author_name>: ...
(TD002)
17-17: Missing colon in TODO
(TD004)
17-17: Missing issue link on the line following this TODO
(TD003)
17-17: Line contains TODO, consider resolving the issue
(FIX002)
custom_components/belgiantrain/binary_sensor.py (1)
38-38
: Potential improvement for dynamic entity creation.Right now, each entity is built inline. For large expansions, consider dynamically registering only relevant entities based on user config or data from the API.
custom_components/belgiantrain/api.py (3)
32-32
: Consider improved error message.When invalid credentials are detected, you can provide more context by including the URL or request details in the error message if it does not leak sensitive info.
89-94
: Good exception handling for timeouts and communication errors.The approach is robust, though it might help to log the URL or method if feasible.
99-99
: Broad exception.Catching
Exception
is sometimes too broad. Consider narrowing the scope or re-raising specific exceptions.custom_components/belgiantrain/__init__.py (5)
22-22
: Add the recommended fields to the TODO.Static analysis flags a missing author, colon, and issue link. Provide these to comply with the guidelines or consider resolving if it’s already done.
-# TODO List the platforms that you want to support. +# TODO(@YourName): List the platforms that you want to support. +# Issue Link: https://github.com/tjorim/belgiantrain/issues/xx🧰 Tools
🪛 Ruff (0.8.2)
22-22: Missing author in TODO; try:
# TODO(<author_name>): ...
or# TODO @<author_name>: ...
(TD002)
22-22: Missing colon in TODO
(TD004)
22-22: Missing issue link on the line following this TODO
(TD003)
22-22: Line contains TODO, consider resolving the issue
(FIX002)
🪛 GitHub Actions: Lint
[warning] 22-22: TODO statement missing author, colon, and issue link: 'TODO List the platforms that you want to support.'
31-31
: Address the static analysis warnings.“TODO Update entry annotation” lines are missing required fields. You can add an issue link or an author.
-# TODO Update entry annotation +# TODO(@YourName): Update entry annotation +# Issue Link: https://github.com/tjorim/belgiantrain/issues/xx🧰 Tools
🪛 Ruff (0.8.2)
31-31: Missing author in TODO; try:
# TODO(<author_name>): ...
or# TODO @<author_name>: ...
(TD002)
31-31: Missing colon in TODO
(TD004)
31-31: Line contains TODO, consider resolving the issue
(FIX002)
🪛 GitHub Actions: Lint
[warning] 31-31: TODO statement missing author and colon: 'TODO Update entry annotation'
38-40
: Refine or remove commented-out code.Commented-out lines can clutter the code, as flagged by your pipeline. Remove or convert them into an actual code snippet if needed.
-# TODO 1. Create API instance -# TODO 2. Validate the API connection (and authentication) -# TODO 3. Store an API object for your platforms to access +# TODO(@YourName): Create & validate the API instance, store it for use +# Issue Link: https://github.com/tjorim/belgiantrain/issues/xx🧰 Tools
🪛 Ruff (0.8.2)
38-38: Missing author in TODO; try:
# TODO(<author_name>): ...
or# TODO @<author_name>: ...
(TD002)
38-38: Missing colon in TODO
(TD004)
38-38: Missing issue link on the line following this TODO
(TD003)
38-38: Line contains TODO, consider resolving the issue
(FIX002)
39-39: Missing author in TODO; try:
# TODO(<author_name>): ...
or# TODO @<author_name>: ...
(TD002)
39-39: Missing colon in TODO
(TD004)
39-39: Missing issue link on the line following this TODO
(TD003)
39-39: Line contains TODO, consider resolving the issue
(FIX002)
40-40: Missing author in TODO; try:
# TODO(<author_name>): ...
or# TODO @<author_name>: ...
(TD002)
40-40: Missing colon in TODO
(TD004)
40-40: Missing issue link on the line following this TODO
(TD003)
40-40: Line contains TODO, consider resolving the issue
(FIX002)
41-41
: Remove or refine the commented-out code block.The pipeline fails due to detection of commented-out code. If needed, keep it as a descriptive comment or remove it if obsolete.
-# entry.runtime_data = MyAPI(...) +# If needed, reintroduce or remove this snippet.🧰 Tools
🪛 Ruff (0.8.2)
41-41: Found commented-out code
Remove commented-out code
(ERA001)
🪛 GitHub Actions: Lint
[warning] 41-41: Found commented-out code: 'entry.runtime_data = MyAPI(...)'
65-65
: Add author, colon, or issue link to the TODO.Similar to the earlier TODO lines, incorporate the recommended format.
-# TODO Update entry annotation +# TODO(@YourName): Update entry annotation +# Issue Link: https://github.com/tjorim/belgiantrain/issues/xx🧰 Tools
🪛 Ruff (0.8.2)
65-65: Missing author in TODO; try:
# TODO(<author_name>): ...
or# TODO @<author_name>: ...
(TD002)
65-65: Missing colon in TODO
(TD004)
65-65: Missing issue link on the line following this TODO
(TD003)
65-65: Line contains TODO, consider resolving the issue
(FIX002)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (11)
.devcontainer/devcontainer.json
(3 hunks)custom_components/belgiantrain/__init__.py
(2 hunks)custom_components/belgiantrain/api.py
(3 hunks)custom_components/belgiantrain/binary_sensor.py
(2 hunks)custom_components/belgiantrain/const.py
(1 hunks)custom_components/belgiantrain/coordinator.py
(2 hunks)custom_components/belgiantrain/data.py
(1 hunks)custom_components/belgiantrain/entity.py
(1 hunks)custom_components/belgiantrain/sensor.py
(1 hunks)custom_components/belgiantrain/switch.py
(1 hunks)custom_components/integration_blueprint/data.py
(0 hunks)
💤 Files with no reviewable changes (1)
- custom_components/integration_blueprint/data.py
🧰 Additional context used
🪛 GitHub Actions: Lint
custom_components/belgiantrain/entity.py
[warning] 3-12: Import block is un-sorted or un-formatted
custom_components/belgiantrain/__init__.py
[warning] 22-22: TODO statement missing author, colon, and issue link: 'TODO List the platforms that you want to support.'
[warning] 31-31: TODO statement missing author and colon: 'TODO Update entry annotation'
[warning] 41-41: Found commented-out code: 'entry.runtime_data = MyAPI(...)'
🪛 Ruff (0.8.2)
custom_components/belgiantrain/__init__.py
22-22: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
22-22: Missing colon in TODO
(TD004)
22-22: Missing issue link on the line following this TODO
(TD003)
22-22: Line contains TODO, consider resolving the issue
(FIX002)
31-31: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
31-31: Missing colon in TODO
(TD004)
31-31: Line contains TODO, consider resolving the issue
(FIX002)
38-38: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
38-38: Missing colon in TODO
(TD004)
38-38: Missing issue link on the line following this TODO
(TD003)
38-38: Line contains TODO, consider resolving the issue
(FIX002)
39-39: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
39-39: Missing colon in TODO
(TD004)
39-39: Missing issue link on the line following this TODO
(TD003)
39-39: Line contains TODO, consider resolving the issue
(FIX002)
40-40: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
40-40: Missing colon in TODO
(TD004)
40-40: Missing issue link on the line following this TODO
(TD003)
40-40: Line contains TODO, consider resolving the issue
(FIX002)
41-41: Found commented-out code
Remove commented-out code
(ERA001)
65-65: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
65-65: Missing colon in TODO
(TD004)
65-65: Missing issue link on the line following this TODO
(TD003)
65-65: Line contains TODO, consider resolving the issue
(FIX002)
custom_components/belgiantrain/data.py
16-16: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
16-16: Missing colon in TODO
(TD004)
16-16: Missing issue link on the line following this TODO
(TD003)
16-16: Line contains TODO, consider resolving the issue
(FIX002)
17-17: Missing author in TODO; try: # TODO(<author_name>): ...
or # TODO @<author_name>: ...
(TD002)
17-17: Missing colon in TODO
(TD004)
17-17: Missing issue link on the line following this TODO
(TD003)
17-17: Line contains TODO, consider resolving the issue
(FIX002)
🔇 Additional comments (43)
.devcontainer/devcontainer.json (4)
4-5
: LGTM! Good choice of base image and naming.The container name has been appropriately updated to reflect its purpose, and the use of the official Microsoft Python 3.12 image provides a stable and secure base.
Line range hint
20-29
: LGTM! Well-configured port forwarding.The port forwarding configuration is properly set up for Home Assistant's standard port (8123) with appropriate labeling and notifications.
56-56
: LGTM! Standard user configuration.Using the "vscode" user is a secure default for DevContainers.
30-31
: Verify the setup script existence and contents.The post-creation command references a setup script that should be verified.
Let's check the setup script:
✅ Verification successful
Setup script exists and contains appropriate initialization steps
The setup script exists at
scripts/setup
, is executable, and contains proper initialization steps:
- Uses a shebang line for bash
- Sets error handling with
set -e
- Changes to the repository root directory
- Installs Python dependencies from requirements.txt
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Check if the setup script exists and is executable if [ -f "scripts/setup" ]; then echo "Setup script exists" ls -l scripts/setup echo "Setup script contents:" cat scripts/setup else echo "Setup script not found" fiLength of output: 342
custom_components/belgiantrain/sensor.py (8)
1-1
: Docstring renamed to reflect Belgiantrain integration.
This update aligns the sensor platform docstring with the SNCB/NMBS integration branding.
9-9
: Updated import to use BelgiantrainEntity.
The reference to the renamed entity is consistent with the overall refactor.
15-16
: Correct coordinator and config imports.
Switching toBelgiantrainDataUpdateCoordinator
andBelgiantrainConfigEntry
fits the new naming scheme.
20-21
: Adjusted sensor entity descriptions.
Changing the key and name from "integration_blueprint" to "belgiantrain" clarifies the sensor's purpose.
29-29
: Entry type now reflects BelgiantrainConfigEntry.
This maintains consistency with the revised data model.
34-34
: Using BelgiantrainSensor in async_add_entities.
Entities now align with the renamed sensor class.
42-43
: Renamed class to BelgiantrainSensor.
This class extendsBelgiantrainEntity
and maintains sensor behavior appropriately.
47-47
: Updated constructor to accept BelgiantrainDataUpdateCoordinator.
The parameter change ensures consistency with the new coordinator class.custom_components/belgiantrain/const.py (2)
1-1
: Module docstring clarifies SNCB/NMBS integration scope.
This accurately reflects the purpose of the constants file.
7-7
: DOMAIN constant updated to "belgiantrain".
The integration domain is properly renamed.custom_components/belgiantrain/data.py (2)
18-18
: Verify Python version supports type alias syntax.
This syntax (type X = Y
) requires a relatively recent Python version (3.10+). Confirm environment compatibility.
21-27
: Data class definition looks good.
Using adataclass
to groupclient
,coordinator
, andintegration
attributes makes the code cleaner.custom_components/belgiantrain/entity.py (4)
1-1
: Renamed docstring to match the new class name.
Matches the Belgiantrain integration naming scheme.
9-9
: Import references the updated coordinator class.
Points toBelgiantrainDataUpdateCoordinator
, matching the rename.
12-13
: Class name updated to BelgiantrainEntity.
Reflects the broader transition away from the blueprint naming.
17-17
: Constructor uses new coordinator.
Ensures the entity references the correct config entry and device information.custom_components/belgiantrain/coordinator.py (7)
1-1
: Descriptive docstring for belgiantrain coordinator.
Accurately describes the file's role in fetching or updating data.
10-12
: Switched to Belgiantrain-specific exception classes.
Aligns with the renamed API error classes and clarifies error handling context.
16-16
: Config entry type updated to BelgiantrainConfigEntry.
Reflects the newly introduced type alias indata.py
.
20-20
: Class name updated to BelgiantrainDataUpdateCoordinator.
Maintains consistent naming across the integration.
23-23
: Member variable references the correct config entry type.
Confirms the coordinator uses the Belgiantrain config entry.
29-29
: Authentication error handling uses the updated exception name.
This keeps error types in sync with the renamed API client.
31-31
: Error handling updated to BelgiantrainApiClientError.
RaisesUpdateFailed
properly and adheres to the new naming.custom_components/belgiantrain/binary_sensor.py (4)
1-1
: Good docstring update.Renaming the docstring to reflect "belgiantrain" instead of "integration_blueprint" aligns with the rest of the refactor.
33-33
: Ensure references to the old config entry type are removed.All references to
IntegrationBlueprintConfigEntry
are successfully replaced byBelgiantrainConfigEntry
. The usage looks correct here.
46-47
: Class rename appropriate.Transition to
BelgiantrainBinarySensor
is consistent with the new naming. Nicely done.
51-51
: Check coordinator data keys.The property
is_on
checks"title"
. Ensure the upstream code sets"title"
consistently in the coordinator data or handle potential missing keys.✅ Verification successful
Let me verify the coordinator data initialization to ensure consistent handling of the "title" key.
Let me try a different approach to find the coordinator implementation.
Let me check the API client implementation to see how it handles the data.
Let me try one final approach to find the client implementation.
The "title" key is consistently handled throughout the codebase
The verification shows that the "title" key is properly handled:
- The
get()
method with a default empty string is used consistently in both binary_sensor.py and switch.py:.get("title", "")
- The API client has proper methods to set the title (
async_set_title
)- The title is used in the config flow and is a required field during setup
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Searching for all references to 'coordinator.data' to see usage of 'title' key rg -A 5 'coordinator\.data'Length of output: 775
Script:
#!/bin/bash # Search for coordinator class implementation and data initialization ast-grep --pattern 'class BelgiantrainDataUpdateCoordinator { $$$ async_refresh($$$) { $$$ } $$$ }'Length of output: 113
Script:
#!/bin/bash # Search for coordinator class implementation with a more flexible pattern ast-grep --pattern 'class BelgiantrainDataUpdateCoordinator' # Also search for the coordinator file and its content fd coordinator custom_components/belgiantrain --exec cat {}Length of output: 1270
Script:
#!/bin/bash # Search for the API client implementation fd client.py custom_components/belgiantrain --exec cat {} # Also search for any test files that might show the data structure fd test_ custom_components/belgiantrain --exec cat {}Length of output: 119
Script:
#!/bin/bash # Search for the API client class and methods ast-grep --pattern 'async_get_data' # Also search for any references to title setting/getting rg -A 3 'title' custom_components/belgiantrain/Length of output: 2663
custom_components/belgiantrain/switch.py (4)
1-1
: Docstring rename is correct.Renaming the docstring to “Switch platform for belgiantrain” ensures clarity.
20-21
: Consistent naming of device.Switch entity name updated to "Belgiantrain Switch" is consistent with the rest of the integration naming.
42-43
: Class rename consistent.Renaming to
BelgiantrainSwitch
maintains uniformity with the rest of the integration’s classes.
47-47
: Validate assumption about the coordinator data.As with the binary sensor, the switch logic expects
"title"
in coordinator data. Make sure this is always set or gracefully handles missing data.✅ Verification successful
Coordinator data handling for 'title' is consistent across components
The verification shows that both the switch and binary sensor components handle the "title" key consistently using the
.get()
method with a default empty string:
self.coordinator.data.get("title", "")
in bothswitch.py
andbinary_sensor.py
This pattern safely handles missing data by returning an empty string if the "title" key is not present, preventing any potential KeyError exceptions.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Searching for all references to 'coordinator.data' to see usage of 'title' key rg -A 5 'coordinator\.data'Length of output: 775
custom_components/belgiantrain/api.py (3)
12-12
: Exception renaming is correct.Updating the base exception class to
BelgiantrainApiClientError
aligns with the new integration naming.
22-23
: Specific authentication error.Changing to
BelgiantrainApiClientAuthenticationError
is good for clarity.
38-38
: Renaming of the main API client is successful.Ensures consistent naming across the codebase.
custom_components/belgiantrain/__init__.py (5)
1-1
: Docstring references the correct integration.Clear mention of "SNCB/NMBS integration" improves discoverability and user clarity.
20-20
: Leverage type checking effectively.Maintaining
TYPE_CHECKING
references is beneficial for clarity in code editors.
48-49
: Instantiation of the API client is correct.The client creation approach leverages
async_get_clientsession(hass)
effectively.
70-70
: Unload logic is clean.Using
async_unload_platforms
is consistent with best practices for Home Assistant integrations.
76-76
: Reload approach is correct.Steps for unloading and reloading are standard.
"features": { | ||
"ghcr.io/devcontainers-extra/features/apt-packages:1": { | ||
"packages": [ | ||
"ffmpeg", | ||
"libturbojpeg0", | ||
"libpcap-dev" | ||
] | ||
}, | ||
"ghcr.io/devcontainers-extra/features/ruff:1": {}, | ||
"ghcr.io/devcontainers/features/git:1": {}, | ||
"ghcr.io/devcontainers/features/github-cli:1": {}, | ||
"ghcr.io/devcontainers/features/python: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.
💡 Codebase verification
Remove unnecessary system packages from devcontainer configuration
The following apt packages in the devcontainer configuration are not required for this integration and should be removed:
ffmpeg
libturbojpeg0
libpcap-dev
Based on the analysis:
- The project is a simple train schedule integration that uses
pyrail
as its only external requirement - None of the media processing or network capture packages are used in the codebase
- These packages are not required by any of the project's dependencies listed in
requirements.txt
ormanifest.json
- While Home Assistant core does use ffmpeg and turbojpeg, these are not needed for development of this specific integration
🔗 Analysis chain
Verify the necessity of media and network capture packages.
While the development tools (ruff, git, github-cli, python) are appropriate, some of the apt packages seem unrelated to a train schedule integration:
- ffmpeg (media processing)
- libturbojpeg0 (JPEG compression)
- libpcap-dev (packet capture)
Let's check if these packages are required by any dependencies:
Let me gather more information about the usage of these packages in the codebase.
Let me check the requirements file to see if these packages are actually needed.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Search for references to these packages in the project
echo "Searching for package usage..."
rg -i "ffmpeg|turbojpeg|pcap" --type python
# Check if these are required by Home Assistant core
echo "Checking Home Assistant core requirements..."
curl -s https://raw.githubusercontent.com/home-assistant/core/dev/requirements_all.txt | grep -iE "ffmpeg|turbojpeg|pcap"
Length of output: 440
Script:
#!/bin/bash
# Search for references to these packages in all files
echo "Searching for package usage..."
rg -i "ffmpeg|turbojpeg|pcap"
# Look for Python files to understand the project structure
echo -e "\nPython files in the project:"
fd -e py
# Check for configuration or requirement files
echo -e "\nRequirement or configuration files:"
fd -g "*requirements*.txt"
fd -g "*.toml"
fd -g "setup.cfg"
Length of output: 933
Script:
#!/bin/bash
# Check project's requirements
echo "Project requirements:"
cat requirements.txt
# Check manifest or other configuration files that might explain the dependencies
echo -e "\nChecking manifest:"
fd -g "manifest.json" -x cat {}
Length of output: 599
from __future__ import annotations | ||
|
||
from homeassistant.helpers.device_registry import DeviceInfo | ||
from homeassistant.helpers.update_coordinator import CoordinatorEntity | ||
|
||
from .const import ATTRIBUTION | ||
from .coordinator import BlueprintDataUpdateCoordinator | ||
from . import BelgiantrainDataUpdateCoordinator | ||
|
||
|
||
class IntegrationBlueprintEntity(CoordinatorEntity[BlueprintDataUpdateCoordinator]): | ||
"""BlueprintEntity class.""" | ||
class BelgiantrainEntity(CoordinatorEntity[BelgiantrainDataUpdateCoordinator]): |
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.
🛠️ Refactor suggestion
Reorder imports to fix lint pipeline failure.
The pipeline warns that lines 3-12 are un-sorted. Apply the following diff for alphabetical ordering:
from __future__ import annotations
-from homeassistant.helpers.device_registry import DeviceInfo
-from homeassistant.helpers.update_coordinator import CoordinatorEntity
-from .const import ATTRIBUTION
-from . import BelgiantrainDataUpdateCoordinator
+from homeassistant.helpers.device_registry import DeviceInfo
+from homeassistant.helpers.update_coordinator import CoordinatorEntity
+from . import BelgiantrainDataUpdateCoordinator
from .const import ATTRIBUTION
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
from __future__ import annotations | |
from homeassistant.helpers.device_registry import DeviceInfo | |
from homeassistant.helpers.update_coordinator import CoordinatorEntity | |
from .const import ATTRIBUTION | |
from .coordinator import BlueprintDataUpdateCoordinator | |
from . import BelgiantrainDataUpdateCoordinator | |
class IntegrationBlueprintEntity(CoordinatorEntity[BlueprintDataUpdateCoordinator]): | |
"""BlueprintEntity class.""" | |
class BelgiantrainEntity(CoordinatorEntity[BelgiantrainDataUpdateCoordinator]): | |
from __future__ import annotations | |
from homeassistant.helpers.device_registry import DeviceInfo | |
from homeassistant.helpers.update_coordinator import CoordinatorEntity | |
from . import BelgiantrainDataUpdateCoordinator | |
from .const import ATTRIBUTION | |
class BelgiantrainEntity(CoordinatorEntity[BelgiantrainDataUpdateCoordinator]): |
🧰 Tools
🪛 GitHub Actions: Lint
[warning] 3-12: Import block is un-sorted or un-formatted
Revise the directory structure and update the manifest to enhance the SNCB/NMBS integration, including changes to documentation links and removal of obsolete files.
Summary by CodeRabbit
Release Notes
New Features
Documentation
Chores
Refactor