File tree Expand file tree Collapse file tree 2 files changed +41
-4
lines changed Expand file tree Collapse file tree 2 files changed +41
-4
lines changed Original file line number Diff line number Diff line change 29
29
30
30
@pytest .fixture (autouse = True )
31
31
def stub_openai_module (monkeypatch : pytest .MonkeyPatch ) -> Iterator [types .ModuleType ]:
32
- """Provide a stub ``openai.AsyncOpenAI`` for modules under test."""
32
+ """Provide a stub ``openai.AsyncOpenAI`` and patch imports in guardrails.*.
33
+
34
+ Ensures tests don't require real OPENAI_API_KEY or networked clients.
35
+ """
33
36
module = types .ModuleType ("openai" )
34
37
35
- class AsyncOpenAI :
38
+ class AsyncOpenAI : # noqa: D401 - simple stub
39
+ """Stubbed AsyncOpenAI client."""
40
+
36
41
pass
37
42
38
43
module .__dict__ ["AsyncOpenAI" ] = AsyncOpenAI
44
+ # Ensure any downstream import finds our stub module
39
45
monkeypatch .setitem (sys .modules , "openai" , module )
46
+ # Also patch already-imported symbols on guardrails modules
47
+ try :
48
+ import guardrails .runtime as gr_runtime # type: ignore
49
+
50
+ monkeypatch .setattr (gr_runtime , "AsyncOpenAI" , AsyncOpenAI , raising = False )
51
+ except Exception :
52
+ pass
53
+ try :
54
+ import guardrails .types as gr_types # type: ignore
55
+
56
+ monkeypatch .setattr (gr_types , "AsyncOpenAI" , AsyncOpenAI , raising = False )
57
+ except Exception :
58
+ pass
59
+ # Provide dummy API key to satisfy any code paths that inspect env
60
+ monkeypatch .setenv ("OPENAI_API_KEY" , "test-key" )
61
+
40
62
yield module
41
63
monkeypatch .delitem (sys .modules , "openai" , raising = False )
42
64
Original file line number Diff line number Diff line change 10
10
11
11
@pytest .fixture (autouse = True )
12
12
def stub_openai_module (monkeypatch : pytest .MonkeyPatch ) -> Iterator [types .ModuleType ]:
13
- """Provide a stub ``openai.AsyncOpenAI`` for modules under test."""
13
+ """Provide a stub ``openai.AsyncOpenAI`` and patch guardrails types symbol.
14
+
15
+ Ensures tests don't require real OPENAI_API_KEY or networked clients.
16
+ """
14
17
module = types .ModuleType ("openai" )
15
18
16
- class AsyncOpenAI :
19
+ class AsyncOpenAI : # noqa: D401 - simple stub
20
+ """Stubbed AsyncOpenAI client."""
21
+
17
22
pass
18
23
19
24
module .__dict__ ["AsyncOpenAI" ] = AsyncOpenAI
20
25
monkeypatch .setitem (sys .modules , "openai" , module )
26
+ # Patch already-imported symbol in guardrails.types if present
27
+ try :
28
+ import guardrails .types as gr_types # type: ignore
29
+
30
+ monkeypatch .setattr (gr_types , "AsyncOpenAI" , AsyncOpenAI , raising = False )
31
+ except Exception :
32
+ pass
33
+ # Provide dummy API key in case any code inspects env
34
+ monkeypatch .setenv ("OPENAI_API_KEY" , "test-key" )
35
+
21
36
yield module
22
37
monkeypatch .delitem (sys .modules , "openai" , raising = False )
23
38
You can’t perform that action at this time.
0 commit comments