Skip to content

Commit 0cfec6f

Browse files
committed
fixes all cyclic imports
1 parent eae7e2d commit 0cfec6f

File tree

7 files changed

+37
-16
lines changed

7 files changed

+37
-16
lines changed

supertokens_python/auth_utils.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -912,12 +912,13 @@ async def filter_out_invalid_second_factors_or_throw_if_all_are_invalid(
912912
factors_set_up_for_user_prom: Optional[List[str]] = None
913913
mfa_info_prom = None
914914

915-
async def get_factors_set_up_for_user():
915+
async def get_factors_set_up_for_user() -> List[str]:
916916
nonlocal factors_set_up_for_user_prom
917917
if factors_set_up_for_user_prom is None:
918918
factors_set_up_for_user_prom = await mfa_instance.recipe_implementation.get_factors_setup_for_user(
919919
user=session_user, user_context=user_context
920920
)
921+
assert factors_set_up_for_user_prom is not None
921922
return factors_set_up_for_user_prom
922923

923924
async def get_mfa_requirements_for_auth():

supertokens_python/recipe/multifactorauth/api/implementation.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@
1717
from typing import Any, Dict, List, Union, TYPE_CHECKING
1818

1919
from supertokens_python.recipe.session import SessionContainer
20-
from supertokens_python.recipe.multifactorauth.utils import (
21-
update_and_get_mfa_related_info_in_session,
22-
)
2320
from supertokens_python.recipe.multitenancy.asyncio import get_tenant
2421
from supertokens_python.asyncio import get_user
2522
from supertokens_python.recipe.session.exceptions import (
@@ -54,14 +51,18 @@ async def resync_session_and_fetch_mfa_info_put(
5451

5552
MultiFactorAuthClaim: MultiFactorAuthClaimType = mfa.MultiFactorAuthClaim
5653

54+
module = importlib.import_module(
55+
"supertokens_python.recipe.multifactorauth.utils"
56+
)
57+
5758
session_user = await get_user(session.get_user_id(), user_context)
5859

5960
if session_user is None:
6061
raise UnauthorisedError(
6162
"Session user not found",
6263
)
6364

64-
mfa_info = await update_and_get_mfa_related_info_in_session(
65+
mfa_info = await module.update_and_get_mfa_related_info_in_session(
6566
MultiFactorAuthClaim,
6667
input_session=session,
6768
user_context=user_context,

supertokens_python/recipe/multifactorauth/multi_factor_auth_claim.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
# under the License.
1414

1515
from __future__ import annotations
16+
import importlib
1617

1718
from typing import Any, Dict, Optional, Set
1819

@@ -172,9 +173,11 @@ async def fetch_value(
172173
current_payload: Dict[str, Any],
173174
user_context: Dict[str, Any],
174175
) -> MFAClaimValue:
175-
from .utils import update_and_get_mfa_related_info_in_session
176+
module = importlib.import_module(
177+
"supertokens_python.recipe.multifactorauth.utils"
178+
)
176179

177-
mfa_info = await update_and_get_mfa_related_info_in_session(
180+
mfa_info = await module.update_and_get_mfa_related_info_in_session(
178181
self,
179182
input_session_recipe_user_id=recipe_user_id,
180183
input_tenant_id=tenant_id,

supertokens_python/recipe/multifactorauth/recipe.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
# License for the specific language governing permissions and limitations
1313
# under the License.
1414
from __future__ import annotations
15+
import importlib
1516

1617
from os import environ
1718
from typing import Any, Dict, Optional, List, Union
@@ -31,7 +32,6 @@
3132
MultiFactorAuthClaim,
3233
)
3334
from supertokens_python.recipe.multitenancy.interfaces import TenantConfig
34-
from supertokens_python.recipe.multitenancy.recipe import MultitenancyRecipe
3535
from supertokens_python.recipe.session.recipe import SessionRecipe
3636
from supertokens_python.recipe_module import APIHandled, RecipeModule
3737
from supertokens_python.supertokens import AppInfo
@@ -76,9 +76,11 @@ def __init__(
7676
] = []
7777
self.is_get_mfa_requirements_for_auth_overridden: bool = False
7878

79-
from .utils import validate_and_normalise_user_input
79+
module = importlib.import_module(
80+
"supertokens_python.recipe.multifactorauth.utils"
81+
)
8082

81-
self.config = validate_and_normalise_user_input(
83+
self.config = module.validate_and_normalise_user_input(
8284
first_factors,
8385
override,
8486
)
@@ -102,6 +104,8 @@ def __init__(
102104
)
103105

104106
def callback():
107+
from supertokens_python.recipe.multitenancy.recipe import MultitenancyRecipe
108+
105109
mt_recipe = MultitenancyRecipe.get_instance()
106110
mt_recipe.static_first_factors = self.config.first_factors
107111

supertokens_python/recipe/multifactorauth/recipe_implementation.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
# License for the specific language governing permissions and limitations
1313
# under the License.
1414
from __future__ import annotations
15+
import importlib
1516

1617
from typing import TYPE_CHECKING, Any, Awaitable, Dict, Set, Callable, List
1718

@@ -35,7 +36,6 @@
3536
from supertokens_python.recipe.session import SessionContainer
3637

3738
from supertokens_python.types import User
38-
from .utils import update_and_get_mfa_related_info_in_session
3939
from .interfaces import RecipeInterface
4040

4141
if TYPE_CHECKING:
@@ -173,7 +173,11 @@ async def assert_allowed_to_setup_factor_else_throw_invalid_claim_error(
173173
async def mark_factor_as_complete_in_session(
174174
self, session: SessionContainer, factor_id: str, user_context: Dict[str, Any]
175175
):
176-
await update_and_get_mfa_related_info_in_session(
176+
module = importlib.import_module(
177+
"supertokens_python.recipe.multifactorauth.utils"
178+
)
179+
180+
await module.update_and_get_mfa_related_info_in_session(
177181
MultiFactorAuthClaim,
178182
input_session=session,
179183
input_updated_factor_id=factor_id,

supertokens_python/recipe/multitenancy/api/implementation.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
# License for the specific language governing permissions and limitations
1313
# under the License.
1414

15+
import importlib
1516
from typing import Any, Dict, Optional, Union, List
1617
from ..constants import DEFAULT_TENANT_ID
1718

@@ -35,7 +36,9 @@ async def login_methods_get(
3536
api_options: APIOptions,
3637
user_context: Dict[str, Any],
3738
) -> Union[LoginMethodsGetOkResult, GeneralErrorResponse]:
38-
from ...multifactorauth.utils import is_valid_first_factor
39+
module = importlib.import_module(
40+
"supertokens_python.recipe.multifactorauth.utils"
41+
)
3942
from supertokens_python.recipe.thirdparty.providers.config_utils import (
4043
merge_providers_from_core_and_static,
4144
find_and_create_provider_instance,
@@ -91,7 +94,9 @@ async def login_methods_get(
9194

9295
valid_first_factors: List[str] = []
9396
for factor_id in first_factors:
94-
valid_res = await is_valid_first_factor(tenant_id, factor_id, user_context)
97+
valid_res = await module.is_valid_first_factor(
98+
tenant_id, factor_id, user_context
99+
)
95100
if valid_res == "OK":
96101
valid_first_factors.append(factor_id)
97102
if valid_res == "TENANT_NOT_FOUND_ERROR":

supertokens_python/supertokens.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
# under the License.
1414

1515
from __future__ import annotations
16+
import importlib
1617

1718
from os import environ
1819
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Set, Union, Tuple
@@ -276,9 +277,11 @@ def make_recipe(recipe: Callable[[AppInfo], RecipeModule]) -> RecipeModule:
276277
self.recipe_modules: List[RecipeModule] = list(map(make_recipe, recipe_list))
277278

278279
if not multitenancy_found:
279-
from supertokens_python.recipe.multitenancy.recipe import MultitenancyRecipe
280+
module = importlib.import_module(
281+
"supertokens_python.recipe.multitenancy.recipe"
282+
)
280283

281-
self.recipe_modules.append(MultitenancyRecipe.init()(self.app_info))
284+
self.recipe_modules.append(module.init()(self.app_info))
282285
if totp_found and not multi_factor_auth_found:
283286
raise Exception("Please initialize the MultiFactorAuth recipe to use TOTP.")
284287
if not user_metadata_found:

0 commit comments

Comments
 (0)