Skip to content

Commit 2ab6828

Browse files
Syed Raza AbbasSyed Raza Abbas
authored andcommitted
auto wiring of framework added
1 parent 2d8e38c commit 2ab6828

File tree

3 files changed

+58
-0
lines changed

3 files changed

+58
-0
lines changed

kinde_sdk/auth/oauth.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ def __init__(
3535
userinfo_url: Optional[str] = None,
3636
config_file: Optional[str] = None, # config_file optional
3737
storage_config: Optional[Dict[str, Any]] = None, # Add storage_config parameter
38+
framework: Optional[str] = None, # Add framework property
3839
audience: Optional[str] = None,
3940
host: Optional[str] = None,
4041
state: Optional[str] = None,
@@ -51,6 +52,7 @@ def __init__(
5152
self.host = host or os.getenv("KINDE_HOST", "https://app.kinde.com")
5253
self.audience = audience or os.getenv("KINDE_AUDIENCE")
5354
self.state = state
55+
self.framework = framework
5456

5557
# Validate required configurations
5658
if not self.client_id:

kinde_sdk/framework_detector.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# framework_detector.py
2+
import importlib.metadata
3+
import importlib
4+
from typing import Optional
5+
6+
class FrameworkDetector:
7+
def __init__(self):
8+
self.framework = None
9+
10+
def detect_framework(self, modules_to_check: list) -> Optional[str]:
11+
"""
12+
Detect the framework being used by checking installed modules.
13+
14+
Args:
15+
modules_to_check (list): List of framework module names to check (e.g., ["flask", "fastapi", "django"]).
16+
17+
Returns:
18+
Optional[str]: The name of the detected framework, or None if no framework is found.
19+
"""
20+
# Get a set of installed packages
21+
installed_packages = {dist.metadata["Name"].lower() for dist in importlib.metadata.distributions()}
22+
23+
for module_name in modules_to_check:
24+
if module_name.lower() in installed_packages:
25+
try:
26+
module = importlib.import_module(module_name)
27+
print(f"Detected framework: {module_name}")
28+
self.framework = module_name
29+
return module_name
30+
except ImportError:
31+
print(f"Failed to load {module_name}")
32+
else:
33+
print(f"{module_name} is not installed.")
34+
return None
35+
36+
def get_framework(self) -> Optional[str]:
37+
"""
38+
Get the detected framework.
39+
40+
Returns:
41+
Optional[str]: The name of the detected framework, or None if no framework is found.
42+
"""
43+
return self.framework

kinde_sdk/kinde_api_client.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
KindeRetrieveException,
1414
)
1515
from kinde_sdk import __version__ as kinde_sdk_version
16+
from .framework_detector import FrameworkDetector
1617

1718

1819
class FlagType(Enum):
@@ -42,13 +43,25 @@ def __init__(
4243
scope="openid profile email offline",
4344
audience=None,
4445
org_code=None,
46+
framework: Optional[str] = None, # Add framework property
4547
**kwargs,
4648
):
4749
if not isinstance(grant_type, GrantType):
4850
raise ValueError(
4951
f"Please provide a grant_type one of the following: {list(GrantType)}"
5052
)
5153
super().__init__(**kwargs)
54+
55+
if framework is None:
56+
detector = FrameworkDetector()
57+
framework = detector.detect_framework(["flask", "fastapi", "django"])
58+
if framework:
59+
print(f"Auto-detected framework: {framework}")
60+
else:
61+
print("No framework detected. Using default configuration.")
62+
63+
self.framework = framework # Set the framework property
64+
5265
self.domain = domain
5366
self.client_id = client_id
5467
self.client_secret = client_secret

0 commit comments

Comments
 (0)