omlish 0.0.0.dev217__py3-none-any.whl → 0.0.0.dev218__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.
- omlish/__about__.py +2 -2
- omlish/docker/oci/__init__.py +0 -0
- omlish/docker/oci/data.py +71 -0
- omlish/docker/oci/media.py +124 -0
- omlish/formats/json5/Json5.g4 +0 -3
- omlish/http/coro/server.py +45 -25
- omlish/http/handlers.py +11 -1
- omlish/iterators/tools.py +1 -0
- omlish/logs/all.py +13 -0
- omlish/logs/callers.py +45 -0
- omlish/logs/protocol.py +176 -0
- omlish/sockets/addresses.py +13 -4
- omlish/sockets/bind.py +332 -0
- omlish/sockets/handlers.py +2 -20
- omlish/sockets/io.py +69 -0
- omlish/sockets/server/__init__.py +0 -0
- omlish/sockets/server/handlers.py +99 -0
- omlish/sockets/server/server.py +144 -0
- omlish/sockets/server/threading.py +123 -0
- {omlish-0.0.0.dev217.dist-info → omlish-0.0.0.dev218.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev217.dist-info → omlish-0.0.0.dev218.dist-info}/RECORD +25 -16
- omlish/docker/oci.py +0 -81
- omlish/sockets/server.py +0 -66
- {omlish-0.0.0.dev217.dist-info → omlish-0.0.0.dev218.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev217.dist-info → omlish-0.0.0.dev218.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev217.dist-info → omlish-0.0.0.dev218.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev217.dist-info → omlish-0.0.0.dev218.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,123 @@
|
|
1
|
+
# @omlish-lite
|
2
|
+
# ruff: noqa: UP006 UP007
|
3
|
+
import threading
|
4
|
+
import time
|
5
|
+
import typing as ta
|
6
|
+
|
7
|
+
from ...lite.check import check
|
8
|
+
from ..addresses import SocketAndAddress
|
9
|
+
from .handlers import SocketServerHandler
|
10
|
+
|
11
|
+
|
12
|
+
##
|
13
|
+
|
14
|
+
|
15
|
+
class ThreadingSocketServerHandler:
|
16
|
+
def __init__(
|
17
|
+
self,
|
18
|
+
handler: SocketServerHandler,
|
19
|
+
*,
|
20
|
+
shutdown_timeout: ta.Optional[float] = None,
|
21
|
+
) -> None:
|
22
|
+
super().__init__()
|
23
|
+
|
24
|
+
self._handler = handler
|
25
|
+
self._shutdown_timeout = shutdown_timeout
|
26
|
+
|
27
|
+
self._lock = threading.RLock()
|
28
|
+
self._threads: ta.List[threading.Thread] = []
|
29
|
+
self._is_shutdown = False
|
30
|
+
|
31
|
+
@property
|
32
|
+
def handler(self) -> SocketServerHandler:
|
33
|
+
return self._handler
|
34
|
+
|
35
|
+
#
|
36
|
+
|
37
|
+
def __call__(self, conn: SocketAndAddress) -> None:
|
38
|
+
self.handle(conn)
|
39
|
+
|
40
|
+
def handle(self, conn: SocketAndAddress) -> None:
|
41
|
+
with self._lock:
|
42
|
+
check.state(not self._is_shutdown)
|
43
|
+
|
44
|
+
self._reap()
|
45
|
+
|
46
|
+
t = threading.Thread(
|
47
|
+
target=self._handler,
|
48
|
+
args=(conn,),
|
49
|
+
)
|
50
|
+
|
51
|
+
self._threads.append(t)
|
52
|
+
|
53
|
+
t.start()
|
54
|
+
|
55
|
+
#
|
56
|
+
|
57
|
+
def _reap(self) -> None:
|
58
|
+
with self._lock:
|
59
|
+
self._threads[:] = (thread for thread in self._threads if thread.is_alive())
|
60
|
+
|
61
|
+
def is_alive(self) -> bool:
|
62
|
+
with self._lock:
|
63
|
+
self._reap()
|
64
|
+
|
65
|
+
return bool(self._threads)
|
66
|
+
|
67
|
+
def join(self, timeout: ta.Optional[float] = None) -> None:
|
68
|
+
if timeout is not None:
|
69
|
+
deadline: ta.Optional[float] = time.time() + timeout
|
70
|
+
else:
|
71
|
+
deadline = None
|
72
|
+
|
73
|
+
def calc_timeout() -> ta.Optional[float]:
|
74
|
+
if deadline is None:
|
75
|
+
return None
|
76
|
+
|
77
|
+
tt = deadline - time.time()
|
78
|
+
if tt <= 0:
|
79
|
+
raise TimeoutError
|
80
|
+
|
81
|
+
return tt
|
82
|
+
|
83
|
+
if not (self._lock.acquire(timeout=calc_timeout() or -1)):
|
84
|
+
raise TimeoutError
|
85
|
+
|
86
|
+
try:
|
87
|
+
self._reap()
|
88
|
+
|
89
|
+
for t in self._threads:
|
90
|
+
t.join(timeout=calc_timeout())
|
91
|
+
|
92
|
+
if t.is_alive():
|
93
|
+
raise TimeoutError
|
94
|
+
|
95
|
+
finally:
|
96
|
+
self._lock.release()
|
97
|
+
|
98
|
+
#
|
99
|
+
|
100
|
+
class _NOT_SET: # noqa
|
101
|
+
def __new__(cls, *args, **kwargs): # noqa
|
102
|
+
raise TypeError
|
103
|
+
|
104
|
+
def shutdown(
|
105
|
+
self,
|
106
|
+
block: bool = False,
|
107
|
+
timeout: ta.Union[float, None, ta.Type[_NOT_SET]] = _NOT_SET,
|
108
|
+
) -> None:
|
109
|
+
self._is_shutdown = True
|
110
|
+
|
111
|
+
if block:
|
112
|
+
if timeout is self._NOT_SET:
|
113
|
+
timeout = self._shutdown_timeout
|
114
|
+
|
115
|
+
self.join(timeout=timeout) # type: ignore
|
116
|
+
|
117
|
+
#
|
118
|
+
|
119
|
+
def __enter__(self) -> 'ThreadingSocketServerHandler':
|
120
|
+
return self
|
121
|
+
|
122
|
+
def __exit__(self, exc_type, exc_val, exc_tb):
|
123
|
+
self.shutdown()
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=YGmAnUBszmosQQ_7Hh2wwtDiYdYZ4unNKYzOtALuels,7968
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=0BtXUJi7KSCGQMkzet9GL1mr4dSvaRR9Jv-gAz1olhc,3380
|
3
3
|
omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
|
4
4
|
omlish/c3.py,sha256=ubu7lHwss5V4UznbejAI0qXhXahrU01MysuHOZI9C4U,8116
|
5
5
|
omlish/cached.py,sha256=UI-XTFBwA6YXWJJJeBn-WkwBkfzDjLBBaZf4nIJA9y0,510
|
@@ -224,9 +224,11 @@ omlish/docker/consts.py,sha256=wvwfUtEFrEWZKfREWqSMrx8xjjl8P5MNUSF6qzzgJHY,70
|
|
224
224
|
omlish/docker/detect.py,sha256=Qrdbosm2wJkxKDuy8gaGmbQoxk4Wnp1HJjAEz58NA8Y,614
|
225
225
|
omlish/docker/hub.py,sha256=7LIuJGdA-N1Y1dmo50ynKM1KUTcnQM_5XbtPbdT_QLU,3940
|
226
226
|
omlish/docker/manifests.py,sha256=LR4FpOGNUT3bZQ-gTjB6r_-1C3YiG30QvevZjrsVUQM,7068
|
227
|
-
omlish/docker/oci.py,sha256=wbiOpZQWZtiCtyoDpZhYyHvwkZv5przil9DRLAvHrfs,2743
|
228
227
|
omlish/docker/portrelay.py,sha256=QlRoTnQXs5INguR7XOj1xH0gNdL9SUeZm5z45DUctXo,1222
|
229
228
|
omlish/docker/timebomb.py,sha256=A_pgIDaXKsQwPiikrCTgIJl91gwYqkPGFY6j-Naq07Q,342
|
229
|
+
omlish/docker/oci/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
230
|
+
omlish/docker/oci/data.py,sha256=4KtSxziT70BhF30ozQ1SCfX4y0LT_5x0CuOKC4zrEV4,2616
|
231
|
+
omlish/docker/oci/media.py,sha256=fJ8VcU-edDpg-FyJQamw-sUlhTghkC-WQ1TC4MiRpFU,4499
|
230
232
|
omlish/formats/__init__.py,sha256=T0AG1gFnqQ5JiHN0UPQjQ-7g5tnxMIG-mgOvMYExYAM,21
|
231
233
|
omlish/formats/cbor.py,sha256=o_Hbe4kthO9CeXK-FySrw0dHVlrdyTo2Y8PpGRDfZ3c,514
|
232
234
|
omlish/formats/cloudpickle.py,sha256=16si4yUp_pAdDWGECAWf6HLA2PwSANGGgDoMLGZUem8,579
|
@@ -262,7 +264,7 @@ omlish/formats/json/stream/errors.py,sha256=c8M8UAYmIZ-vWZLeKD2jMj4EDCJbr9QR8Jq_
|
|
262
264
|
omlish/formats/json/stream/lex.py,sha256=ItsWvtl5SZH-HwQtPy8Cpf4nszqDzvUTdIOEmSRiZ-E,6807
|
263
265
|
omlish/formats/json/stream/parse.py,sha256=JuYmXwtTHmQJTFKoJNoEHUpCPxXdl_gvKPykVXgED34,6208
|
264
266
|
omlish/formats/json/stream/render.py,sha256=NtmDsN92xZi5dkgSSuMeMXMAiJblmjz1arB4Ft7vBhc,3715
|
265
|
-
omlish/formats/json5/Json5.g4,sha256=
|
267
|
+
omlish/formats/json5/Json5.g4,sha256=ZUmgJPvj8lSMUD_v3wijp10ZQExYB5mu5Q089dYEJSU,2389
|
266
268
|
omlish/formats/json5/__init__.py,sha256=BsjPz5zJDji3GjQ8x8hWvcl1GYPV_ZIHnE3c2Sr8aTU,102
|
267
269
|
omlish/formats/json5/codec.py,sha256=ldnxCRo0JP1fkGLt0mMxJlLvNxqIF_1KUCcSp1HtI-M,452
|
268
270
|
omlish/formats/json5/errors.py,sha256=AHkR9ySjAoQdUrizpqgL8fg0M5oe5mHZkml3KZHEvC4,38
|
@@ -299,7 +301,7 @@ omlish/http/consts.py,sha256=7BJ4D1MdIvqBcepkgCfBFHolgTwbOlqsOEiee_IjxOA,2289
|
|
299
301
|
omlish/http/cookies.py,sha256=uuOYlHR6e2SC3GM41V0aozK10nef9tYg83Scqpn5-HM,6351
|
300
302
|
omlish/http/dates.py,sha256=Otgp8wRxPgNGyzx8LFowu1vC4EKJYARCiAwLFncpfHM,2875
|
301
303
|
omlish/http/encodings.py,sha256=w2WoKajpaZnQH8j-IBvk5ZFL2O2pAU_iBvZnkocaTlw,164
|
302
|
-
omlish/http/handlers.py,sha256=
|
304
|
+
omlish/http/handlers.py,sha256=twe1VYYlIX0e_unFNtt5moU-VbtG29IuTu4RWS1vrn4,1052
|
303
305
|
omlish/http/headers.py,sha256=ZMmjrEiYjzo0YTGyK0YsvjdwUazktGqzVVYorY4fd44,5081
|
304
306
|
omlish/http/json.py,sha256=9XwAsl4966Mxrv-1ytyCqhcE6lbBJw-0_tFZzGszgHE,7440
|
305
307
|
omlish/http/jwt.py,sha256=6Rigk1WrJ059DY4jDIKnxjnChWb7aFdermj2AI2DSvk,4346
|
@@ -311,7 +313,7 @@ omlish/http/versions.py,sha256=wSiOXPiClVjkVgSU_VmxkoD1SUYGaoPbP0U5Aw-Ufg8,409
|
|
311
313
|
omlish/http/wsgi.py,sha256=czZsVUX-l2YTlMrUjKN49wRoP4rVpS0qpeBn4O5BoMY,948
|
312
314
|
omlish/http/coro/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
313
315
|
omlish/http/coro/fdio.py,sha256=ajj_lekRockGwQEw8m_mi6RO9-o6hnC9ITiwtZe3y-s,4017
|
314
|
-
omlish/http/coro/server.py,sha256
|
316
|
+
omlish/http/coro/server.py,sha256=IhdBv-Cx09FG6ADNXfysJV6v7i1gU7dCHLx9Bt_BieM,18799
|
315
317
|
omlish/inject/__init__.py,sha256=n0RC9UDGsBQQ39cST39-XJqJPq2M0tnnh9yJubW9azo,1891
|
316
318
|
omlish/inject/binder.py,sha256=DAbc8TZi5w8Mna0TUtq0mT4jeDVA7i7SlBtOFrh2swc,4185
|
317
319
|
omlish/inject/bindings.py,sha256=pLXn2U3kvmAS-68IOG-tr77DbiI-wp9hGyy4lhG6_H8,525
|
@@ -373,7 +375,7 @@ omlish/io/fdio/pollers.py,sha256=yNadAt3W5wd90PFmd3vD77bq5QwoVb2A6SM2JjZpKRs,550
|
|
373
375
|
omlish/iterators/__init__.py,sha256=yMavf5FofiS1EU4UFuWPXiFZ03W0H-y7MuMxW8FUaEE,358
|
374
376
|
omlish/iterators/iterators.py,sha256=ghI4dO6WPyyFOLTIIMaHQ_IOy2xXaFpGPqveZ5YGIBU,3158
|
375
377
|
omlish/iterators/recipes.py,sha256=53mkexitMhkwXQZbL6DrhpT0WePQ_56uXd5Jaw3DfzI,467
|
376
|
-
omlish/iterators/tools.py,sha256=
|
378
|
+
omlish/iterators/tools.py,sha256=Pi4ybXytUXVZ3xwK89xpPImQfYYId9p1vIFQvVqVLqA,2551
|
377
379
|
omlish/iterators/unique.py,sha256=0jAX3kwzVfRNhe0Tmh7kVP_Q2WBIn8POo_O-rgFV0rQ,1390
|
378
380
|
omlish/lang/__init__.py,sha256=sY7YSgN772n48qWlR-mwuOOCOwRF5Fh421gZqZWxYlw,4042
|
379
381
|
omlish/lang/cached.py,sha256=92TvRZQ6sWlm7dNn4hgl7aWKbX0J1XUEo3DRjBpgVQk,7834
|
@@ -429,13 +431,15 @@ omlish/lite/types.py,sha256=fP5EMyBdEp2LmDxcHjUDtwAMdR06ISr9lKOL7smWfHM,140
|
|
429
431
|
omlish/lite/typing.py,sha256=U3-JaEnkDSYxK4tsu_MzUn3RP6qALBe5FXQXpD-licE,1090
|
430
432
|
omlish/logs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
431
433
|
omlish/logs/abc.py,sha256=ho4ABKYMKX-V7g4sp1BByuOLzslYzLlQ0MESmjEpT-o,8005
|
432
|
-
omlish/logs/all.py,sha256=
|
434
|
+
omlish/logs/all.py,sha256=Er2NIcDvlMpuAcRr9b_uMHeoERU7I6lu5oLrDGRdV0U,728
|
435
|
+
omlish/logs/callers.py,sha256=W0BdEtuGkQ0JM-FCsXQIBQCsNUbIsbDrtCaJy9DStk4,1143
|
433
436
|
omlish/logs/color.py,sha256=CM-ceoPXs0j5_klnZDJkFCFRgHOToFzJyLjC6LsnPEk,665
|
434
437
|
omlish/logs/configs.py,sha256=XOc8rWxfPpPMxJESVD2mLCUoLtbQnGnZwvYhhqe7DD8,772
|
435
438
|
omlish/logs/filters.py,sha256=2noFRyBez3y519fpfsDSt1vo8wX-85b8sMXZi5o_xyE,208
|
436
439
|
omlish/logs/handlers.py,sha256=zgSnKQA5q9Fu7T0Nkd7twog9H1Wg9-bDCzz4_F1TOBo,319
|
437
440
|
omlish/logs/json.py,sha256=zyqMWpZY3lk4WRk4wgmataBomGX9S3iDsydiM1sS-lI,1366
|
438
441
|
omlish/logs/noisy.py,sha256=Ubc-eTH6ZbGYsLfUUi69JAotwuUwzb-SJBeGo_0dIZI,348
|
442
|
+
omlish/logs/protocol.py,sha256=NzyCeNBN-fyKpJinhECfjUQSd5MxZLiYbuLCTtW6QUU,4500
|
439
443
|
omlish/logs/proxy.py,sha256=A-ROPUUAlF397qTbEqhel6YhQMstNuXL3Xmts7w9dAo,2347
|
440
444
|
omlish/logs/standard.py,sha256=FbKdF2Z4Na5i2TNwKn0avLJXyICe2JKsPufjvKCHGn0,3162
|
441
445
|
omlish/logs/utils.py,sha256=mzHrZ9ji75p5A8qR29eUr05CBAHMb8J753MSkID_VaQ,393
|
@@ -505,9 +509,14 @@ omlish/secrets/pwhash.py,sha256=Goktn-swmC6PXqfRBnDrH_Lr42vjckT712UyErPjzkw,4102
|
|
505
509
|
omlish/secrets/secrets.py,sha256=cnDGBoPknVxsCN04_gqcJT_7Ebk3iO3VPkRZ2oMjkMw,7868
|
506
510
|
omlish/secrets/subprocesses.py,sha256=ffjfbgPbEE_Pwb_87vG4yYR2CGZy3I31mHNCo_0JtHw,1212
|
507
511
|
omlish/sockets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
508
|
-
omlish/sockets/addresses.py,sha256=
|
509
|
-
omlish/sockets/
|
510
|
-
omlish/sockets/
|
512
|
+
omlish/sockets/addresses.py,sha256=QGK-5smlg5owx3PEw9qSfSHQ5mkAYumUpbaVR4qvcpM,1442
|
513
|
+
omlish/sockets/bind.py,sha256=F5PATao0xUEoZ0unZbro2tPTECDtj1B6lS3ygEvIxUs,7750
|
514
|
+
omlish/sockets/handlers.py,sha256=cVMKG3dn_tJlz6aM0WUL1uQ03F7VQmmKn9yJlOwKE6g,226
|
515
|
+
omlish/sockets/io.py,sha256=lfhTkB7NnAIx9kuQhAkwgsEUXY78Mp1_WtYrIQNS_k8,1408
|
516
|
+
omlish/sockets/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
517
|
+
omlish/sockets/server/handlers.py,sha256=aoWZtDKPboHj3YAR-qHblnEGpz_Nx8mEajV_LxXUBRw,2440
|
518
|
+
omlish/sockets/server/server.py,sha256=ZLYjW_MmHfMGQ2qSMRFMKLwqPqGCCSf4ORiZjQd59MA,4144
|
519
|
+
omlish/sockets/server/threading.py,sha256=YmW3Ym_p5j_F4SIH9BgRHIObywjq1HS39j9CGWIcMAY,2856
|
511
520
|
omlish/specs/__init__.py,sha256=zZwF8yXTEkSstYtORkDhVLK-_hWU8WOJCuBpognb_NY,118
|
512
521
|
omlish/specs/jmespath/LICENSE,sha256=IH-ZZlZkS8XMkf_ubNVD1aYHQ2l_wd0tmHtXrCcYpRU,1113
|
513
522
|
omlish/specs/jmespath/__init__.py,sha256=9tsrquw1kXe1KAhTP3WeL0GlGBiTguQVxsC-lUYTWP4,2087
|
@@ -628,9 +637,9 @@ omlish/text/indent.py,sha256=YjtJEBYWuk8--b9JU_T6q4yxV85_TR7VEVr5ViRCFwk,1336
|
|
628
637
|
omlish/text/minja.py,sha256=jZC-fp3Xuhx48ppqsf2Sf1pHbC0t8XBB7UpUUoOk2Qw,5751
|
629
638
|
omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
|
630
639
|
omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
|
631
|
-
omlish-0.0.0.
|
632
|
-
omlish-0.0.0.
|
633
|
-
omlish-0.0.0.
|
634
|
-
omlish-0.0.0.
|
635
|
-
omlish-0.0.0.
|
636
|
-
omlish-0.0.0.
|
640
|
+
omlish-0.0.0.dev218.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
641
|
+
omlish-0.0.0.dev218.dist-info/METADATA,sha256=-vMqTXr2Q_gjsOk2hxSEXQXb9eWwZ4vVabWD7mQjgD8,4176
|
642
|
+
omlish-0.0.0.dev218.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
643
|
+
omlish-0.0.0.dev218.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
644
|
+
omlish-0.0.0.dev218.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
645
|
+
omlish-0.0.0.dev218.dist-info/RECORD,,
|
omlish/docker/oci.py
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
# ruff: noqa: UP006 UP007
|
2
|
-
# @omlish-lite
|
3
|
-
import dataclasses as dc
|
4
|
-
import typing as ta
|
5
|
-
|
6
|
-
from omlish.lite import marshal as msh
|
7
|
-
|
8
|
-
|
9
|
-
@dc.dataclass(frozen=True)
|
10
|
-
class OciImageIndex:
|
11
|
-
"""https://github.com/opencontainers/image-spec/blob/92353b0bee778725c617e7d57317b568a7796bd0/image-index.md"""
|
12
|
-
|
13
|
-
@dc.dataclass(frozen=True)
|
14
|
-
class Manifest:
|
15
|
-
digest: str
|
16
|
-
size: int
|
17
|
-
|
18
|
-
#
|
19
|
-
|
20
|
-
platform: ta.Optional[ta.Mapping[str, ta.Any]] = dc.field(default=None, metadata={msh.OBJ_MARSHALER_OMIT_IF_NONE: True}) # noqa
|
21
|
-
annotations: ta.Optional[ta.Mapping[str, str]] = dc.field(default=None, metadata={msh.OBJ_MARSHALER_OMIT_IF_NONE: True}) # noqa
|
22
|
-
|
23
|
-
#
|
24
|
-
|
25
|
-
MEDIA_TYPE: ta.ClassVar[str] = 'application/vnd.oci.image.manifest.v1+json'
|
26
|
-
media_type: str = dc.field(default=MEDIA_TYPE, metadata={msh.OBJ_MARSHALER_FIELD_KEY: 'mediaType'})
|
27
|
-
|
28
|
-
manifests: ta.Sequence[Manifest]
|
29
|
-
|
30
|
-
#
|
31
|
-
|
32
|
-
annotations: ta.Optional[ta.Mapping[str, str]] = dc.field(default=None, metadata={msh.OBJ_MARSHALER_OMIT_IF_NONE: True}) # noqa
|
33
|
-
|
34
|
-
#
|
35
|
-
|
36
|
-
SCHEMA_VERSION: ta.ClassVar[int] = 2
|
37
|
-
schema_version: int = dc.field(default=SCHEMA_VERSION, metadata={msh.OBJ_MARSHALER_FIELD_KEY: 'schemaVersion'})
|
38
|
-
|
39
|
-
MEDIA_TYPE: ta.ClassVar[str] = 'application/vnd.oci.image.index.v1+json'
|
40
|
-
media_type: str = dc.field(default=MEDIA_TYPE, metadata={msh.OBJ_MARSHALER_FIELD_KEY: 'mediaType'})
|
41
|
-
|
42
|
-
|
43
|
-
@dc.dataclass(frozen=True)
|
44
|
-
class OciImageManifest:
|
45
|
-
"""https://github.com/opencontainers/image-spec/blob/92353b0bee778725c617e7d57317b568a7796bd0/manifest.md"""
|
46
|
-
|
47
|
-
@dc.dataclass(frozen=True)
|
48
|
-
class Config:
|
49
|
-
digest: str
|
50
|
-
size: int
|
51
|
-
|
52
|
-
#
|
53
|
-
|
54
|
-
MEDIA_TYPE: ta.ClassVar[str] = 'application/vnd.oci.image.config.v1+json'
|
55
|
-
media_type: str = dc.field(default=MEDIA_TYPE, metadata={msh.OBJ_MARSHALER_FIELD_KEY: 'mediaType'})
|
56
|
-
|
57
|
-
config: Config
|
58
|
-
|
59
|
-
@dc.dataclass(frozen=True)
|
60
|
-
class Layer:
|
61
|
-
digest: str
|
62
|
-
size: int
|
63
|
-
|
64
|
-
#
|
65
|
-
|
66
|
-
MEDIA_TYPES: ta.ClassVar[ta.Mapping[str, str]] = {
|
67
|
-
'TAR': 'application/vnd.oci.image.layer.v1.tar',
|
68
|
-
'TAR_GZIP': 'application/vnd.oci.image.layer.v1.tar+gzip',
|
69
|
-
'TAR_ZSTD': 'application/vnd.oci.image.layer.v1.tar+zstd',
|
70
|
-
}
|
71
|
-
media_type: str = dc.field(default=MEDIA_TYPES['TAR'], metadata={msh.OBJ_MARSHALER_FIELD_KEY: 'mediaType'})
|
72
|
-
|
73
|
-
layers: ta.Sequence[Layer]
|
74
|
-
|
75
|
-
#
|
76
|
-
|
77
|
-
SCHEMA_VERSION: ta.ClassVar[int] = 2
|
78
|
-
schema_version: int = dc.field(default=SCHEMA_VERSION, metadata={msh.OBJ_MARSHALER_FIELD_KEY: 'schemaVersion'})
|
79
|
-
|
80
|
-
MEDIA_TYPE: ta.ClassVar[str] = 'application/vnd.oci.image.manifest.v1+json'
|
81
|
-
media_type: str = dc.field(default=MEDIA_TYPE, metadata={msh.OBJ_MARSHALER_FIELD_KEY: 'mediaType'})
|
omlish/sockets/server.py
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
# ruff: noqa: UP006 UP007
|
2
|
-
# @omlish-lite
|
3
|
-
import socket
|
4
|
-
import socketserver
|
5
|
-
import typing as ta
|
6
|
-
|
7
|
-
from ..lite.check import check
|
8
|
-
from .addresses import SocketAddress
|
9
|
-
from .handlers import SocketHandlerFactory
|
10
|
-
|
11
|
-
|
12
|
-
##
|
13
|
-
|
14
|
-
|
15
|
-
class SocketServerBaseRequestHandler_: # noqa
|
16
|
-
request: socket.socket
|
17
|
-
client_address: SocketAddress
|
18
|
-
server: socketserver.TCPServer
|
19
|
-
|
20
|
-
|
21
|
-
class SocketServerStreamRequestHandler_(SocketServerBaseRequestHandler_): # noqa
|
22
|
-
rbufsize: int
|
23
|
-
wbufsize: int
|
24
|
-
|
25
|
-
timeout: ta.Optional[float]
|
26
|
-
|
27
|
-
disable_nagle_algorithm: bool
|
28
|
-
|
29
|
-
connection: socket.socket
|
30
|
-
rfile: ta.BinaryIO
|
31
|
-
wfile: ta.BinaryIO
|
32
|
-
|
33
|
-
|
34
|
-
##
|
35
|
-
|
36
|
-
|
37
|
-
class SocketHandlerSocketServerStreamRequestHandler( # type: ignore[misc]
|
38
|
-
socketserver.StreamRequestHandler,
|
39
|
-
SocketServerStreamRequestHandler_,
|
40
|
-
):
|
41
|
-
socket_handler_factory: ta.Optional[SocketHandlerFactory] = None
|
42
|
-
|
43
|
-
def __init__(
|
44
|
-
self,
|
45
|
-
request: socket.socket,
|
46
|
-
client_address: SocketAddress,
|
47
|
-
server: socketserver.TCPServer,
|
48
|
-
*,
|
49
|
-
socket_handler_factory: ta.Optional[SocketHandlerFactory] = None,
|
50
|
-
) -> None:
|
51
|
-
if socket_handler_factory is not None:
|
52
|
-
self.socket_handler_factory = socket_handler_factory
|
53
|
-
|
54
|
-
super().__init__(
|
55
|
-
request,
|
56
|
-
client_address,
|
57
|
-
server,
|
58
|
-
)
|
59
|
-
|
60
|
-
def handle(self) -> None:
|
61
|
-
target = check.not_none(self.socket_handler_factory)(
|
62
|
-
self.client_address,
|
63
|
-
self.rfile, # type: ignore[arg-type]
|
64
|
-
self.wfile, # type: ignore[arg-type]
|
65
|
-
)
|
66
|
-
target.handle()
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|