pmxt 1.0.1__tar.gz → 1.0.4__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 (65) hide show
  1. {pmxt-1.0.1 → pmxt-1.0.4}/PKG-INFO +1 -1
  2. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/__init__.py +1 -1
  3. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/api_client.py +1 -1
  4. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/configuration.py +1 -1
  5. {pmxt-1.0.1 → pmxt-1.0.4}/pmxt/__init__.py +1 -1
  6. pmxt-1.0.4/pmxt/_server/__init__.py +0 -0
  7. pmxt-1.0.4/pmxt/_server/bin/pmxt-ensure-server +158 -0
  8. pmxt-1.0.4/pmxt/_server/server/bundled.js +84705 -0
  9. {pmxt-1.0.1 → pmxt-1.0.4}/pmxt/client.py +6 -0
  10. {pmxt-1.0.1 → pmxt-1.0.4}/pmxt/server_manager.py +69 -11
  11. {pmxt-1.0.1 → pmxt-1.0.4}/pmxt.egg-info/PKG-INFO +1 -1
  12. {pmxt-1.0.1 → pmxt-1.0.4}/pmxt.egg-info/SOURCES.txt +3 -0
  13. {pmxt-1.0.1 → pmxt-1.0.4}/pyproject.toml +8 -1
  14. {pmxt-1.0.1 → pmxt-1.0.4}/README.md +0 -0
  15. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/api/__init__.py +0 -0
  16. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/api/default_api.py +0 -0
  17. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/api_response.py +0 -0
  18. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/exceptions.py +0 -0
  19. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/__init__.py +0 -0
  20. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/balance.py +0 -0
  21. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/base_request.py +0 -0
  22. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/base_response.py +0 -0
  23. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/cancel_order_request.py +0 -0
  24. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/create_order200_response.py +0 -0
  25. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/create_order_params.py +0 -0
  26. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/create_order_request.py +0 -0
  27. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/error_detail.py +0 -0
  28. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/error_response.py +0 -0
  29. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/exchange_credentials.py +0 -0
  30. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/fetch_balance200_response.py +0 -0
  31. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/fetch_markets200_response.py +0 -0
  32. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/fetch_markets_request.py +0 -0
  33. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/fetch_ohlcv200_response.py +0 -0
  34. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/fetch_ohlcv_request.py +0 -0
  35. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/fetch_ohlcv_request_args_inner.py +0 -0
  36. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/fetch_open_orders200_response.py +0 -0
  37. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/fetch_open_orders_request.py +0 -0
  38. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/fetch_order_book200_response.py +0 -0
  39. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/fetch_order_book_request.py +0 -0
  40. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/fetch_positions200_response.py +0 -0
  41. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/fetch_positions_request.py +0 -0
  42. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/fetch_trades200_response.py +0 -0
  43. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/fetch_trades_request.py +0 -0
  44. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/get_markets_by_slug_request.py +0 -0
  45. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/health_check200_response.py +0 -0
  46. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/history_filter_params.py +0 -0
  47. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/market_filter_params.py +0 -0
  48. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/market_outcome.py +0 -0
  49. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/order.py +0 -0
  50. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/order_book.py +0 -0
  51. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/order_level.py +0 -0
  52. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/position.py +0 -0
  53. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/price_candle.py +0 -0
  54. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/search_markets_request.py +0 -0
  55. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/search_markets_request_args_inner.py +0 -0
  56. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/trade.py +0 -0
  57. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/models/unified_market.py +0 -0
  58. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/py.typed +0 -0
  59. {pmxt-1.0.1 → pmxt-1.0.4}/generated/pmxt_internal/rest.py +0 -0
  60. {pmxt-1.0.1 → pmxt-1.0.4}/pmxt/models.py +0 -0
  61. {pmxt-1.0.1 → pmxt-1.0.4}/pmxt.egg-info/dependency_links.txt +0 -0
  62. {pmxt-1.0.1 → pmxt-1.0.4}/pmxt.egg-info/requires.txt +0 -0
  63. {pmxt-1.0.1 → pmxt-1.0.4}/pmxt.egg-info/top_level.txt +0 -0
  64. {pmxt-1.0.1 → pmxt-1.0.4}/setup.cfg +0 -0
  65. {pmxt-1.0.1 → pmxt-1.0.4}/tests/test_integration.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pmxt
3
- Version: 1.0.1
3
+ Version: 1.0.4
4
4
  Summary: Unified prediction market data API - The ccxt for prediction markets
5
5
  Author: PMXT Contributors
6
6
  License: MIT
@@ -14,7 +14,7 @@
14
14
  """ # noqa: E501
15
15
 
16
16
 
17
- __version__ = "1.0.1"
17
+ __version__ = "1.0.4"
18
18
 
19
19
  # Define package exports
20
20
  __all__ = [
@@ -91,7 +91,7 @@ class ApiClient:
91
91
  self.default_headers[header_name] = header_value
92
92
  self.cookie = cookie
93
93
  # Set default User-Agent.
94
- self.user_agent = 'OpenAPI-Generator/1.0.1/python'
94
+ self.user_agent = 'OpenAPI-Generator/1.0.4/python'
95
95
  self.client_side_validation = configuration.client_side_validation
96
96
 
97
97
  def __enter__(self):
@@ -506,7 +506,7 @@ class Configuration:
506
506
  "OS: {env}\n"\
507
507
  "Python Version: {pyversion}\n"\
508
508
  "Version of the API: 0.4.4\n"\
509
- "SDK Package Version: 1.0.1".\
509
+ "SDK Package Version: 1.0.4".\
510
510
  format(env=sys.platform, pyversion=sys.version)
511
511
 
512
512
  def get_host_settings(self) -> List[HostSetting]:
@@ -33,7 +33,7 @@ from .models import (
33
33
  CreateOrderParams,
34
34
  )
35
35
 
36
- __version__ = "1.0.1"
36
+ __version__ = "1.0.4"
37
37
  __all__ = [
38
38
  # Exchanges
39
39
  "Polymarket",
File without changes
@@ -0,0 +1,158 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * PMXT Server Launcher
5
+ *
6
+ * This script ensures the PMXT sidecar server is running.
7
+ * It's designed to be called by SDKs in any language (Python, Java, C#, Go, etc.)
8
+ *
9
+ * Behavior:
10
+ * 1. Check if server is already running (via lock file)
11
+ * 2. If running, exit successfully
12
+ * 3. If not running, spawn the server and wait for health check
13
+ * 4. Exit with code 0 on success, 1 on failure
14
+ */
15
+
16
+ const fs = require('fs');
17
+ const path = require('path');
18
+ const os = require('os');
19
+ const { spawn } = require('child_process');
20
+ const http = require('http');
21
+
22
+ const LOCK_FILE = path.join(os.homedir(), '.pmxt', 'server.lock');
23
+ const DEFAULT_PORT = 3847;
24
+ const HEALTH_CHECK_TIMEOUT = 10000; // 10 seconds
25
+ const HEALTH_CHECK_INTERVAL = 100; // 100ms
26
+
27
+ /**
28
+ * Check if the server is currently running
29
+ */
30
+ function isServerRunning() {
31
+ try {
32
+ if (!fs.existsSync(LOCK_FILE)) {
33
+ return false;
34
+ }
35
+
36
+ const lockData = JSON.parse(fs.readFileSync(LOCK_FILE, 'utf-8'));
37
+ const { pid, port } = lockData;
38
+
39
+ // Check if process exists
40
+ try {
41
+ process.kill(pid, 0); // Signal 0 checks existence without killing
42
+ return { running: true, port };
43
+ } catch (err) {
44
+ // Process doesn't exist, remove stale lock file
45
+ fs.unlinkSync(LOCK_FILE);
46
+ return false;
47
+ }
48
+ } catch (err) {
49
+ return false;
50
+ }
51
+ }
52
+
53
+ /**
54
+ * Wait for server to respond to health check
55
+ */
56
+ function waitForHealth(port, timeout = HEALTH_CHECK_TIMEOUT) {
57
+ return new Promise((resolve, reject) => {
58
+ const startTime = Date.now();
59
+
60
+ const checkHealth = () => {
61
+ const req = http.get(`http://localhost:${port}/health`, (res) => {
62
+ if (res.statusCode === 200) {
63
+ resolve(true);
64
+ } else {
65
+ scheduleNextCheck();
66
+ }
67
+ });
68
+
69
+ req.on('error', () => {
70
+ scheduleNextCheck();
71
+ });
72
+
73
+ req.setTimeout(1000);
74
+ };
75
+
76
+ const scheduleNextCheck = () => {
77
+ if (Date.now() - startTime > timeout) {
78
+ reject(new Error('Server health check timeout'));
79
+ } else {
80
+ setTimeout(checkHealth, HEALTH_CHECK_INTERVAL);
81
+ }
82
+ };
83
+
84
+ checkHealth();
85
+ });
86
+ }
87
+
88
+ /**
89
+ * Start the PMXT server
90
+ */
91
+ async function startServer() {
92
+ // 1. Try to find the server binary/script
93
+ let serverCmd = 'pmxt-server';
94
+ let args = [];
95
+
96
+ // Check for Python-bundled server (when bundled in pip package)
97
+ const pythonBundledServer = path.join(__dirname, '..', 'server', 'bundled.js');
98
+ // Check for local dev bundled server
99
+ const localBundledServer = path.join(__dirname, '..', 'dist', 'server', 'bundled.js');
100
+ const localDistServer = path.join(__dirname, '..', 'dist', 'server', 'index.js');
101
+ const localBinServer = path.join(__dirname, 'pmxt-server');
102
+
103
+ if (fs.existsSync(pythonBundledServer)) {
104
+ serverCmd = 'node';
105
+ args = [pythonBundledServer];
106
+ } else if (fs.existsSync(localBundledServer)) {
107
+ serverCmd = 'node';
108
+ args = [localBundledServer];
109
+ } else if (fs.existsSync(localDistServer)) {
110
+ serverCmd = 'node';
111
+ args = [localDistServer];
112
+ } else if (fs.existsSync(localBinServer)) {
113
+ serverCmd = localBinServer;
114
+ }
115
+
116
+ // Spawn server as detached process
117
+ const serverProcess = spawn(serverCmd, args, {
118
+ detached: true,
119
+ stdio: 'ignore',
120
+ env: process.env
121
+ });
122
+
123
+ // Detach from parent process
124
+ serverProcess.unref();
125
+
126
+ // Wait for server to be ready
127
+ await waitForHealth(DEFAULT_PORT);
128
+ }
129
+
130
+ /**
131
+ * Main entry point
132
+ */
133
+ async function main() {
134
+ try {
135
+ // Check if server is already running
136
+ const serverStatus = isServerRunning();
137
+
138
+ if (serverStatus && serverStatus.running) {
139
+ // Server is running, verify it's healthy
140
+ try {
141
+ await waitForHealth(serverStatus.port, 2000);
142
+ process.exit(0);
143
+ } catch (err) {
144
+ // Server process exists but not responding, try to start fresh
145
+ console.error('Server process exists but not responding, starting fresh...');
146
+ }
147
+ }
148
+
149
+ // Start the server
150
+ await startServer();
151
+ process.exit(0);
152
+ } catch (err) {
153
+ console.error('Failed to ensure server is running:', err.message);
154
+ process.exit(1);
155
+ }
156
+ }
157
+
158
+ main();