diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4d464b11..4d13935e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -57,7 +57,7 @@ repos: # additional_dependencies: [flake8-bugbear] - repo: https://github.com/pre-commit/mirrors-mypy - rev: 'v0.910' # Use the sha / tag you want to point at + rev: 'v1.9.0' # Use the sha / tag you want to point at hooks: - id: mypy exclude: ^templates/ diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d20bbf64..35d526d6 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,6 +5,8 @@ Changelog Next ==== +- Fix OAuth2 flow in GSheets (#438) + Version 1.2.17 - 2024-02-23 =========================== diff --git a/setup.cfg b/setup.cfg index af8c68b2..cbe65e45 100644 --- a/setup.cfg +++ b/setup.cfg @@ -134,6 +134,7 @@ githubapi = python-jsonpath>=0.10.3 gsheetsapi = google-auth>=1.23.0 + pyopenssl>=24.0.0 holidaysmemory = holidays>=0.23 htmltableapi = diff --git a/src/shillelagh/adapters/api/gsheets/adapter.py b/src/shillelagh/adapters/api/gsheets/adapter.py index d2fafad3..3e45d74d 100644 --- a/src/shillelagh/adapters/api/gsheets/adapter.py +++ b/src/shillelagh/adapters/api/gsheets/adapter.py @@ -251,8 +251,11 @@ def _run_query(self, sql: str) -> QueryResults: if response.encoding is None: response.encoding = "utf-8" - if response.status_code != 200: - raise ProgrammingError(response.text) + try: + response.raise_for_status() + except Exception as ex: + self._check_permissions(ex) + raise ProgrammingError(response.text) from ex if response.text.startswith(JSON_PAYLOAD_PREFIX): result = json.loads(response.text[len(JSON_PAYLOAD_PREFIX) :]) diff --git a/src/shillelagh/adapters/api/gsheets/lib.py b/src/shillelagh/adapters/api/gsheets/lib.py index 4ec1c6ce..5a50ebf2 100644 --- a/src/shillelagh/adapters/api/gsheets/lib.py +++ b/src/shillelagh/adapters/api/gsheets/lib.py @@ -187,11 +187,11 @@ def get_index_from_letters(letters: str) -> int: """ base26 = reversed([string.ascii_uppercase.index(letter) + 1 for letter in letters]) - return ( + return int( sum( value * (len(string.ascii_uppercase) ** i) for i, value in enumerate(base26) ) - - 1 + - 1, ) diff --git a/src/shillelagh/backends/apsw/dialects/gsheets.py b/src/shillelagh/backends/apsw/dialects/gsheets.py index 2dfef2d4..fa7e0a63 100644 --- a/src/shillelagh/backends/apsw/dialects/gsheets.py +++ b/src/shillelagh/backends/apsw/dialects/gsheets.py @@ -146,7 +146,7 @@ def do_ping(self, dbapi_connection: _ConnectionFairy) -> bool: def get_table_names( # pylint: disable=unused-argument self, connection: _ConnectionFairy, - schema: str = None, + schema: Optional[str] = None, sqlite_include_internal: bool = False, **kwargs: Any, ) -> List[str]: diff --git a/tests/adapters/api/gsheets/adapter_test.py b/tests/adapters/api/gsheets/adapter_test.py index e74c2752..9e05df5e 100644 --- a/tests/adapters/api/gsheets/adapter_test.py +++ b/tests/adapters/api/gsheets/adapter_test.py @@ -752,6 +752,11 @@ def test_api_bugs(mocker: MockerFixture) -> None: status_code=400, headers={}, ) + adapter.register_uri( + "GET", + "https://sheets.googleapis.com/v4/spreadsheets/3/developerMetadata/0", + status_code=200, + ) connection = connect(":memory:", ["gsheetsapi"]) cursor = connection.cursor()