ciyidogan commited on
Commit
f29c5f1
Β·
verified Β·
1 Parent(s): d7e064f

Update api_executor.py

Browse files
Files changed (1) hide show
  1. api_executor.py +16 -16
api_executor.py CHANGED
@@ -5,7 +5,7 @@ Flare – API Executor (v2.0 Β· session-aware token management)
5
  from __future__ import annotations
6
  import json, re, time, requests
7
  from typing import Any, Dict, Optional, Union
8
- from utils import log
9
  from config_provider import ConfigProvider, APIConfig
10
  from session import Session
11
 
@@ -107,7 +107,7 @@ def _fetch_token(api: APIConfig, session: Session) -> None:
107
  if not api.auth or not api.auth.enabled:
108
  return
109
 
110
- log(f"πŸ”‘ Fetching token for {api.name}")
111
 
112
  try:
113
  # Use _render_json for body to preserve types
@@ -138,10 +138,10 @@ def _fetch_token(api: APIConfig, session: Session) -> None:
138
  "refresh_token": json_data.get("refresh_token")
139
  }
140
 
141
- log(f"βœ… Token obtained for {api.name}")
142
 
143
  except Exception as e:
144
- log(f"❌ Token fetch failed for {api.name}: {e}")
145
  raise
146
 
147
  def _refresh_token(api: APIConfig, session: Session) -> bool:
@@ -153,7 +153,7 @@ def _refresh_token(api: APIConfig, session: Session) -> bool:
153
  if not token_info.get("refresh_token"):
154
  return False
155
 
156
- log(f"πŸ”„ Refreshing token for {api.name}")
157
 
158
  try:
159
  body = _render_json(api.auth.token_refresh_body or {}, session, api.name)
@@ -182,11 +182,11 @@ def _refresh_token(api: APIConfig, session: Session) -> bool:
182
  "refresh_token": json_data.get("refresh_token", token_info["refresh_token"])
183
  }
184
 
185
- log(f"βœ… Token refreshed for {api.name}")
186
  return True
187
 
188
  except Exception as e:
189
- log(f"❌ Token refresh failed for {api.name}: {e}")
190
  return False
191
 
192
  def _ensure_token(api: APIConfig, session: Session) -> None:
@@ -254,21 +254,21 @@ def call_api(api: APIConfig, session: Session) -> requests.Response:
254
 
255
  for attempt in range(retry_count + 1):
256
  try:
257
- log(f"🌐 API call: {api.name} {api.method} {api.url} (attempt {attempt + 1}/{retry_count + 1})")
258
- log(f"πŸ“‹ Request body: {json.dumps(body, ensure_ascii=False)}")
259
 
260
  response = requests.request(**request_params)
261
 
262
  # Handle 401 Unauthorized
263
  if response.status_code == 401 and api.auth and api.auth.enabled and attempt < retry_count:
264
- log(f"πŸ”’ Got 401, refreshing token for {api.name}")
265
  _fetch_token(api, session) # Force new token
266
  headers = _render(api.headers, session, api.name) # Re-render headers
267
  request_params["headers"] = headers
268
  continue
269
 
270
  response.raise_for_status()
271
- log(f"βœ… API call successful: {api.name} ({response.status_code})")
272
 
273
  # Response mapping işlemi
274
  if response.status_code in (200, 201, 202, 204) and hasattr(api, 'response_mappings') and api.response_mappings:
@@ -308,27 +308,27 @@ def call_api(api: APIConfig, session: Session) -> requests.Response:
308
 
309
  # Session'a kaydet
310
  session.variables[var_name] = value
311
- log(f"πŸ“ Mapped response value: {var_name} = {value}")
312
 
313
  except Exception as e:
314
- log(f"⚠️ Response mapping error: {e}")
315
 
316
  return response
317
 
318
  except requests.exceptions.Timeout as e:
319
  last_error = e
320
- log(f"⏱️ API timeout for {api.name} (attempt {attempt + 1})")
321
 
322
  except requests.exceptions.RequestException as e:
323
  last_error = e
324
- log(f"❌ API error for {api.name}: {e}")
325
 
326
  # Retry backoff
327
  if attempt < retry_count:
328
  backoff = api.retry.backoff_seconds if api.retry else 2
329
  if api.retry and api.retry.strategy == "exponential":
330
  backoff = backoff * (2 ** attempt)
331
- log(f"⏳ Waiting {backoff}s before retry...")
332
  time.sleep(backoff)
333
 
334
  # All retries failed
 
5
  from __future__ import annotations
6
  import json, re, time, requests
7
  from typing import Any, Dict, Optional, Union
8
+ from logger import log_info, log_error, log_warning, log_debug
9
  from config_provider import ConfigProvider, APIConfig
10
  from session import Session
11
 
 
107
  if not api.auth or not api.auth.enabled:
108
  return
109
 
110
+ log_info(f"πŸ”‘ Fetching token for {api.name}")
111
 
112
  try:
113
  # Use _render_json for body to preserve types
 
138
  "refresh_token": json_data.get("refresh_token")
139
  }
140
 
141
+ log_info(f"βœ… Token obtained for {api.name}")
142
 
143
  except Exception as e:
144
+ log_error(f"❌ Token fetch failed for {api.name}", e)
145
  raise
146
 
147
  def _refresh_token(api: APIConfig, session: Session) -> bool:
 
153
  if not token_info.get("refresh_token"):
154
  return False
155
 
156
+ log_info(f"πŸ”„ Refreshing token for {api.name}")
157
 
158
  try:
159
  body = _render_json(api.auth.token_refresh_body or {}, session, api.name)
 
182
  "refresh_token": json_data.get("refresh_token", token_info["refresh_token"])
183
  }
184
 
185
+ log_info(f"βœ… Token refreshed for {api.name}")
186
  return True
187
 
188
  except Exception as e:
189
+ log_error(f"❌ Token refresh failed for {api.name}", e)
190
  return False
191
 
192
  def _ensure_token(api: APIConfig, session: Session) -> None:
 
254
 
255
  for attempt in range(retry_count + 1):
256
  try:
257
+ log_info(f"🌐 API call: {api.name} {api.method} {api.url} (attempt {attempt + 1}/{retry_count + 1})")
258
+ log_info(f"πŸ“‹ Request body: {json.dumps(body, ensure_ascii=False)}")
259
 
260
  response = requests.request(**request_params)
261
 
262
  # Handle 401 Unauthorized
263
  if response.status_code == 401 and api.auth and api.auth.enabled and attempt < retry_count:
264
+ log_info(f"πŸ”’ Got 401, refreshing token for {api.name}")
265
  _fetch_token(api, session) # Force new token
266
  headers = _render(api.headers, session, api.name) # Re-render headers
267
  request_params["headers"] = headers
268
  continue
269
 
270
  response.raise_for_status()
271
+ log_info(f"βœ… API call successful: {api.name} ({response.status_code})")
272
 
273
  # Response mapping işlemi
274
  if response.status_code in (200, 201, 202, 204) and hasattr(api, 'response_mappings') and api.response_mappings:
 
308
 
309
  # Session'a kaydet
310
  session.variables[var_name] = value
311
+ log_info(f"πŸ“ Mapped response value: {var_name} = {value}")
312
 
313
  except Exception as e:
314
+ log_error("⚠️ Response mapping error", e)
315
 
316
  return response
317
 
318
  except requests.exceptions.Timeout as e:
319
  last_error = e
320
+ log_warning(f"⏱️ API timeout for {api.name} (attempt {attempt + 1})")
321
 
322
  except requests.exceptions.RequestException as e:
323
  last_error = e
324
+ log_error(f"❌ API error for {api.name}", e)
325
 
326
  # Retry backoff
327
  if attempt < retry_count:
328
  backoff = api.retry.backoff_seconds if api.retry else 2
329
  if api.retry and api.retry.strategy == "exponential":
330
  backoff = backoff * (2 ** attempt)
331
+ log_info(f"⏳ Waiting {backoff}s before retry...")
332
  time.sleep(backoff)
333
 
334
  # All retries failed