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’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improved error checks #377

Closed
wants to merge 3 commits into from
Closed

Improved error checks #377

wants to merge 3 commits into from

Conversation

IceBotYT
Copy link
Owner

@IceBotYT IceBotYT commented Jan 26, 2025

Description

Improved error checks. Should help with home-assistant/core#126370

Checklist

  • Tests covering the new functionality have been added
  • Documentation has been updated OR the change is too minor to be documented
  • Changes are listed in the CHANGELOG.md OR changes are insignificant

Summary by Sourcery

Implement error handling for GraphQL API responses. Handle "UnauthorizedException" errors and raise an "AuthFailedError".

Bug Fixes:

  • Handle errors raised from the GraphQL API to address issue #126370

Tests:

  • Add tests for the new error handling logic

Copy link

sourcery-ai bot commented Jan 26, 2025

Reviewer's Guide by Sourcery

This pull request introduces a new error handling mechanism for API responses, specifically checking for 'UnauthorizedException' and other API errors. It adds a new method _check_response_errors to handle this logic and integrates it into the existing API call methods.

Sequence diagram for improved API error handling

sequenceDiagram
    participant Client
    participant API
    participant ErrorHandler

    Client->>API: Make API request
    API-->>ErrorHandler: Check response errors
    alt Has errors
        alt UnauthorizedException
            ErrorHandler-->>Client: Raise AuthFailedError
        else Other error
            ErrorHandler-->>Client: Raise ApiError
        end
    else No errors
        ErrorHandler-->>Client: Return True
    end
Loading

Class diagram showing new error handling method

classDiagram
    class NiceGoApi {
        -_check_response_errors(response: dict) bool
        +get_all_barriers() list[Barrier]
        +open_barrier(barrier_id: str) bool
        +close_barrier(barrier_id: str) bool
        +light_on(barrier_id: str) bool
        +light_off(barrier_id: str) bool
    }

    class AuthFailedError {
    }

    class ApiError {
    }

    NiceGoApi ..> AuthFailedError : throws
    NiceGoApi ..> ApiError : throws

    note for NiceGoApi "Added _check_response_errors method
to handle API error responses"
Loading

File-Level Changes

Change Details Files
Added a new method to check for errors in API responses.
  • Implemented _check_response_errors to parse the response for errors.
  • Raise AuthFailedError if the error type is UnauthorizedException.
  • Raise ApiError for other error types.
src/nice_go/nice_go_api.py
Integrated the new error checking method into API calls.
  • Added await self._check_response_errors(data) to get_all_barriers.
  • Added await self._check_response_errors(data) to open_barrier.
  • Added await self._check_response_errors(data) to close_barrier.
  • Added await self._check_response_errors(data) to light_on.
  • Added await self._check_response_errors(data) to light_off.
src/nice_go/nice_go_api.py
Added tests for the new error handling logic.
  • Added test_graphql_error_response to check for ApiError.
  • Added test_graphql_error_response to check for AuthFailedError.
tests/test_nice_go_api.py

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!
  • Generate a plan of action for an issue: Comment @sourcery-ai plan on
    an issue to generate a plan of action for it.

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

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

Hey @IceBotYT - I've reviewed your changes - here's some feedback:

Overall Comments:

  • Please add tests to verify the error handling behavior, particularly for authentication failures and other API errors
Here's what I looked at during the review
  • 🟢 General issues: all looks good
  • 🟢 Security: all looks good
  • 🟢 Testing: all looks good
  • 🟢 Complexity: all looks good
  • 🟢 Documentation: all looks good

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@codecov-commenter
Copy link

codecov-commenter commented Jan 26, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 100.00%. Comparing base (cd95a8a) to head (29d927e).
Report is 80 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main      #377   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           15        15           
  Lines         1173      1194   +21     
=========================================
+ Hits          1173      1194   +21     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@IceBotYT
Copy link
Owner Author

@sourcery-ai review

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

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

Hey @IceBotYT - I've reviewed your changes - here's some feedback:

Overall Comments:

  • The PR includes tests but the checklist item for tests is not checked - please update the checklist
  • Since this fixes a documented issue (#126370), please add an entry to the CHANGELOG.md
Here's what I looked at during the review
  • 🟡 General issues: 2 issues found
  • 🟢 Security: all looks good
  • 🟡 Testing: 1 issue found
  • 🟢 Complexity: all looks good
  • 🟢 Documentation: all looks good

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

src/nice_go/nice_go_api.py Show resolved Hide resolved
src/nice_go/nice_go_api.py Outdated Show resolved Hide resolved
tests/test_nice_go_api.py Show resolved Hide resolved
@IceBotYT IceBotYT closed this Jan 26, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants