fixtureqa 0.1.4__tar.gz → 0.1.6__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.
- {fixtureqa-0.1.4/fixtureqa.egg-info → fixtureqa-0.1.6}/PKG-INFO +4 -3
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/README.md +5 -6
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/api/app.py +6 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/api/schemas.py +1 -1
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/models.py +1 -1
- fixtureqa-0.1.4/fixture/static/assets/index-B31-1dt-.css → fixtureqa-0.1.6/fixture/static/assets/index-Dv0_KeqF.css +1 -1
- fixtureqa-0.1.4/fixture/static/assets/index-Cb1uGbWD.js → fixtureqa-0.1.6/fixture/static/assets/index-nUPn4WaU.js +14 -14
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/static/index.html +2 -2
- {fixtureqa-0.1.4 → fixtureqa-0.1.6/fixtureqa.egg-info}/PKG-INFO +4 -3
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixtureqa.egg-info/SOURCES.txt +6 -3
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixtureqa.egg-info/requires.txt +3 -2
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/pyproject.toml +8 -3
- fixtureqa-0.1.6/tests/test_auth.py +36 -0
- fixtureqa-0.1.6/tests/test_sessions.py +152 -0
- fixtureqa-0.1.6/tests/test_templates.py +81 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/LICENSE +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/__init__.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/__main__.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/api/__init__.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/api/connection_manager.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/api/deps.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/api/routers/__init__.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/api/routers/admin.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/api/routers/auth.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/api/routers/branding.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/api/routers/fix_spec.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/api/routers/messages.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/api/routers/scenarios.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/api/routers/sessions.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/api/routers/setup.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/api/routers/templates.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/api/routers/ws.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/config/__init__.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/__init__.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/auth.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/config_store.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/events.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/fix_application.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/fix_parser.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/fix_spec_parser.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/fix_tags.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/housekeeping.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/message_log.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/message_store.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/scenario_runner.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/scenario_store.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/session.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/session_manager.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/template_store.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/user_store.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/core/venue_responses.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/fix_specs/FIX42.xml +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/fix_specs/FIX44.xml +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/server.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/static/assets/ag-grid-_QKprVdm.js +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/static/assets/react-vendor-2eF0YfZT.js +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/static/favicon.svg +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixture/ui/__init__.py +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixtureqa.egg-info/dependency_links.txt +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixtureqa.egg-info/entry_points.txt +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/fixtureqa.egg-info/top_level.txt +0 -0
- {fixtureqa-0.1.4 → fixtureqa-0.1.6}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fixtureqa
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.6
|
|
4
4
|
Summary: FIXture — FIX Protocol Testing Tool
|
|
5
5
|
Requires-Python: >=3.10
|
|
6
6
|
License-File: LICENSE
|
|
@@ -11,6 +11,7 @@ Requires-Dist: websockets>=12.0
|
|
|
11
11
|
Requires-Dist: python-jose[cryptography]>=3.3.0
|
|
12
12
|
Requires-Dist: passlib[bcrypt]>=1.7.4
|
|
13
13
|
Provides-Extra: dev
|
|
14
|
-
Requires-Dist: pytest; extra == "dev"
|
|
15
|
-
Requires-Dist:
|
|
14
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
15
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
16
|
+
Requires-Dist: httpx>=0.27; extra == "dev"
|
|
16
17
|
Dynamic: license-file
|
|
@@ -26,8 +26,8 @@ A Python FIX protocol testing tool. Supports FIX 4.2 and 4.4, dynamic session cr
|
|
|
26
26
|
## Requirements
|
|
27
27
|
|
|
28
28
|
- Python 3.10+
|
|
29
|
-
- [
|
|
30
|
-
- Node.js 20+ (frontend dev/build only)
|
|
29
|
+
- [fixcore-engine](https://pypi.org/project/fixcore-engine/) — pure Python FIX engine (no C extension, no compiler needed)
|
|
30
|
+
- Node.js 20+ (frontend dev/build only — not needed at runtime; Docker builds the frontend automatically)
|
|
31
31
|
|
|
32
32
|
## Quick start — Docker (recommended)
|
|
33
33
|
|
|
@@ -77,14 +77,13 @@ python -m fixture [--host HOST] [--port PORT] [--log-level LEVEL] [--log-file PA
|
|
|
77
77
|
|
|
78
78
|
## Architecture
|
|
79
79
|
|
|
80
|
-
One
|
|
80
|
+
One fixcore-engine transport per session, running as asyncio tasks on the same event loop as FastAPI. This enables dynamic session creation without restarting.
|
|
81
81
|
|
|
82
82
|
```
|
|
83
83
|
SessionManager
|
|
84
84
|
└── Session (one per FIX session)
|
|
85
|
-
├── FixApplication ←
|
|
86
|
-
|
|
87
|
-
└── daemon thread
|
|
85
|
+
├── FixApplication ← fixcore-engine callbacks
|
|
86
|
+
└── SocketInitiator or SocketAcceptor (asyncio tasks)
|
|
88
87
|
```
|
|
89
88
|
|
|
90
89
|
Events flow upward via an observer pattern to the FastAPI WebSocket layer and into the React UI.
|
|
@@ -25,6 +25,12 @@ async def lifespan(app: FastAPI):
|
|
|
25
25
|
app.state.housekeeping.start()
|
|
26
26
|
yield
|
|
27
27
|
sm.unsubscribe(cm.sync_event_handler)
|
|
28
|
+
# Force-stop all running sessions so their asyncio tasks can be cancelled cleanly
|
|
29
|
+
for sid in list(sm._sessions.keys()):
|
|
30
|
+
try:
|
|
31
|
+
await sm.stop_session(sid, force=True)
|
|
32
|
+
except Exception:
|
|
33
|
+
pass
|
|
28
34
|
sm.close() # flush SQLite writer
|
|
29
35
|
|
|
30
36
|
|
|
@@ -16,7 +16,7 @@ class SessionConfigRequest(BaseModel):
|
|
|
16
16
|
use_file_log: bool = True
|
|
17
17
|
start_time: str = "00:00:00"
|
|
18
18
|
end_time: str = "00:00:00"
|
|
19
|
-
reset_on_logon: bool =
|
|
19
|
+
reset_on_logon: bool = False
|
|
20
20
|
reset_on_logout: bool = False
|
|
21
21
|
session_role: str = "generic" # "client", "venue", or "generic"
|
|
22
22
|
auto_ack: bool = False
|