Skip to content
This repository was archived by the owner on Sep 8, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
fc369d6
chore(deps-dev): bump pre-commit from 2.15.0 to 2.16.0
dependabot[bot] Dec 3, 2021
6d21ae4
Merge pull request #6 from leynier/dependabot/pip/main/pre-commit-2.16.0
leynier Dec 3, 2021
a905349
chore(deps-dev): bump faker from 9.8.2 to 9.9.0
dependabot[bot] Dec 3, 2021
6d8c9f0
Merge pull request #5 from leynier/dependabot/pip/main/faker-9.9.0
leynier Dec 3, 2021
baa0acf
chore: fix ci action with ignore chore commits
leynier Dec 3, 2021
5d64552
chore(deps-dev): bump sphinx from 4.3.0 to 4.3.1
dependabot[bot] Dec 3, 2021
adb5201
Merge pull request #4 from leynier/dependabot/pip/main/sphinx-4.3.1
leynier Dec 3, 2021
041406a
fix: error in recovery_mode of get_session_from_url
leynier Dec 3, 2021
669d9df
Merge remote-tracking branch 'remotes/upstream/main'
leynier Dec 4, 2021
59635a9
chore: update dependencies
leynier Dec 4, 2021
bbc76f5
chore(deps-dev): bump black from 21.11b1 to 21.12b0
dependabot[bot] Dec 6, 2021
475e9f6
chore(deps-dev): bump faker from 9.9.0 to 10.0.0
dependabot[bot] Dec 8, 2021
7629707
Merge pull request #7 from leynier/dependabot/pip/main/black-21.12b0
leynier Dec 11, 2021
96d390c
fix: merged default headers instead of replace
leynier Dec 11, 2021
ef250f5
fix: error in from_dict of APIError
leynier Dec 11, 2021
7408f5f
Merge branch 'main' into dependabot/pip/main/faker-10.0.0
leynier Dec 11, 2021
31b537a
Merge pull request #8 from leynier/dependabot/pip/main/faker-10.0.0
leynier Dec 11, 2021
3130b5a
chore(deps): update poetry.lock
leynier Dec 11, 2021
ad504ae
chore: add --remove-orphans to clean_infra and increase sleep time
leynier Dec 11, 2021
360cc0d
chore: add noqa comment
leynier Dec 11, 2021
4210dba
chore(deps-dev): bump commitizen from 2.20.0 to 2.20.2
dependabot[bot] Dec 14, 2021
838b136
Merge pull request #9 from leynier/dependabot/pip/main/commitizen-2.20.2
leynier Dec 17, 2021
882388f
chore(deps): update poetry.lock
leynier Dec 17, 2021
0f05aa8
Merge remote-tracking branch 'remotes/upstream/main'
leynier Dec 17, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:

publish:
needs: test
if: ${{ !startsWith(github.event.head_commit.message, 'bump:') && github.ref == 'refs/heads/main' && github.event_name == 'push' }}
if: ${{ !startsWith(github.event.head_commit.message, 'bump:') && !startsWith(github.event.head_commit.message, 'chore') && github.ref == 'refs/heads/main' && github.event_name == 'push' }}
runs-on: ubuntu-latest
name: "Bump version, create changelog and publish"
steps:
Expand Down
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ run_infra:

clean_infra:
cd infra &&\
docker-compose down &&\
docker-compose down --remove-orphans &&\
docker system prune -a --volumes -f

run_tests: run_infra sleep tests
Expand All @@ -33,4 +33,4 @@ build_run_tests: build_sync run_tests
echo "Done"

sleep:
sleep 10
sleep 20
16 changes: 11 additions & 5 deletions gotrue/_async/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,13 @@ def __init__(
self,
*,
url: str = GOTRUE_URL,
headers: Dict[str, str] = DEFAULT_HEADERS,
headers: Dict[str, str] = {},
auto_refresh_token: bool = True,
persist_session: bool = True,
local_storage: AsyncSupportedStorage = AsyncMemoryStorage(),
cookie_options: CookieOptions = CookieOptions.parse_obj(COOKIE_OPTIONS),
api: Optional[AsyncGoTrueAPI] = None,
replace_default_headers: bool = False,
) -> None:
"""Create a new client

Expand Down Expand Up @@ -64,7 +65,12 @@ def __init__(
self.auto_refresh_token = auto_refresh_token
self.persist_session = persist_session
self.local_storage = local_storage
args = {"url": url, "headers": headers, "cookie_options": cookie_options}
empty_or_default_headers = {} if replace_default_headers else DEFAULT_HEADERS
args = {
"url": url,
"headers": {**empty_or_default_headers, **headers},
"cookie_options": cookie_options,
}
self.api = api if api else AsyncGoTrueAPI(**args)

async def __aenter__(self) -> AsyncGoTrueClient:
Expand Down Expand Up @@ -411,12 +417,12 @@ async def get_session_from_url(
raise APIError(error_description[0], 400)
if not access_token or not access_token[0]:
raise APIError("No access_token detected.", 400)
if not expires_in or not expires_in[0]:
raise APIError("No expires_in detected.", 400)
if not refresh_token or not refresh_token[0]:
raise APIError("No refresh_token detected.", 400)
if not token_type or not token_type[0]:
raise APIError("No token_type detected.", 400)
if not expires_in or not expires_in[0]:
raise APIError("No expires_in detected.", 400)
try:
expires_at = round(time()) + int(expires_in[0])
except ValueError:
Expand All @@ -436,7 +442,7 @@ async def get_session_from_url(
await self._save_session(session=session)
recovery_mode = query.get("type")
self._notify_all_subscribers(event=AuthChangeEvent.SIGNED_IN)
if recovery_mode == "recovery":
if recovery_mode and recovery_mode[0] == "recovery":
self._notify_all_subscribers(event=AuthChangeEvent.PASSWORD_RECOVERY)
return session

Expand Down
16 changes: 11 additions & 5 deletions gotrue/_sync/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,13 @@ def __init__(
self,
*,
url: str = GOTRUE_URL,
headers: Dict[str, str] = DEFAULT_HEADERS,
headers: Dict[str, str] = {},
auto_refresh_token: bool = True,
persist_session: bool = True,
local_storage: SyncSupportedStorage = SyncMemoryStorage(),
cookie_options: CookieOptions = CookieOptions.parse_obj(COOKIE_OPTIONS),
api: Optional[SyncGoTrueAPI] = None,
replace_default_headers: bool = False,
) -> None:
"""Create a new client

Expand Down Expand Up @@ -64,7 +65,12 @@ def __init__(
self.auto_refresh_token = auto_refresh_token
self.persist_session = persist_session
self.local_storage = local_storage
args = {"url": url, "headers": headers, "cookie_options": cookie_options}
empty_or_default_headers = {} if replace_default_headers else DEFAULT_HEADERS
args = {
"url": url,
"headers": {**empty_or_default_headers, **headers},
"cookie_options": cookie_options,
}
self.api = api if api else SyncGoTrueAPI(**args)

def __enter__(self) -> SyncGoTrueClient:
Expand Down Expand Up @@ -411,12 +417,12 @@ def get_session_from_url(
raise APIError(error_description[0], 400)
if not access_token or not access_token[0]:
raise APIError("No access_token detected.", 400)
if not expires_in or not expires_in[0]:
raise APIError("No expires_in detected.", 400)
if not refresh_token or not refresh_token[0]:
raise APIError("No refresh_token detected.", 400)
if not token_type or not token_type[0]:
raise APIError("No token_type detected.", 400)
if not expires_in or not expires_in[0]:
raise APIError("No expires_in detected.", 400)
try:
expires_at = round(time()) + int(expires_in[0])
except ValueError:
Expand All @@ -436,7 +442,7 @@ def get_session_from_url(
self._save_session(session=session)
recovery_mode = query.get("type")
self._notify_all_subscribers(event=AuthChangeEvent.SIGNED_IN)
if recovery_mode == "recovery":
if recovery_mode and recovery_mode[0] == "recovery":
self._notify_all_subscribers(event=AuthChangeEvent.PASSWORD_RECOVERY)
return session

Expand Down
21 changes: 11 additions & 10 deletions gotrue/exceptions.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from __future__ import annotations

from dataclasses import asdict, dataclass
from inspect import signature
from typing import Any, Dict


Expand All @@ -16,15 +15,8 @@ def __post_init__(self) -> None:

@classmethod
def parse_dict(cls, **json: dict) -> APIError:
cls_fields = {field for field in signature(cls).parameters}
native_args, new_args = {}, {}
for name, val in json.items():
if name in cls_fields:
native_args[name] = val
else:
new_args[name] = val
ret = cls(**native_args)
for new_name, new_val in new_args.items():
ret = cls(msg="Unknown error", code=-1)
for new_name, new_val in json.items():
setattr(ret, new_name, new_val)
return ret

Expand All @@ -44,6 +36,15 @@ def from_dict(cls, data: dict) -> APIError:
msg=data["error_description"],
code=code,
)
if "message" in data:
try:
code = int(data.get("code", -1))
except ValueError:
code = -1
return APIError(
msg=data["message"],
code=code,
)
return cls.parse_dict(**data)

def to_dict(self) -> Dict[str, Any]:
Expand Down
Loading