fixtureqa 0.4.27__tar.gz → 0.4.29__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 (101) hide show
  1. {fixtureqa-0.4.27/fixtureqa.egg-info → fixtureqa-0.4.29}/PKG-INFO +1 -1
  2. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/perf_engine.py +7 -0
  3. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/perf_models.py +1 -0
  4. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/perf_stats.py +3 -1
  5. fixtureqa-0.4.27/fixture/static/assets/index-DgRTHspW.js → fixtureqa-0.4.29/fixture/static/assets/index-C2JvCG6w.js +22 -22
  6. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/static/index.html +1 -1
  7. {fixtureqa-0.4.27 → fixtureqa-0.4.29/fixtureqa.egg-info}/PKG-INFO +1 -1
  8. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixtureqa.egg-info/SOURCES.txt +1 -1
  9. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/pyproject.toml +1 -1
  10. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_perf_engine.py +19 -0
  11. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/LICENSE +0 -0
  12. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/README.md +0 -0
  13. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/__init__.py +0 -0
  14. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/__main__.py +0 -0
  15. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/__init__.py +0 -0
  16. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/app.py +0 -0
  17. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/connection_manager.py +0 -0
  18. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/deps.py +0 -0
  19. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/__init__.py +0 -0
  20. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/admin.py +0 -0
  21. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/auth.py +0 -0
  22. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/branding.py +0 -0
  23. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/custom_tags.py +0 -0
  24. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/fix_spec.py +0 -0
  25. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/messages.py +0 -0
  26. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/perf.py +0 -0
  27. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/scenarios.py +0 -0
  28. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/sessions.py +0 -0
  29. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/setup.py +0 -0
  30. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/spec_overlay.py +0 -0
  31. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/templates.py +0 -0
  32. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/ws.py +0 -0
  33. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/schemas.py +0 -0
  34. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/config/__init__.py +0 -0
  35. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/__init__.py +0 -0
  36. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/atomic_io.py +0 -0
  37. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/auth.py +0 -0
  38. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/config_store.py +0 -0
  39. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/custom_tag_store.py +0 -0
  40. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/db_migrations.py +0 -0
  41. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/events.py +0 -0
  42. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/fix_application.py +0 -0
  43. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/fix_builder.py +0 -0
  44. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/fix_parser.py +0 -0
  45. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/fix_spec_parser.py +0 -0
  46. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/fix_tags.py +0 -0
  47. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/fix_time.py +0 -0
  48. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/housekeeping.py +0 -0
  49. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/inbound.py +0 -0
  50. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/json_store.py +0 -0
  51. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/latency_csv_writer.py +0 -0
  52. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/message_log.py +0 -0
  53. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/message_store.py +0 -0
  54. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/models.py +0 -0
  55. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/perf_charts.py +0 -0
  56. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/perf_payload.py +0 -0
  57. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/perf_store.py +0 -0
  58. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/perf_writer.py +0 -0
  59. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/scenario_runner.py +0 -0
  60. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/scenario_store.py +0 -0
  61. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/session.py +0 -0
  62. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/session_manager.py +0 -0
  63. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/spec_overlay_store.py +0 -0
  64. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/template_store.py +0 -0
  65. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/user_store.py +0 -0
  66. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/venue_responses.py +0 -0
  67. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/fix_specs/FIX42.xml +0 -0
  68. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/fix_specs/FIX44.xml +0 -0
  69. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/server.py +0 -0
  70. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/static/assets/ag-grid-_QKprVdm.js +0 -0
  71. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/static/assets/index-C9bcm_lN.css +0 -0
  72. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/static/assets/index-CyNOPa0n.js +0 -0
  73. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/static/assets/react-vendor-2eF0YfZT.js +0 -0
  74. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/static/favicon.svg +0 -0
  75. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/ui/__init__.py +0 -0
  76. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixtureqa.egg-info/dependency_links.txt +0 -0
  77. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixtureqa.egg-info/entry_points.txt +0 -0
  78. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixtureqa.egg-info/requires.txt +0 -0
  79. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixtureqa.egg-info/top_level.txt +0 -0
  80. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/setup.cfg +0 -0
  81. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_atomic_io.py +0 -0
  82. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_auth.py +0 -0
  83. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_config_store.py +0 -0
  84. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_connection_manager.py +0 -0
  85. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_db_migrations.py +0 -0
  86. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_fix_builder.py +0 -0
  87. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_health.py +0 -0
  88. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_inbound.py +0 -0
  89. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_inbound_validation.py +0 -0
  90. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_message_store.py +0 -0
  91. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_perf_api.py +0 -0
  92. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_perf_models.py +0 -0
  93. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_perf_payload.py +0 -0
  94. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_perf_rehydrate.py +0 -0
  95. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_scenarios.py +0 -0
  96. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_session_auto_response.py +0 -0
  97. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_session_lifecycle.py +0 -0
  98. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_session_manager_concurrency.py +0 -0
  99. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_sessions.py +0 -0
  100. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_templates.py +0 -0
  101. {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_ws.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fixtureqa
3
- Version: 0.4.27
3
+ Version: 0.4.29
4
4
  Summary: FIXture — FIX Protocol Testing Tool
5
5
  Requires-Python: >=3.10
6
6
  License-File: LICENSE
@@ -331,6 +331,12 @@ class PerfRun:
331
331
  self.stats.amends_lost += 1
332
332
  if entry.get("cancel_inflight"):
333
333
  self.stats.cancels_lost += 1
334
+ if not entry.get("completed"):
335
+ # In-flight when the run ended — truncated, not timeout-reaped. Counted
336
+ # separately from lost_timeout so the summary reconciles (orders_sent =
337
+ # completions + lost_timeout + lost_shutdown) and "stuck" stays distinct
338
+ # from "ran out of time".
339
+ self.stats.lost_shutdown += 1
334
340
  self._finalize(entry, "filled" if entry.get("completed") else "lost")
335
341
  self._pending.clear()
336
342
  self._venue_orders.clear()
@@ -1376,6 +1382,7 @@ class PerfRun:
1376
1382
  cancel_latency=LatencyStats(**self.stats.cancel_latency.stats()),
1377
1383
  scenario_latency=LatencyStats(**self.stats.scenario_latency.stats()),
1378
1384
  errors=SnapshotErrors(lost_timeout=self.stats.lost_timeout,
1385
+ lost_shutdown=self.stats.lost_shutdown,
1379
1386
  rejected=self.stats.rejected,
1380
1387
  saturated=self.status == "saturated"))
1381
1388
  self.latest = snap.model_dump()
@@ -338,6 +338,7 @@ class RelayLeg(BaseModel):
338
338
 
339
339
  class SnapshotErrors(BaseModel):
340
340
  lost_timeout: int = 0
341
+ lost_shutdown: int = 0 # in-flight when the run ended (truncated, not stuck)
341
342
  rejected: int = 0
342
343
  saturated: bool = False
343
344
 
@@ -163,7 +163,8 @@ class PerfStats:
163
163
  # middle_manager relay: messages forwarded each direction
164
164
  self.relay_fwd_down = 0 # client→venue direction (orders/amends/cancels)
165
165
  self.relay_fwd_up = 0 # venue→client direction (execs/rejects)
166
- self.lost_timeout = 0
166
+ self.lost_timeout = 0 # reaped mid-run by the timeout sweeper (genuinely stuck)
167
+ self.lost_shutdown = 0 # still in-flight when the run ended (truncated, not stuck)
167
168
  self.dropped = 0
168
169
  self.rejected = 0
169
170
  self.pending = 0 # gauge, set by the engine
@@ -263,6 +264,7 @@ class PerfStats:
263
264
  "cancels_received": self.cancels_received,
264
265
  "cancels_uncorrelated": self.cancels_uncorrelated,
265
266
  "lost_timeout": self.lost_timeout,
267
+ "lost_shutdown": self.lost_shutdown,
266
268
  "dropped": self.dropped,
267
269
  "rejected": self.rejected,
268
270
  "scenarios_dispatched": self.scenarios_dispatched,