singleserver 0.1.0__py3-none-any.whl → 0.2.0__py3-none-any.whl
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.
- singleserver/__init__.py +1 -1
- singleserver/server.py +14 -5
- {singleserver-0.1.0.dist-info → singleserver-0.2.0.dist-info}/METADATA +1 -1
- singleserver-0.2.0.dist-info/RECORD +9 -0
- singleserver-0.1.0.dist-info/RECORD +0 -9
- {singleserver-0.1.0.dist-info → singleserver-0.2.0.dist-info}/WHEEL +0 -0
- {singleserver-0.1.0.dist-info → singleserver-0.2.0.dist-info}/licenses/LICENSE +0 -0
singleserver/__init__.py
CHANGED
singleserver/server.py
CHANGED
|
@@ -45,6 +45,7 @@ class SingleServer:
|
|
|
45
45
|
name: str,
|
|
46
46
|
command: list[str],
|
|
47
47
|
port: int | None = None,
|
|
48
|
+
host: str = "127.0.0.1",
|
|
48
49
|
socket: str | Path | None = None,
|
|
49
50
|
lock_port: int | None = None,
|
|
50
51
|
lock_socket: str | Path | None = None,
|
|
@@ -66,8 +67,9 @@ class SingleServer:
|
|
|
66
67
|
|
|
67
68
|
Args:
|
|
68
69
|
name: Identifier for logging/debugging.
|
|
69
|
-
command: Command to run. Can include {port}
|
|
70
|
+
command: Command to run. Can include {port}, {host}, {socket} placeholders.
|
|
70
71
|
port: TCP port the server will listen on.
|
|
72
|
+
host: IP address to bind to (default: 127.0.0.1 for localhost only).
|
|
71
73
|
socket: Unix socket path the server will listen on.
|
|
72
74
|
lock_port: Separate port for the coordination lock (defaults to port - 1).
|
|
73
75
|
lock_socket: Separate socket path for coordination lock.
|
|
@@ -90,6 +92,7 @@ class SingleServer:
|
|
|
90
92
|
self.name = name
|
|
91
93
|
self._command_template = command
|
|
92
94
|
self.port = port
|
|
95
|
+
self.host = host
|
|
93
96
|
self.socket_path = Path(socket) if socket else None
|
|
94
97
|
|
|
95
98
|
# Determine lock address (separate from server address)
|
|
@@ -132,6 +135,8 @@ class SingleServer:
|
|
|
132
135
|
for part in self._command_template:
|
|
133
136
|
if "{port}" in part:
|
|
134
137
|
part = part.replace("{port}", str(self.port))
|
|
138
|
+
if "{host}" in part:
|
|
139
|
+
part = part.replace("{host}", self.host)
|
|
135
140
|
if "{socket}" in part:
|
|
136
141
|
part = part.replace("{socket}", str(self.socket_path))
|
|
137
142
|
result.append(part)
|
|
@@ -153,7 +158,7 @@ class SingleServer:
|
|
|
153
158
|
def check() -> bool:
|
|
154
159
|
try:
|
|
155
160
|
client = ServerClient(
|
|
156
|
-
host=
|
|
161
|
+
host=self.host,
|
|
157
162
|
port=self.port,
|
|
158
163
|
socket_path=self.socket_path,
|
|
159
164
|
health_check_url=self.health_check_url,
|
|
@@ -271,7 +276,7 @@ class SingleServer:
|
|
|
271
276
|
|
|
272
277
|
# Create client
|
|
273
278
|
self._client = ServerClient(
|
|
274
|
-
host=
|
|
279
|
+
host=self.host,
|
|
275
280
|
port=self.port,
|
|
276
281
|
socket_path=self.socket_path,
|
|
277
282
|
health_check_url=self.health_check_url,
|
|
@@ -332,6 +337,7 @@ class ManagedServer:
|
|
|
332
337
|
name: str,
|
|
333
338
|
command: list[str],
|
|
334
339
|
port: int | None = None,
|
|
340
|
+
host: str = "127.0.0.1",
|
|
335
341
|
socket: str | Path | None = None,
|
|
336
342
|
**kwargs: Any,
|
|
337
343
|
):
|
|
@@ -343,6 +349,7 @@ class ManagedServer:
|
|
|
343
349
|
self.name = name
|
|
344
350
|
self._command_template = command
|
|
345
351
|
self.port = port
|
|
352
|
+
self.host = host
|
|
346
353
|
self.socket_path = Path(socket) if socket else None
|
|
347
354
|
self._kwargs = kwargs
|
|
348
355
|
self._owner: ProcessOwner | None = None
|
|
@@ -355,6 +362,8 @@ class ManagedServer:
|
|
|
355
362
|
for part in self._command_template:
|
|
356
363
|
if "{port}" in part:
|
|
357
364
|
part = part.replace("{port}", str(self.port))
|
|
365
|
+
if "{host}" in part:
|
|
366
|
+
part = part.replace("{host}", self.host)
|
|
358
367
|
if "{socket}" in part:
|
|
359
368
|
part = part.replace("{socket}", str(self.socket_path))
|
|
360
369
|
result.append(part)
|
|
@@ -371,7 +380,7 @@ class ManagedServer:
|
|
|
371
380
|
def check() -> bool:
|
|
372
381
|
try:
|
|
373
382
|
client = ServerClient(
|
|
374
|
-
host=
|
|
383
|
+
host=self.host,
|
|
375
384
|
port=self.port,
|
|
376
385
|
socket_path=self.socket_path,
|
|
377
386
|
health_check_url=health_check_url,
|
|
@@ -401,7 +410,7 @@ class ManagedServer:
|
|
|
401
410
|
self._owner.start()
|
|
402
411
|
|
|
403
412
|
self._client = ServerClient(
|
|
404
|
-
host=
|
|
413
|
+
host=self.host,
|
|
405
414
|
port=self.port,
|
|
406
415
|
socket_path=self.socket_path,
|
|
407
416
|
health_check_url=health_check_url,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: singleserver
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Manage singleton server processes across multiple workers using atomic socket binding
|
|
5
5
|
Project-URL: Homepage, https://github.com/Technology-Company/singleserver
|
|
6
6
|
Project-URL: Documentation, https://github.com/Technology-Company/singleserver#readme
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
singleserver/__init__.py,sha256=rk66oHBFaM10-woTb7mmc0uv-hIS6RFalUHVfumW7d0,1052
|
|
2
|
+
singleserver/client.py,sha256=6OG9l10xUXG_wLoJOVocy8jRM4f4JItm0A6yr1Rtd0Q,9560
|
|
3
|
+
singleserver/lock.py,sha256=e0AWDnYk3I6_4dYSCwxz4H2FCkb9ItJLinU3palZ2ak,9100
|
|
4
|
+
singleserver/process.py,sha256=GqUyGWZXy85biwiShuU95tMOQXAmbiBBDeXrTEikq-o,17062
|
|
5
|
+
singleserver/server.py,sha256=jHltj1mMEc1mRgnQLZxY42aMCj1_EkWm2siZSd88AAQ,15366
|
|
6
|
+
singleserver-0.2.0.dist-info/METADATA,sha256=Jt4H5c83_gBrQuusA9wR-fPNwIdVTTXpRMdbDJQw9s4,6013
|
|
7
|
+
singleserver-0.2.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
8
|
+
singleserver-0.2.0.dist-info/licenses/LICENSE,sha256=x6w9qzvmsY6V3iRykNoiSWD0NqCZeV6VejFT4kVi6Fg,1075
|
|
9
|
+
singleserver-0.2.0.dist-info/RECORD,,
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
singleserver/__init__.py,sha256=EgSpurqe2RhhGvvKghb74xU9lOsGQexoXP0mMmP4fu8,1052
|
|
2
|
-
singleserver/client.py,sha256=6OG9l10xUXG_wLoJOVocy8jRM4f4JItm0A6yr1Rtd0Q,9560
|
|
3
|
-
singleserver/lock.py,sha256=e0AWDnYk3I6_4dYSCwxz4H2FCkb9ItJLinU3palZ2ak,9100
|
|
4
|
-
singleserver/process.py,sha256=GqUyGWZXy85biwiShuU95tMOQXAmbiBBDeXrTEikq-o,17062
|
|
5
|
-
singleserver/server.py,sha256=otrSQVQVNXEpVosG4GuCJk_Iozuqnbwmkt77c0D9cMI,14978
|
|
6
|
-
singleserver-0.1.0.dist-info/METADATA,sha256=oZeiUEhP_NpZXtRuaHkO1v0Cml6DJUCn9hXmI6b5KeY,6013
|
|
7
|
-
singleserver-0.1.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
8
|
-
singleserver-0.1.0.dist-info/licenses/LICENSE,sha256=x6w9qzvmsY6V3iRykNoiSWD0NqCZeV6VejFT4kVi6Fg,1075
|
|
9
|
-
singleserver-0.1.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|