import os import io import zipfile import json import datetime def zip_session_folder(folder_path): """Create a ZIP file from a session folder""" zip_buffer = io.BytesIO() with zipfile.ZipFile(zip_buffer, "w", zipfile.ZIP_DEFLATED) as zf: for root, dirs, files in os.walk(folder_path): for file in files: full_path = os.path.join(root, file) arcname = os.path.relpath(full_path, folder_path) zf.write(full_path, arcname) zip_buffer.seek(0) return zip_buffer def handle_path_parameters(endpoint, api_base_url, param_values): """Process path parameters for any endpoint""" params = extract_path_params(endpoint) if not params: return api_base_url.rstrip("/") + endpoint, None # Validate parameters missing_params = [p for p in params if p not in param_values or not param_values[p]] if missing_params: return None, f"Error: Missing required parameters: {', '.join(missing_params)}" # Replace parameters in URL full_url = api_base_url.rstrip("/") + endpoint for param in params: full_url = full_url.replace(f"{{{param}}}", param_values[param]) return full_url, None def extract_path_params(endpoint): """Extract path parameters from an endpoint URL""" params = [] parts = endpoint.split('/') for part in parts: if part.startswith('{') and part.endswith('}'): param_name = part[1:-1] params.append(param_name) return params def extract_query_params(endpoint_spec): """Extract query parameters from endpoint specification""" query_params = [] parameters = endpoint_spec.get('parameters', []) for param in parameters: if param.get('in') == 'query': name = param.get('name') required = param.get('required', False) description = param.get('description', 'No description') query_params.append(('query', name, required, description)) return query_params def save_response_data(data, endpoint, base_save_folder): """Save API response data to file""" safe_endpoint_name = endpoint.strip("/").replace("/", "_") or "root" timestamp = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") save_folder = os.path.join(base_save_folder, f"{safe_endpoint_name} ({timestamp})") os.makedirs(save_folder, exist_ok=True) filename = os.path.join(save_folder, "data.jsonl") with open(filename, "w", encoding="utf-8") as f: if isinstance(data, list): for item in data: f.write(json.dumps(item) + "\n") elif isinstance(data, dict): f.write(json.dumps(data) + "\n") else: f.write(str(data))