mockserver-client 7.0.0__tar.gz → 7.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/PKG-INFO +113 -1
  2. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/README.md +112 -0
  3. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/mockserver/__init__.py +102 -0
  4. mockserver_client-7.2.0/mockserver/async_client.py +1083 -0
  5. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/mockserver/client.py +212 -5
  6. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/mockserver/fluent.py +31 -3
  7. mockserver_client-7.2.0/mockserver/launcher.py +598 -0
  8. mockserver_client-7.2.0/mockserver/llm.py +1021 -0
  9. mockserver_client-7.2.0/mockserver/mcp.py +434 -0
  10. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/mockserver/models.py +391 -7
  11. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/mockserver/websocket_client.py +192 -16
  12. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/mockserver_client.egg-info/PKG-INFO +113 -1
  13. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/mockserver_client.egg-info/SOURCES.txt +8 -0
  14. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/pyproject.toml +2 -2
  15. mockserver_client-7.2.0/tests/test_async_client.py +882 -0
  16. mockserver_client-7.2.0/tests/test_auth_tls.py +205 -0
  17. mockserver_client-7.2.0/tests/test_breakpoint.py +481 -0
  18. mockserver_client-7.2.0/tests/test_client.py +839 -0
  19. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/tests/test_fluent.py +37 -2
  20. mockserver_client-7.2.0/tests/test_launcher.py +845 -0
  21. mockserver_client-7.2.0/tests/test_llm.py +579 -0
  22. mockserver_client-7.2.0/tests/test_mcp.py +257 -0
  23. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/tests/test_models.py +484 -1
  24. mockserver_client-7.0.0/mockserver/async_client.py +0 -541
  25. mockserver_client-7.0.0/tests/test_async_client.py +0 -437
  26. mockserver_client-7.0.0/tests/test_client.py +0 -443
  27. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/mockserver/exceptions.py +0 -0
  28. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/mockserver_client.egg-info/dependency_links.txt +0 -0
  29. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/mockserver_client.egg-info/requires.txt +0 -0
  30. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/mockserver_client.egg-info/top_level.txt +0 -0
  31. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/setup.cfg +0 -0
  32. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/tests/test_exceptions.py +0 -0
  33. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/tests/test_init.py +0 -0
  34. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/tests/test_integration.py +0 -0
  35. {mockserver_client-7.0.0 → mockserver_client-7.2.0}/tests/test_websocket_client.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mockserver-client
3
- Version: 7.0.0
3
+ Version: 7.2.0
4
4
  Summary: Official Python client for MockServer — create expectations, verify requests, and register dynamic callbacks via WebSocket
5
5
  Author-email: James Bloom <jamesdbloom@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -273,6 +273,118 @@ response = (
273
273
  )
274
274
  ```
275
275
 
276
+ ## Interactive Breakpoints
277
+
278
+ The client supports matcher-driven interactive breakpoints over the callback WebSocket. Register a breakpoint matcher to pause forwarded/proxied exchanges at specific phases and inspect/modify/continue them via callback handlers.
279
+
280
+ ### Register a breakpoint (sync client)
281
+
282
+ ```python
283
+ from mockserver import MockServerClient, HttpRequest, HttpResponse
284
+
285
+ client = MockServerClient("localhost", 1080)
286
+
287
+ # REQUEST phase only
288
+ bp_id = client.add_request_breakpoint(
289
+ HttpRequest(path="/api/.*"),
290
+ lambda request: request, # continue unchanged (or return HttpResponse to abort)
291
+ )
292
+
293
+ # REQUEST + RESPONSE
294
+ bp_id = client.add_request_and_response_breakpoint(
295
+ HttpRequest(path="/api/.*"),
296
+ lambda request: request, # REQUEST handler
297
+ lambda request, response: response, # RESPONSE handler
298
+ )
299
+
300
+ # All phases with stream frame handler
301
+ bp_id = client.add_breakpoint(
302
+ HttpRequest(path="/stream/.*"),
303
+ ["REQUEST", "RESPONSE", "RESPONSE_STREAM", "INBOUND_STREAM"],
304
+ request_handler=lambda request: request,
305
+ response_handler=lambda request, response: response,
306
+ stream_frame_handler=lambda frame: {"action": "CONTINUE"},
307
+ # Other actions: MODIFY (with body), DROP, INJECT (with body), CLOSE
308
+ )
309
+ ```
310
+
311
+ ### Manage breakpoints
312
+
313
+ ```python
314
+ # List all matchers
315
+ matchers = client.list_breakpoint_matchers() # {"matchers": [...]}
316
+
317
+ # Remove a specific matcher
318
+ client.remove_breakpoint_matcher(bp_id)
319
+
320
+ # Clear all matchers
321
+ client.clear_breakpoint_matchers()
322
+ ```
323
+
324
+ The async client (`AsyncMockServerClient`) exposes the same methods as coroutines.
325
+
326
+ ## Start / Launch MockServer
327
+
328
+ The Python client can download and launch a local MockServer instance directly -- no Java installation and no Docker required. The launcher downloads a self-contained platform bundle (`mockserver-<version>-<os>-<arch>`) from the GitHub Release, verifies its SHA-256, caches it per-user, and starts it.
329
+
330
+ ### Quick start
331
+
332
+ ```python
333
+ from mockserver.launcher import start, MockServerProcess
334
+
335
+ # Download (first run) and start MockServer on port 1080
336
+ with start(port=1080) as server:
337
+ print(f"MockServer running on port {server.port}, PID {server.pid}")
338
+ # ... use MockServer ...
339
+ # Server is stopped automatically when the context manager exits
340
+ ```
341
+
342
+ ### Just ensure the binary is present
343
+
344
+ ```python
345
+ from mockserver.launcher import ensure_binary
346
+
347
+ launcher_path = ensure_binary() # returns Path to the launcher executable
348
+ ```
349
+
350
+ ### Specify a version
351
+
352
+ ```python
353
+ from mockserver.launcher import start
354
+
355
+ server = start(port=1080, version="7.2.0")
356
+ # ...
357
+ server.stop()
358
+ ```
359
+
360
+ ### API reference
361
+
362
+ | Function / Class | Description |
363
+ |---|---|
364
+ | `ensure_binary(version=None, *, log=True)` | Download, verify, cache, and return the launcher `Path`. Defaults to the client's own version. |
365
+ | `start(port, version=None, *, extra_args=None, log=True)` | Ensure the binary and start MockServer. Returns a `MockServerProcess`. |
366
+ | `MockServerProcess` | Handle to the running process. Properties: `port`, `pid`, `launcher`, `returncode`. Methods: `stop(timeout=10.0)`. Supports `with` statement. |
367
+
368
+ ### Supported platforms
369
+
370
+ | OS | Architecture |
371
+ |---|---|
372
+ | Linux | x86_64, aarch64 |
373
+ | macOS (darwin) | x86_64, aarch64 |
374
+ | Windows | x86_64, aarch64 |
375
+
376
+ ### Environment variables
377
+
378
+ | Variable | Purpose |
379
+ |---|---|
380
+ | `MOCKSERVER_BINARY_BASE_URL` | Mirror host for the release assets (corporate / air-gapped networks) |
381
+ | `MOCKSERVER_BINARY_CACHE` | Override the cache directory (default: `~/.cache/mockserver/binaries` on Unix) |
382
+ | `MOCKSERVER_SKIP_BINARY_DOWNLOAD` | Fail instead of downloading (use with a pre-seeded cache in CI) |
383
+
384
+ ### Version
385
+
386
+ By default the launcher downloads the MockServer version matching this client package (currently the version set in `pyproject.toml`). Pass an explicit `version` argument to override.
387
+
276
388
  ## Requirements
277
389
 
278
390
  - Python 3.9+
@@ -243,6 +243,118 @@ response = (
243
243
  )
244
244
  ```
245
245
 
246
+ ## Interactive Breakpoints
247
+
248
+ The client supports matcher-driven interactive breakpoints over the callback WebSocket. Register a breakpoint matcher to pause forwarded/proxied exchanges at specific phases and inspect/modify/continue them via callback handlers.
249
+
250
+ ### Register a breakpoint (sync client)
251
+
252
+ ```python
253
+ from mockserver import MockServerClient, HttpRequest, HttpResponse
254
+
255
+ client = MockServerClient("localhost", 1080)
256
+
257
+ # REQUEST phase only
258
+ bp_id = client.add_request_breakpoint(
259
+ HttpRequest(path="/api/.*"),
260
+ lambda request: request, # continue unchanged (or return HttpResponse to abort)
261
+ )
262
+
263
+ # REQUEST + RESPONSE
264
+ bp_id = client.add_request_and_response_breakpoint(
265
+ HttpRequest(path="/api/.*"),
266
+ lambda request: request, # REQUEST handler
267
+ lambda request, response: response, # RESPONSE handler
268
+ )
269
+
270
+ # All phases with stream frame handler
271
+ bp_id = client.add_breakpoint(
272
+ HttpRequest(path="/stream/.*"),
273
+ ["REQUEST", "RESPONSE", "RESPONSE_STREAM", "INBOUND_STREAM"],
274
+ request_handler=lambda request: request,
275
+ response_handler=lambda request, response: response,
276
+ stream_frame_handler=lambda frame: {"action": "CONTINUE"},
277
+ # Other actions: MODIFY (with body), DROP, INJECT (with body), CLOSE
278
+ )
279
+ ```
280
+
281
+ ### Manage breakpoints
282
+
283
+ ```python
284
+ # List all matchers
285
+ matchers = client.list_breakpoint_matchers() # {"matchers": [...]}
286
+
287
+ # Remove a specific matcher
288
+ client.remove_breakpoint_matcher(bp_id)
289
+
290
+ # Clear all matchers
291
+ client.clear_breakpoint_matchers()
292
+ ```
293
+
294
+ The async client (`AsyncMockServerClient`) exposes the same methods as coroutines.
295
+
296
+ ## Start / Launch MockServer
297
+
298
+ The Python client can download and launch a local MockServer instance directly -- no Java installation and no Docker required. The launcher downloads a self-contained platform bundle (`mockserver-<version>-<os>-<arch>`) from the GitHub Release, verifies its SHA-256, caches it per-user, and starts it.
299
+
300
+ ### Quick start
301
+
302
+ ```python
303
+ from mockserver.launcher import start, MockServerProcess
304
+
305
+ # Download (first run) and start MockServer on port 1080
306
+ with start(port=1080) as server:
307
+ print(f"MockServer running on port {server.port}, PID {server.pid}")
308
+ # ... use MockServer ...
309
+ # Server is stopped automatically when the context manager exits
310
+ ```
311
+
312
+ ### Just ensure the binary is present
313
+
314
+ ```python
315
+ from mockserver.launcher import ensure_binary
316
+
317
+ launcher_path = ensure_binary() # returns Path to the launcher executable
318
+ ```
319
+
320
+ ### Specify a version
321
+
322
+ ```python
323
+ from mockserver.launcher import start
324
+
325
+ server = start(port=1080, version="7.2.0")
326
+ # ...
327
+ server.stop()
328
+ ```
329
+
330
+ ### API reference
331
+
332
+ | Function / Class | Description |
333
+ |---|---|
334
+ | `ensure_binary(version=None, *, log=True)` | Download, verify, cache, and return the launcher `Path`. Defaults to the client's own version. |
335
+ | `start(port, version=None, *, extra_args=None, log=True)` | Ensure the binary and start MockServer. Returns a `MockServerProcess`. |
336
+ | `MockServerProcess` | Handle to the running process. Properties: `port`, `pid`, `launcher`, `returncode`. Methods: `stop(timeout=10.0)`. Supports `with` statement. |
337
+
338
+ ### Supported platforms
339
+
340
+ | OS | Architecture |
341
+ |---|---|
342
+ | Linux | x86_64, aarch64 |
343
+ | macOS (darwin) | x86_64, aarch64 |
344
+ | Windows | x86_64, aarch64 |
345
+
346
+ ### Environment variables
347
+
348
+ | Variable | Purpose |
349
+ |---|---|
350
+ | `MOCKSERVER_BINARY_BASE_URL` | Mirror host for the release assets (corporate / air-gapped networks) |
351
+ | `MOCKSERVER_BINARY_CACHE` | Override the cache directory (default: `~/.cache/mockserver/binaries` on Unix) |
352
+ | `MOCKSERVER_SKIP_BINARY_DOWNLOAD` | Fail instead of downloading (use with a pre-seeded cache in CI) |
353
+
354
+ ### Version
355
+
356
+ By default the launcher downloads the MockServer version matching this client package (currently the version set in `pyproject.toml`). Pass an explicit `version` argument to override.
357
+
246
358
  ## Requirements
247
359
 
248
360
  - Python 3.9+
@@ -3,6 +3,8 @@ from mockserver.models import (
3
3
  BinaryResponse,
4
4
  Body,
5
5
  ConnectionOptions,
6
+ CrossProtocolScenario,
7
+ CrossProtocolTrigger,
6
8
  Delay,
7
9
  DelayDistribution,
8
10
  DnsRecord,
@@ -26,12 +28,18 @@ from mockserver.models import (
26
28
  HttpSseResponse,
27
29
  HttpTemplate,
28
30
  HttpWebSocketResponse,
31
+ JsonPathBody,
29
32
  JsonRpcBody,
30
33
  KeyToMultiValue,
34
+ LoadProfile,
35
+ LoadScenario,
36
+ LoadStage,
37
+ LoadStep,
31
38
  OpenAPIDefinition,
32
39
  OpenAPIExpectation,
33
40
  Ports,
34
41
  RequestDefinition,
42
+ ResponseMode,
35
43
  SocketAddress,
36
44
  SseEvent,
37
45
  TimeToLive,
@@ -41,6 +49,37 @@ from mockserver.models import (
41
49
  VerificationTimes,
42
50
  WebSocketMessage,
43
51
  )
52
+ from mockserver.llm import (
53
+ Completion,
54
+ ConversationPredicates,
55
+ EmbeddingResponse,
56
+ HttpLlmResponse,
57
+ IsolationSource,
58
+ LlmChaosProfile,
59
+ LlmConversationBuilder,
60
+ LlmFailoverBuilder,
61
+ LlmMockBuilder,
62
+ NormalizationOptions,
63
+ Provider,
64
+ Role,
65
+ StreamingPhysics,
66
+ ToolUse,
67
+ TurnBuilder,
68
+ Usage,
69
+ completion,
70
+ conversation,
71
+ cookie,
72
+ embedding,
73
+ header,
74
+ llm_failover,
75
+ llm_mock,
76
+ llm_response,
77
+ query_parameter,
78
+ streaming_physics,
79
+ time_to_first_token,
80
+ tool_use,
81
+ usage,
82
+ )
44
83
  from mockserver.exceptions import (
45
84
  MockServerCallbackError,
46
85
  MockServerConnectionError,
@@ -49,7 +88,22 @@ from mockserver.exceptions import (
49
88
  MockServerWebSocketError,
50
89
  )
51
90
  from mockserver.client import MockServerClient
91
+ from mockserver.mcp import (
92
+ McpMockBuilder,
93
+ McpPromptBuilder,
94
+ McpResourceBuilder,
95
+ McpToolBuilder,
96
+ mcp_mock,
97
+ )
52
98
  from mockserver.async_client import AsyncMockServerClient
99
+ from mockserver.launcher import (
100
+ MockServerProcess,
101
+ bundle_base_name,
102
+ cache_dir,
103
+ ensure_binary,
104
+ resolve_platform,
105
+ start as start_server,
106
+ )
53
107
 
54
108
  __all__ = [
55
109
  "AfterAction",
@@ -57,6 +111,8 @@ __all__ = [
57
111
  "BinaryResponse",
58
112
  "Body",
59
113
  "ConnectionOptions",
114
+ "CrossProtocolScenario",
115
+ "CrossProtocolTrigger",
60
116
  "Delay",
61
117
  "DelayDistribution",
62
118
  "DnsRecord",
@@ -80,8 +136,47 @@ __all__ = [
80
136
  "HttpSseResponse",
81
137
  "HttpTemplate",
82
138
  "HttpWebSocketResponse",
139
+ "JsonPathBody",
83
140
  "JsonRpcBody",
84
141
  "KeyToMultiValue",
142
+ "LoadProfile",
143
+ "LoadScenario",
144
+ "LoadStage",
145
+ "LoadStep",
146
+ "Completion",
147
+ "ConversationPredicates",
148
+ "EmbeddingResponse",
149
+ "HttpLlmResponse",
150
+ "IsolationSource",
151
+ "LlmChaosProfile",
152
+ "LlmConversationBuilder",
153
+ "LlmFailoverBuilder",
154
+ "LlmMockBuilder",
155
+ "NormalizationOptions",
156
+ "Provider",
157
+ "Role",
158
+ "StreamingPhysics",
159
+ "ToolUse",
160
+ "TurnBuilder",
161
+ "Usage",
162
+ "completion",
163
+ "conversation",
164
+ "cookie",
165
+ "embedding",
166
+ "header",
167
+ "llm_failover",
168
+ "llm_mock",
169
+ "llm_response",
170
+ "query_parameter",
171
+ "streaming_physics",
172
+ "time_to_first_token",
173
+ "tool_use",
174
+ "usage",
175
+ "McpMockBuilder",
176
+ "McpPromptBuilder",
177
+ "McpResourceBuilder",
178
+ "McpToolBuilder",
179
+ "mcp_mock",
85
180
  "MockServerCallbackError",
86
181
  "MockServerClient",
87
182
  "MockServerConnectionError",
@@ -92,6 +187,7 @@ __all__ = [
92
187
  "OpenAPIExpectation",
93
188
  "Ports",
94
189
  "RequestDefinition",
190
+ "ResponseMode",
95
191
  "SocketAddress",
96
192
  "SseEvent",
97
193
  "TimeToLive",
@@ -100,4 +196,10 @@ __all__ = [
100
196
  "VerificationSequence",
101
197
  "VerificationTimes",
102
198
  "WebSocketMessage",
199
+ "MockServerProcess",
200
+ "bundle_base_name",
201
+ "cache_dir",
202
+ "ensure_binary",
203
+ "resolve_platform",
204
+ "start_server",
103
205
  ]