Skip to content

Commit 0fedac9

Browse files
Merge pull request #398 from supertokens/fix/mt-error-handler
fix: Remove error handlers from multitenancy recipe
2 parents bd91b74 + 5287c18 commit 0fedac9

File tree

8 files changed

+6
-97
lines changed

8 files changed

+6
-97
lines changed

supertokens_python/recipe/multitenancy/__init__.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,16 @@
2626

2727
from ...recipe_module import RecipeModule
2828
from .interfaces import TypeGetAllowedDomainsForTenantId
29-
from .utils import InputErrorHandlers, InputOverrideConfig
29+
from .utils import InputOverrideConfig
3030

3131

3232
def init(
3333
get_allowed_domains_for_tenant_id: Union[
3434
TypeGetAllowedDomainsForTenantId, None
3535
] = None,
36-
error_handlers: Union[InputErrorHandlers, None] = None,
3736
override: Union[InputOverrideConfig, None] = None,
3837
) -> Callable[[AppInfo], RecipeModule]:
3938
return recipe.MultitenancyRecipe.init(
4039
get_allowed_domains_for_tenant_id,
41-
error_handlers,
4240
override,
4341
)

supertokens_python/recipe/multitenancy/exceptions.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,5 @@
1616
from supertokens_python.exceptions import SuperTokensError
1717

1818

19-
class TenantDoesNotExistError(SuperTokensError):
20-
pass
21-
22-
23-
class RecipeDisabledForTenantError(SuperTokensError):
19+
class MultitenancyError(SuperTokensError):
2420
pass

supertokens_python/recipe/multitenancy/recipe.py

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747

4848
from .api import handle_login_methods_api
4949
from .constants import LOGIN_METHODS
50-
from .exceptions import TenantDoesNotExistError, RecipeDisabledForTenantError
50+
from .exceptions import MultitenancyError
5151
from .interfaces import (
5252
LoginMethodsGetOkResult,
5353
ThirdPartyProvider,
@@ -56,7 +56,6 @@
5656
LoginMethodThirdParty,
5757
)
5858
from .utils import (
59-
InputErrorHandlers,
6059
InputOverrideConfig,
6160
validate_and_normalise_user_input,
6261
)
@@ -73,13 +72,11 @@ def __init__(
7372
get_allowed_domains_for_tenant_id: Optional[
7473
TypeGetAllowedDomainsForTenantId
7574
] = None,
76-
error_handlers: Union[InputErrorHandlers, None] = None,
7775
override: Union[InputOverrideConfig, None] = None,
7876
) -> None:
7977
super().__init__(recipe_id, app_info)
8078
self.config = validate_and_normalise_user_input(
8179
get_allowed_domains_for_tenant_id,
82-
error_handlers,
8380
override,
8481
)
8582

@@ -105,7 +102,7 @@ def __init__(
105102
)
106103

107104
def is_error_from_this_recipe_based_on_instance(self, err: Exception) -> bool:
108-
return isinstance(err, (TenantDoesNotExistError, RecipeDisabledForTenantError))
105+
return isinstance(err, MultitenancyError)
109106

110107
def get_apis_handled(self) -> List[APIHandled]:
111108
return [
@@ -144,17 +141,7 @@ async def handle_api_request(
144141
async def handle_error(
145142
self, request: BaseRequest, err: SuperTokensError, response: BaseResponse
146143
) -> BaseResponse:
147-
if isinstance(err, TenantDoesNotExistError):
148-
return await self.config.error_handlers.on_tenant_does_not_exist(
149-
err, request, response
150-
)
151-
152-
if isinstance(err, RecipeDisabledForTenantError):
153-
return await self.config.error_handlers.on_recipe_disabled_for_tenant(
154-
err, request, response
155-
)
156-
157-
raise Exception("should never come here")
144+
raise err
158145

159146
def get_all_cors_headers(self) -> List[str]:
160147
return []
@@ -164,7 +151,6 @@ def init(
164151
get_allowed_domains_for_tenant_id: Union[
165152
TypeGetAllowedDomainsForTenantId, None
166153
] = None,
167-
error_handlers: Union[InputErrorHandlers, None] = None,
168154
override: Union[InputOverrideConfig, None] = None,
169155
):
170156
def func(app_info: AppInfo):
@@ -173,7 +159,6 @@ def func(app_info: AppInfo):
173159
MultitenancyRecipe.recipe_id,
174160
app_info,
175161
get_allowed_domains_for_tenant_id,
176-
error_handlers,
177162
override,
178163
)
179164

supertokens_python/recipe/multitenancy/utils.py

Lines changed: 0 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
from supertokens_python.framework import BaseRequest, BaseResponse
2020
from supertokens_python.utils import (
2121
resolve,
22-
send_non_200_response_with_message,
2322
)
2423

2524
if TYPE_CHECKING:
@@ -62,45 +61,6 @@ async def on_recipe_disabled_for_tenant(
6261
)
6362

6463

65-
class InputErrorHandlers(ErrorHandlers):
66-
def __init__(
67-
self,
68-
on_tenant_does_not_exist: Union[
69-
None,
70-
Callable[
71-
[SuperTokensError, BaseRequest, BaseResponse],
72-
Union[BaseResponse, Awaitable[BaseResponse]],
73-
],
74-
] = None,
75-
on_recipe_disabled_for_tenant: Union[
76-
None,
77-
Callable[
78-
[SuperTokensError, BaseRequest, BaseResponse],
79-
Union[BaseResponse, Awaitable[BaseResponse]],
80-
],
81-
] = None,
82-
):
83-
if on_tenant_does_not_exist is None:
84-
on_tenant_does_not_exist = default_on_tenant_does_not_exist
85-
86-
if on_recipe_disabled_for_tenant is None:
87-
on_recipe_disabled_for_tenant = default_on_recipe_disabled_for_tenant
88-
89-
super().__init__(on_tenant_does_not_exist, on_recipe_disabled_for_tenant)
90-
91-
92-
async def default_on_tenant_does_not_exist(
93-
err: SuperTokensError, _: BaseRequest, response: BaseResponse
94-
):
95-
return send_non_200_response_with_message(str(err), 422, response)
96-
97-
98-
async def default_on_recipe_disabled_for_tenant(
99-
err: SuperTokensError, _: BaseRequest, response: BaseResponse
100-
):
101-
return send_non_200_response_with_message(str(err), 403, response)
102-
103-
10464
class InputOverrideConfig:
10565
def __init__(
10666
self,
@@ -125,33 +85,23 @@ class MultitenancyConfig:
12585
def __init__(
12686
self,
12787
get_allowed_domains_for_tenant_id: Optional[TypeGetAllowedDomainsForTenantId],
128-
error_handlers: ErrorHandlers,
12988
override: OverrideConfig,
13089
):
13190
self.get_allowed_domains_for_tenant_id = get_allowed_domains_for_tenant_id
132-
self.error_handlers = error_handlers
13391
self.override = override
13492

13593

13694
def validate_and_normalise_user_input(
13795
get_allowed_domains_for_tenant_id: Optional[TypeGetAllowedDomainsForTenantId],
138-
error_handlers: Union[ErrorHandlers, None] = None,
13996
override: Union[InputOverrideConfig, None] = None,
14097
) -> MultitenancyConfig:
141-
if error_handlers is not None and not isinstance(error_handlers, ErrorHandlers): # type: ignore
142-
raise ValueError("error_handlers must be an instance of ErrorHandlers or None")
143-
14498
if override is not None and not isinstance(override, OverrideConfig): # type: ignore
14599
raise ValueError("override must be of type OverrideConfig or None")
146100

147-
if error_handlers is None:
148-
error_handlers = InputErrorHandlers()
149-
150101
if override is None:
151102
override = InputOverrideConfig()
152103

153104
return MultitenancyConfig(
154105
get_allowed_domains_for_tenant_id,
155-
error_handlers,
156106
OverrideConfig(override.functions, override.apis),
157107
)

supertokens_python/recipe/thirdparty/api/authorisation_url.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@
1414
from __future__ import annotations
1515

1616
from typing import TYPE_CHECKING, Any, Dict
17-
from supertokens_python.recipe.multitenancy.constants import DEFAULT_TENANT_ID
18-
from supertokens_python.recipe.multitenancy.exceptions import (
19-
RecipeDisabledForTenantError,
20-
)
2117

2218

2319
if TYPE_CHECKING:
@@ -57,11 +53,6 @@ async def handle_authorisation_url_api(
5753
user_context=user_context,
5854
)
5955

60-
if not provider_response.third_party_enabled:
61-
raise RecipeDisabledForTenantError(
62-
f"The third party recipe is disabled for {tenant_id if tenant_id != DEFAULT_TENANT_ID else 'default tenant'}"
63-
)
64-
6556
provider = provider_response.provider
6657
result = await api_implementation.authorisation_url_get(
6758
provider=provider,

supertokens_python/recipe/thirdparty/api/signinup.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@
1414
from __future__ import annotations
1515

1616
from typing import TYPE_CHECKING, Any, Dict
17-
from supertokens_python.recipe.multitenancy.constants import DEFAULT_TENANT_ID
18-
from supertokens_python.recipe.multitenancy.exceptions import (
19-
RecipeDisabledForTenantError,
20-
)
2117
from supertokens_python.recipe.thirdparty.provider import RedirectUriInfo
2218

2319
if TYPE_CHECKING:
@@ -68,11 +64,6 @@ async def handle_sign_in_up_api(
6864
user_context=user_context,
6965
)
7066

71-
if not provider_response.third_party_enabled:
72-
raise RecipeDisabledForTenantError(
73-
f"The third party recipe is disabled for {tenant_id if tenant_id is not None and tenant_id != DEFAULT_TENANT_ID else 'default tenant'}"
74-
)
75-
7667
provider = provider_response.provider
7768

7869
result = await api_implementation.sign_in_up_post(

supertokens_python/recipe/thirdparty/interfaces.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,8 @@ def __init__(
5353

5454

5555
class GetProviderOkResult:
56-
def __init__(self, provider: Provider, third_party_enabled: bool):
56+
def __init__(self, provider: Provider):
5757
self.provider = provider
58-
self.third_party_enabled = third_party_enabled
5958

6059

6160
class RecipeInterface(ABC):

supertokens_python/recipe/thirdparty/recipe_implementation.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,5 +200,4 @@ async def get_provider(
200200

201201
return GetProviderOkResult(
202202
provider,
203-
tenant_config.third_party.enabled,
204203
)

0 commit comments

Comments
 (0)