ciyidogan commited on
Commit
ebb2256
Β·
verified Β·
1 Parent(s): 6992008

Delete api_connector.py

Browse files
Files changed (1) hide show
  1. api_connector.py +0 -99
api_connector.py DELETED
@@ -1,99 +0,0 @@
1
- import requests
2
- from utils.logger import log_info, log_error, log_warning, log_debug
3
-
4
- class APIConnector:
5
- def __init__(self, service_config):
6
- self.service_config = service_config
7
-
8
- def resolve_placeholders(self, template, session):
9
- resolved = template
10
- for key, value in session.variables.items():
11
- resolved = resolved.replace(f"{{variables.{key}}}", str(value))
12
- for api, tokens in session.auth_tokens.items():
13
- resolved = resolved.replace(f"{{auth_tokens.{api}.token}}", tokens.get("token", ""))
14
- return resolved
15
-
16
- def get_auth_token(self, api_name, auth_config, session):
17
- auth_endpoint = auth_config.get("auth_endpoint")
18
- auth_body = {
19
- k: self.resolve_placeholders(str(v), session)
20
- for k, v in auth_config.get("auth_body", {}).items()
21
- }
22
- token_path = auth_config.get("auth_token_path")
23
-
24
- response = requests.post(auth_endpoint, json=auth_body, timeout=5)
25
- response.raise_for_status()
26
- json_resp = response.json()
27
-
28
- token = json_resp
29
- for part in token_path.split("."):
30
- token = token.get(part)
31
- if token is None:
32
- raise Exception(f"Could not resolve token path: {token_path}")
33
-
34
- refresh_token = json_resp.get("refresh_token")
35
- session.auth_tokens[api_name] = {"token": token, "refresh_token": refresh_token}
36
-
37
- log(f"πŸ”‘ Retrieved auth token for {api_name}")
38
- return token
39
-
40
- def refresh_auth_token(self, api_name, auth_config, session):
41
- refresh_endpoint = auth_config.get("auth_refresh_endpoint")
42
- refresh_body = {
43
- k: self.resolve_placeholders(str(v), session)
44
- for k, v in auth_config.get("refresh_body", {}).items()
45
- }
46
- token_path = auth_config.get("auth_token_path")
47
-
48
- response = requests.post(refresh_endpoint, json=refresh_body, timeout=5)
49
- response.raise_for_status()
50
- json_resp = response.json()
51
-
52
- token = json_resp
53
- for part in token_path.split("."):
54
- token = token.get(part)
55
- if token is None:
56
- raise Exception(f"Could not resolve token path: {token_path}")
57
-
58
- new_refresh_token = json_resp.get("refresh_token", session.auth_tokens[api_name].get("refresh_token"))
59
- session.auth_tokens[api_name] = {"token": token, "refresh_token": new_refresh_token}
60
-
61
- log_info(f"πŸ” Refreshed auth token for {api_name}")
62
- return token
63
-
64
- def call_api(self, intent_def, session):
65
- api_name = intent_def.get("action")
66
- api_def = self.service_config.get_api_config(api_name)
67
- if not api_def:
68
- raise Exception(f"API config not found: {api_name}")
69
-
70
- url = api_def["url"]
71
- method = api_def.get("method", "POST")
72
- headers = {h["key"]: self.resolve_placeholders(h["value"], session) for h in api_def.get("headers", [])}
73
- body = {k: self.resolve_placeholders(str(v), session) for k, v in api_def.get("body", {}).items()}
74
- timeout = api_def.get("timeout", 5)
75
- retry_count = api_def.get("retry_count", 0)
76
- auth_config = api_def.get("auth")
77
-
78
- # Get auth token if needed
79
- if auth_config and api_name not in session.auth_tokens:
80
- self.get_auth_token(api_name, auth_config, session)
81
-
82
- for attempt in range(retry_count + 1):
83
- try:
84
- response = requests.request(method, url, headers=headers, json=body, timeout=timeout)
85
- if response.status_code == 401 and auth_config and attempt < retry_count:
86
- log_info(f"πŸ” Token expired for {api_name}, refreshing...")
87
- self.refresh_auth_token(api_name, auth_config, session)
88
- continue
89
- response.raise_for_status()
90
- log_info(f"βœ… API call successful: {api_name}")
91
- return response.json()
92
- except requests.Timeout:
93
- fallback = intent_def.get("fallback_timeout_message", "This operation is currently unavailable.")
94
- log_warning(f"⚠️ API timeout for {api_name} β†’ {fallback}")
95
- return {"fallback": fallback}
96
- except Exception as e:
97
- log_error(f"❌ API call error for {api_name}", e)
98
- fallback = intent_def.get("fallback_error_message", "An error occurred during the operation.")
99
- return {"fallback": fallback}