diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ac13db..198e5b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/2.0.0/), ### Fixed - Corrected a bug in `language_tool_python.config_file.LanguageToolConfig` where directory paths were incorrectly rejected by the path validator. - Fixed a bug in `LanguageTool._start_server_on_free_port` where `_url` was not updated when retrying on a different port, causing all subsequent server requests to target the wrong (original) port. +- Fixed a bug in `LanguageTool._query_server` where `RateLimitError` was only raised when the rate-limit response body was invalid JSON, a valid JSON body with status 426 was silently returned as data instead (for now, the body from LanguageTool for rate-limiting responses is "Upgrade Required", which is not valid JSON, but this may change in the future). ### Removed - **Breaking:** Removed all functions and classes previously deprecated in v3.3.0: diff --git a/src/language_tool_python/server.py b/src/language_tool_python/server.py index fda42c5..4b243a1 100644 --- a/src/language_tool_python/server.py +++ b/src/language_tool_python/server.py @@ -1054,6 +1054,12 @@ def _query_server( timeout=self._TIMEOUT, ) with response_context as response: + if response.status_code == _HTTP_STATUS_RATE_LIMIT: + err = ( + "You have exceeded the rate limit for the free " + "LanguageTool API. Please try again later." + ) + raise RateLimitError(err) try: data: object = response.json() except json.decoder.JSONDecodeError as e: @@ -1063,12 +1069,6 @@ def _query_server( e, ) logger.debug("Status code: %s", response.status_code) - if response.status_code == _HTTP_STATUS_RATE_LIMIT: - err = ( - "You have exceeded the rate limit for the free " - "LanguageTool API. Please try again later." - ) - raise RateLimitError(err) from e raise LanguageToolError( _decode_response_content(response), ) from e