Files
cfw-autumn/packages/openapi/utils/sdkGeneration/patchPySdkHooks.ts
2026-03-26 15:37:59 +00:00

44 lines
1.2 KiB
TypeScript

import { readFileSync, writeFileSync } from "node:fs";
import path from "node:path";
/**
* Patches the Python SDK hooks to call init_hooks and import registration.
*
* Speakeasy regenerates sdkhooks.py without calling init_hooks, so custom
* hooks (FailOpenHook, TimeoutHook) are never registered. This patch adds
* the import and constructor call.
*/
export function patchPySdkHooks({
pythonSdkDir,
}: {
pythonSdkDir: string;
}): void {
console.log("[PY] Patching Python SDK hooks...");
const hooksPath = path.join(
pythonSdkDir,
"src/autumn_sdk/_hooks/sdkhooks.py",
);
let content = readFileSync(hooksPath, "utf-8");
if (content.includes("init_hooks")) {
console.log("[PY] sdkhooks.py already patched, skipping");
return;
}
// Add import for init_hooks from registration
content = content.replace(
"import httpx\nfrom .types import (",
"import httpx\nfrom .registration import init_hooks\nfrom .types import (",
);
// Add init_hooks(self) at the end of __init__
content = content.replace(
"self.after_error_hooks: List[AfterErrorHook] = []",
"self.after_error_hooks: List[AfterErrorHook] = []\n init_hooks(self)",
);
writeFileSync(hooksPath, content);
console.log("[PY] Python SDK hooks patched successfully");
}