omlish 0.0.0.dev220__py3-none-any.whl → 0.0.0.dev222__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.
Potentially problematic release.
This version of omlish might be problematic. Click here for more details.
- omlish/__about__.py +2 -2
- omlish/algorithm/all.py +13 -0
- omlish/algorithm/distribute.py +46 -0
- omlish/algorithm/toposort.py +26 -0
- omlish/algorithm/unify.py +31 -0
- omlish/collections/__init__.py +0 -2
- omlish/collections/utils.py +0 -46
- omlish/graphs/trees.py +2 -1
- omlish/http/coro/server.py +42 -33
- omlish/http/{simple.py → coro/simple.py} +17 -17
- omlish/specs/irc/__init__.py +0 -0
- omlish/specs/irc/format/LICENSE +11 -0
- omlish/specs/irc/format/__init__.py +61 -0
- omlish/specs/irc/format/consts.py +6 -0
- omlish/specs/irc/format/errors.py +30 -0
- omlish/specs/irc/format/message.py +18 -0
- omlish/specs/irc/format/nuh.py +52 -0
- omlish/specs/irc/format/parsing.py +155 -0
- omlish/specs/irc/format/rendering.py +150 -0
- omlish/specs/irc/format/tags.py +99 -0
- omlish/specs/irc/format/utils.py +27 -0
- omlish/specs/irc/numerics/__init__.py +0 -0
- omlish/specs/irc/numerics/formats.py +94 -0
- omlish/specs/irc/numerics/numerics.py +808 -0
- omlish/specs/irc/numerics/types.py +59 -0
- {omlish-0.0.0.dev220.dist-info → omlish-0.0.0.dev222.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev220.dist-info → omlish-0.0.0.dev222.dist-info}/RECORD +32 -15
- omlish/docker/oci/data.py +0 -71
- omlish/docker/oci/media.py +0 -124
- /omlish/{docker/oci → algorithm}/__init__.py +0 -0
- {omlish-0.0.0.dev220.dist-info → omlish-0.0.0.dev222.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev220.dist-info → omlish-0.0.0.dev222.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev220.dist-info → omlish-0.0.0.dev222.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev220.dist-info → omlish-0.0.0.dev222.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import dataclasses as dc
|
|
2
|
+
import typing as ta
|
|
3
|
+
|
|
4
|
+
from .... import collections as col
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
##
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@dc.dataclass(frozen=True)
|
|
11
|
+
class NumericReply:
|
|
12
|
+
name: str
|
|
13
|
+
num: int
|
|
14
|
+
formats: ta.Sequence[str]
|
|
15
|
+
|
|
16
|
+
@classmethod
|
|
17
|
+
def new(
|
|
18
|
+
cls,
|
|
19
|
+
name: str,
|
|
20
|
+
num: int,
|
|
21
|
+
*formats: str,
|
|
22
|
+
) -> 'NumericReply':
|
|
23
|
+
return cls(
|
|
24
|
+
name,
|
|
25
|
+
num,
|
|
26
|
+
formats,
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
##
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class NumericReplies:
|
|
34
|
+
def __init__(self, lst: ta.Iterable[NumericReply]) -> None:
|
|
35
|
+
super().__init__()
|
|
36
|
+
|
|
37
|
+
self._lst = list(lst)
|
|
38
|
+
self._by_name = col.make_map_by(lambda nr: nr.name, self._lst, strict=True)
|
|
39
|
+
self._by_num = col.make_map_by(lambda nr: nr.num, self._lst, strict=True)
|
|
40
|
+
|
|
41
|
+
def __len__(self) -> int:
|
|
42
|
+
return len(self._lst)
|
|
43
|
+
|
|
44
|
+
def __iter__(self) -> ta.Iterator[NumericReply]:
|
|
45
|
+
return iter(self._lst)
|
|
46
|
+
|
|
47
|
+
def __getitem__(self, key: str | int) -> NumericReply:
|
|
48
|
+
if isinstance(key, str):
|
|
49
|
+
return self._by_name[key]
|
|
50
|
+
elif isinstance(key, int):
|
|
51
|
+
return self._by_num[key]
|
|
52
|
+
else:
|
|
53
|
+
raise TypeError(key)
|
|
54
|
+
|
|
55
|
+
def get(self, key: str | int) -> NumericReply | None:
|
|
56
|
+
try:
|
|
57
|
+
return self[key]
|
|
58
|
+
except KeyError:
|
|
59
|
+
return None
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
omlish/.manifests.json,sha256=YGmAnUBszmosQQ_7Hh2wwtDiYdYZ4unNKYzOtALuels,7968
|
|
2
|
-
omlish/__about__.py,sha256=
|
|
2
|
+
omlish/__about__.py,sha256=qi9D_c4g4GLU0jkkVIC7_HYbKv2ZTrFCeMEs9eP0aPU,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
|
|
@@ -13,6 +13,11 @@ omlish/runmodule.py,sha256=PWvuAaJ9wQQn6bx9ftEL3_d04DyotNn8dR_twm2pgw0,700
|
|
|
13
13
|
omlish/shlex.py,sha256=bsW2XUD8GiMTUTDefJejZ5AyqT1pTgWMPD0BMoF02jE,248
|
|
14
14
|
omlish/subprocesses.py,sha256=c7arxsQ7JiaNCmK3GKqwRO6BwrvxeK7eez8A4SrvGBo,10199
|
|
15
15
|
omlish/sync.py,sha256=QJ79kxmIqDP9SeHDoZAf--DpFIhDQe1jACy8H4N0yZI,2928
|
|
16
|
+
omlish/algorithm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
+
omlish/algorithm/all.py,sha256=FudUHwoaRLNNmqYM3jhP2Yd2BpmYhNBRPaVZzARMoSc,194
|
|
18
|
+
omlish/algorithm/distribute.py,sha256=kO60F7HtMF3j-IxuhJdtsfgIR1Vpf1okQfacb4eNukQ,1533
|
|
19
|
+
omlish/algorithm/toposort.py,sha256=cE-zouEVhX05jwGl86JhxB2qgqw5DfQRqpZFR89j7NY,888
|
|
20
|
+
omlish/algorithm/unify.py,sha256=xUvisdtU8L9uMWt--_osYksJjVBlwxLOLvtdDmFGDDo,833
|
|
16
21
|
omlish/antlr/__init__.py,sha256=88bMl_28cfSKslgOkMGYXqALgsHz3KC4LFvAVtzj7k8,89
|
|
17
22
|
omlish/antlr/delimit.py,sha256=3Byvh9_Ip8ftM_SeSEmMbnNo1jrxk-xm8HnHDp_nDaI,3466
|
|
18
23
|
omlish/antlr/dot.py,sha256=W9cgprtAZH6EjUkzWfSbx2XUUYRYLLxFofGWrUp-368,956
|
|
@@ -130,7 +135,7 @@ omlish/codecs/funcs.py,sha256=p4imNt7TobyZVXWC-WhntHVu9KfJrO4QwdtPRh-cVOk,850
|
|
|
130
135
|
omlish/codecs/registry.py,sha256=Ald3fs707cJsUovYjNmxdT2zAQworvDxwMFk7DBT8r0,3995
|
|
131
136
|
omlish/codecs/standard.py,sha256=eiZ4u9ep0XrA4Z_D1zJI0vmWyuN8HLrX4Se_r_Cq_ZM,60
|
|
132
137
|
omlish/codecs/text.py,sha256=JzrdwMpQPo2NBBg3K1EZszzQy5vEWmd82SIerJd4yeQ,5723
|
|
133
|
-
omlish/collections/__init__.py,sha256=
|
|
138
|
+
omlish/collections/__init__.py,sha256=I-HDYNL1EF7vx-M3wMk5cTdX-lA4EnZtBF5wcd7Qbhg,2110
|
|
134
139
|
omlish/collections/abc.py,sha256=sP7BpTVhx6s6C59mTFeosBi4rHOWC6tbFBYbxdZmvh0,2365
|
|
135
140
|
omlish/collections/coerce.py,sha256=g68ROb_-5HgH-vI8612mU2S0FZ8-wp2ZHK5_Zy_kVC0,7037
|
|
136
141
|
omlish/collections/exceptions.py,sha256=shcS-NCnEUudF8qC_SmO2TQyjivKlS4TDjaz_faqQ0c,44
|
|
@@ -146,7 +151,7 @@ omlish/collections/sorted.py,sha256=E5ZOdNn7Jju1EcQ7CX2Ltk9StIXsBOzqvh7EsT3ZA2U,
|
|
|
146
151
|
omlish/collections/treap.py,sha256=A09ZPacGyJlyRB-Wi4TNj3tE0w-RpFNliPgpDaa6Vwg,7719
|
|
147
152
|
omlish/collections/treapmap.py,sha256=TxOM-ZRF5PK2xe5wRIhESNt7DGh9b_MeZfE7HLkCOs4,5804
|
|
148
153
|
omlish/collections/unmodifiable.py,sha256=QmUEi9IBXqiM_KGgH2rqg15VmkHJo1MZ6kwq2twEMho,4750
|
|
149
|
-
omlish/collections/utils.py,sha256=
|
|
154
|
+
omlish/collections/utils.py,sha256=Q0lHhNDokVxdOvApmu1QX5fABYwbn1ATiIwp194Ur_E,2889
|
|
150
155
|
omlish/collections/cache/__init__.py,sha256=D1gO71VcwxFTZP9gAc9isHfg_TEdalwhsJcgGLvS9hg,233
|
|
151
156
|
omlish/collections/cache/descriptor.py,sha256=t-1Gh4DTABDuNmeDJlpoW4LV3gi_uSlBd9ZfBINfYCM,5023
|
|
152
157
|
omlish/collections/cache/impl.py,sha256=ySRU9UJG7jH9VPvuXdwZQ_rSqrleY-1mtie5Ml738wY,14755
|
|
@@ -227,9 +232,6 @@ omlish/docker/hub.py,sha256=7LIuJGdA-N1Y1dmo50ynKM1KUTcnQM_5XbtPbdT_QLU,3940
|
|
|
227
232
|
omlish/docker/manifests.py,sha256=LR4FpOGNUT3bZQ-gTjB6r_-1C3YiG30QvevZjrsVUQM,7068
|
|
228
233
|
omlish/docker/portrelay.py,sha256=QlRoTnQXs5INguR7XOj1xH0gNdL9SUeZm5z45DUctXo,1222
|
|
229
234
|
omlish/docker/timebomb.py,sha256=A_pgIDaXKsQwPiikrCTgIJl91gwYqkPGFY6j-Naq07Q,342
|
|
230
|
-
omlish/docker/oci/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
231
|
-
omlish/docker/oci/data.py,sha256=4KtSxziT70BhF30ozQ1SCfX4y0LT_5x0CuOKC4zrEV4,2616
|
|
232
|
-
omlish/docker/oci/media.py,sha256=fJ8VcU-edDpg-FyJQamw-sUlhTghkC-WQ1TC4MiRpFU,4499
|
|
233
235
|
omlish/formats/__init__.py,sha256=T0AG1gFnqQ5JiHN0UPQjQ-7g5tnxMIG-mgOvMYExYAM,21
|
|
234
236
|
omlish/formats/cbor.py,sha256=o_Hbe4kthO9CeXK-FySrw0dHVlrdyTo2Y8PpGRDfZ3c,514
|
|
235
237
|
omlish/formats/cloudpickle.py,sha256=16si4yUp_pAdDWGECAWf6HLA2PwSANGGgDoMLGZUem8,579
|
|
@@ -288,7 +290,7 @@ omlish/funcs/pipes.py,sha256=E7Sz8Aj8ke_vCs5AMNwg1I36kRdHVGTnzxVQaDyn43U,2490
|
|
|
288
290
|
omlish/graphs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
289
291
|
omlish/graphs/dags.py,sha256=zp55lYgUdRCxmADwiGDHeehMJczZFA_tzdWqy77icOk,3047
|
|
290
292
|
omlish/graphs/domination.py,sha256=oCGoWzWTxLwow0LDyGjjEf2AjFiOiDz4WaBtczwSbsQ,7576
|
|
291
|
-
omlish/graphs/trees.py,sha256=
|
|
293
|
+
omlish/graphs/trees.py,sha256=zvfjDN8R7J6wStNJEUO6OCioGXJrLGhU8KtcqlWVRPI,8191
|
|
292
294
|
omlish/graphs/dot/__init__.py,sha256=Y1MZRQBZkcYyG1Tn7K2FhL8aYbm4v4tk6f5g9AqEkUw,359
|
|
293
295
|
omlish/graphs/dot/items.py,sha256=OWPf0-hjBgS1uyy2QgAEn4IgFHJcEg7sHVWeTx1ghZc,4083
|
|
294
296
|
omlish/graphs/dot/make.py,sha256=RN30gHfJPiXx5Q51kbDdhVJYf59Fr84Lz9J-mXRt9sI,360
|
|
@@ -309,13 +311,13 @@ omlish/http/jwt.py,sha256=6Rigk1WrJ059DY4jDIKnxjnChWb7aFdermj2AI2DSvk,4346
|
|
|
309
311
|
omlish/http/multipart.py,sha256=R9ycpHsXRcmh0uoc43aYb7BdWL-8kSQHe7J-M81aQZM,2240
|
|
310
312
|
omlish/http/parsing.py,sha256=hxfd9nYaAAjYIivkTClFZXMRmiiCnxzeeEIGXw7-gt0,13992
|
|
311
313
|
omlish/http/sessions.py,sha256=TfTJ_j-6c9PelG_RmijEwozfaVm3O7YzgtFvp8VzQqM,4799
|
|
312
|
-
omlish/http/simple.py,sha256=9WtpbQahiZE-UjRP3ZDni8DQTq_HkVSdwpui_y8mf1I,2867
|
|
313
314
|
omlish/http/sse.py,sha256=MDs9RvxQXoQliImcc6qK1ERajEYM7Q1l8xmr-9ceNBc,2315
|
|
314
315
|
omlish/http/versions.py,sha256=wSiOXPiClVjkVgSU_VmxkoD1SUYGaoPbP0U5Aw-Ufg8,409
|
|
315
316
|
omlish/http/wsgi.py,sha256=czZsVUX-l2YTlMrUjKN49wRoP4rVpS0qpeBn4O5BoMY,948
|
|
316
317
|
omlish/http/coro/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
317
318
|
omlish/http/coro/fdio.py,sha256=ajj_lekRockGwQEw8m_mi6RO9-o6hnC9ITiwtZe3y-s,4017
|
|
318
|
-
omlish/http/coro/server.py,sha256=
|
|
319
|
+
omlish/http/coro/server.py,sha256=q5HlGMXNrKBRMoHSNFcqsQL1GEVyjoMC8GgRMbdJ96s,19648
|
|
320
|
+
omlish/http/coro/simple.py,sha256=Y1wJGAfdr0qz3gGpqpdpigbtquFUdksQi2dQGu8K1Z0,2872
|
|
319
321
|
omlish/inject/__init__.py,sha256=n0RC9UDGsBQQ39cST39-XJqJPq2M0tnnh9yJubW9azo,1891
|
|
320
322
|
omlish/inject/binder.py,sha256=DAbc8TZi5w8Mna0TUtq0mT4jeDVA7i7SlBtOFrh2swc,4185
|
|
321
323
|
omlish/inject/bindings.py,sha256=pLXn2U3kvmAS-68IOG-tr77DbiI-wp9hGyy4lhG6_H8,525
|
|
@@ -524,6 +526,21 @@ omlish/sockets/server/handlers.py,sha256=-5lH2Xg7gnZiPB4t2Asa_Vgblj1ZkHzLvyiC_K4
|
|
|
524
526
|
omlish/sockets/server/server.py,sha256=mZmHPkCRPitous56_7FJdAsDLZag2wDqjj-LaYM8_Fg,4943
|
|
525
527
|
omlish/sockets/server/threading.py,sha256=YmW3Ym_p5j_F4SIH9BgRHIObywjq1HS39j9CGWIcMAY,2856
|
|
526
528
|
omlish/specs/__init__.py,sha256=zZwF8yXTEkSstYtORkDhVLK-_hWU8WOJCuBpognb_NY,118
|
|
529
|
+
omlish/specs/irc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
530
|
+
omlish/specs/irc/format/LICENSE,sha256=1CT5_XkDMJ9HDZh0tX4TIsm7LfrSdljRX5EirPBhDYM,778
|
|
531
|
+
omlish/specs/irc/format/__init__.py,sha256=0OFSLrMS5jYFJCqH1LKv0UfTrp5faPQhlhYKBQyCZeA,1701
|
|
532
|
+
omlish/specs/irc/format/consts.py,sha256=iDCsJIyDE5-UnkIQpwCLzdbf3DUFWRmqkuVd0cZtujw,185
|
|
533
|
+
omlish/specs/irc/format/errors.py,sha256=cRP8c--kRts5Uwqn1xl1J97OI74hicG4UbkJs_EOSDg,334
|
|
534
|
+
omlish/specs/irc/format/message.py,sha256=SQP7IpdlxCncALiBD_01TxxOjQsBxbmLE0hxLB2Q0vU,398
|
|
535
|
+
omlish/specs/irc/format/nuh.py,sha256=96KJooCzdlmbliyLpoE8g4ccDSHzR0Fl1apu7gkExEQ,1282
|
|
536
|
+
omlish/specs/irc/format/parsing.py,sha256=OYSk7IbaZPpU5k1mRn-3reROPVehwyRAJs546vnEXI4,4053
|
|
537
|
+
omlish/specs/irc/format/rendering.py,sha256=PDhl5dIU9xffmIO3vHWTPh17Cb-E34vIkFLs-Ow3tmY,4909
|
|
538
|
+
omlish/specs/irc/format/tags.py,sha256=_HnzjPCGhLses_P3Os5ReuVdRacmanTb8kEeCxsfqWE,2779
|
|
539
|
+
omlish/specs/irc/format/utils.py,sha256=8VZavx37IospJvhwjnP39sYSiBwzcxNyCJ_doxrtM-Y,687
|
|
540
|
+
omlish/specs/irc/numerics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
541
|
+
omlish/specs/irc/numerics/formats.py,sha256=n--9bxFkY3p8G1K3aJJXj7FEK_tmGouBrB8Gu1WrEd0,2252
|
|
542
|
+
omlish/specs/irc/numerics/numerics.py,sha256=re5eKU4xoTJgFrNr3VPHS-WvaexAHJLoxvWnnMty_O0,16677
|
|
543
|
+
omlish/specs/irc/numerics/types.py,sha256=qbNDLxtz827JnIMh79-SGK1RdbEy44vZl6uQMIYGXyg,1287
|
|
527
544
|
omlish/specs/jmespath/LICENSE,sha256=IH-ZZlZkS8XMkf_ubNVD1aYHQ2l_wd0tmHtXrCcYpRU,1113
|
|
528
545
|
omlish/specs/jmespath/__init__.py,sha256=9tsrquw1kXe1KAhTP3WeL0GlGBiTguQVxsC-lUYTWP4,2087
|
|
529
546
|
omlish/specs/jmespath/__main__.py,sha256=wIXm6bs08etNG_GZlN2rBkADPb0rKfL2HSkm8spnpxw,200
|
|
@@ -643,9 +660,9 @@ omlish/text/indent.py,sha256=YjtJEBYWuk8--b9JU_T6q4yxV85_TR7VEVr5ViRCFwk,1336
|
|
|
643
660
|
omlish/text/minja.py,sha256=jZC-fp3Xuhx48ppqsf2Sf1pHbC0t8XBB7UpUUoOk2Qw,5751
|
|
644
661
|
omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
|
|
645
662
|
omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
|
|
646
|
-
omlish-0.0.0.
|
|
647
|
-
omlish-0.0.0.
|
|
648
|
-
omlish-0.0.0.
|
|
649
|
-
omlish-0.0.0.
|
|
650
|
-
omlish-0.0.0.
|
|
651
|
-
omlish-0.0.0.
|
|
663
|
+
omlish-0.0.0.dev222.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
|
664
|
+
omlish-0.0.0.dev222.dist-info/METADATA,sha256=ij9bc4yyi5znMyYrn-XGpDpGokENDlDacgDAjOeyUFI,4176
|
|
665
|
+
omlish-0.0.0.dev222.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
666
|
+
omlish-0.0.0.dev222.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
|
667
|
+
omlish-0.0.0.dev222.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
|
668
|
+
omlish-0.0.0.dev222.dist-info/RECORD,,
|
omlish/docker/oci/data.py
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# ruff: noqa: UP006 UP007
|
|
2
|
-
# @omlish-lite
|
|
3
|
-
import abc
|
|
4
|
-
import dataclasses as dc
|
|
5
|
-
import typing as ta
|
|
6
|
-
|
|
7
|
-
from ...lite.marshal import OBJ_MARSHALER_FIELD_KEY
|
|
8
|
-
from ...lite.marshal import OBJ_MARSHALER_OMIT_IF_NONE
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
##
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@dc.dataclass(frozen=True)
|
|
15
|
-
class OciDataclass(abc.ABC): # noqa
|
|
16
|
-
pass
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
##
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
@dc.dataclass(frozen=True)
|
|
23
|
-
class OciImageConfig(OciDataclass):
|
|
24
|
-
"""https://github.com/opencontainers/image-spec/blob/92353b0bee778725c617e7d57317b568a7796bd0/config.md"""
|
|
25
|
-
|
|
26
|
-
architecture: str
|
|
27
|
-
os: str
|
|
28
|
-
|
|
29
|
-
@dc.dataclass(frozen=True)
|
|
30
|
-
class RootFs:
|
|
31
|
-
type: str
|
|
32
|
-
diff_ids: ta.Sequence[str]
|
|
33
|
-
|
|
34
|
-
rootfs: RootFs
|
|
35
|
-
|
|
36
|
-
#
|
|
37
|
-
|
|
38
|
-
created: ta.Optional[str] = dc.field(default=None, metadata={OBJ_MARSHALER_OMIT_IF_NONE: True})
|
|
39
|
-
author: ta.Optional[str] = dc.field(default=None, metadata={OBJ_MARSHALER_OMIT_IF_NONE: True})
|
|
40
|
-
os_version: ta.Optional[str] = dc.field(default=None, metadata={OBJ_MARSHALER_FIELD_KEY: 'os.version', OBJ_MARSHALER_OMIT_IF_NONE: True}) # noqa
|
|
41
|
-
os_features: ta.Optional[ta.Sequence[str]] = dc.field(default=None, metadata={OBJ_MARSHALER_FIELD_KEY: 'os.features', OBJ_MARSHALER_OMIT_IF_NONE: True}) # noqa
|
|
42
|
-
variant: ta.Optional[str] = dc.field(default=None, metadata={OBJ_MARSHALER_OMIT_IF_NONE: True})
|
|
43
|
-
|
|
44
|
-
"""
|
|
45
|
-
config object, OPTIONAL
|
|
46
|
-
User string, OPTIONAL
|
|
47
|
-
ExposedPorts object, OPTIONAL
|
|
48
|
-
Env array of strings, OPTIONAL
|
|
49
|
-
Entrypoint array of strings, OPTIONAL
|
|
50
|
-
Cmd array of strings, OPTIONAL
|
|
51
|
-
Volumes object, OPTIONAL
|
|
52
|
-
WorkingDir string, OPTIONAL
|
|
53
|
-
Labels object, OPTIONAL
|
|
54
|
-
StopSignal string, OPTIONAL
|
|
55
|
-
ArgsEscaped boolean, OPTIONAL
|
|
56
|
-
Memory integer, OPTIONAL
|
|
57
|
-
MemorySwap integer, OPTIONAL
|
|
58
|
-
CpuShares integer, OPTIONAL
|
|
59
|
-
Healthcheck object, OPTIONAL
|
|
60
|
-
"""
|
|
61
|
-
config: ta.Optional[ta.Mapping[str, ta.Any]] = dc.field(default=None, metadata={OBJ_MARSHALER_OMIT_IF_NONE: True})
|
|
62
|
-
|
|
63
|
-
@dc.dataclass(frozen=True)
|
|
64
|
-
class History:
|
|
65
|
-
created: ta.Optional[str] = dc.field(default=None, metadata={OBJ_MARSHALER_OMIT_IF_NONE: True})
|
|
66
|
-
author: ta.Optional[str] = dc.field(default=None, metadata={OBJ_MARSHALER_OMIT_IF_NONE: True})
|
|
67
|
-
created_by: ta.Optional[str] = dc.field(default=None, metadata={OBJ_MARSHALER_OMIT_IF_NONE: True})
|
|
68
|
-
comment: ta.Optional[str] = dc.field(default=None, metadata={OBJ_MARSHALER_OMIT_IF_NONE: True})
|
|
69
|
-
empty_layer: ta.Optional[bool] = dc.field(default=None, metadata={OBJ_MARSHALER_OMIT_IF_NONE: True})
|
|
70
|
-
|
|
71
|
-
history: ta.Optional[ta.Sequence[History]] = dc.field(default=None, metadata={OBJ_MARSHALER_OMIT_IF_NONE: True})
|
omlish/docker/oci/media.py
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
# ruff: noqa: UP006 UP007
|
|
2
|
-
# @omlish-lite
|
|
3
|
-
import abc
|
|
4
|
-
import dataclasses as dc
|
|
5
|
-
import typing as ta
|
|
6
|
-
|
|
7
|
-
from ...lite.check import check
|
|
8
|
-
from ...lite.marshal import OBJ_MARSHALER_FIELD_KEY
|
|
9
|
-
from ...lite.marshal import OBJ_MARSHALER_OMIT_IF_NONE
|
|
10
|
-
from ...lite.marshal import unmarshal_obj
|
|
11
|
-
from .data import OciDataclass
|
|
12
|
-
from .data import OciImageConfig
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
##
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
@dc.dataclass(frozen=True)
|
|
19
|
-
class OciMediaDataclass(OciDataclass, abc.ABC): # noqa
|
|
20
|
-
SCHEMA_VERSION: ta.ClassVar[int]
|
|
21
|
-
MEDIA_TYPE: ta.ClassVar[str]
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
_REGISTERED_OCI_MEDIA_DATACLASSES: ta.Dict[str, ta.Type[OciMediaDataclass]] = {}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def _register_oci_media_dataclass(cls):
|
|
28
|
-
check.issubclass(cls, OciMediaDataclass)
|
|
29
|
-
check.arg(dc.is_dataclass(cls))
|
|
30
|
-
mt = check.non_empty_str(cls.__dict__['MEDIA_TYPE'])
|
|
31
|
-
check.not_in(mt, _REGISTERED_OCI_MEDIA_DATACLASSES)
|
|
32
|
-
_REGISTERED_OCI_MEDIA_DATACLASSES[mt] = cls
|
|
33
|
-
return cls
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def get_registered_oci_media_dataclass(media_type: str) -> ta.Optional[ta.Type[OciMediaDataclass]]:
|
|
37
|
-
return _REGISTERED_OCI_MEDIA_DATACLASSES.get(media_type)
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
def unmarshal_oci_media_dataclass(
|
|
41
|
-
dct: ta.Mapping[str, ta.Any],
|
|
42
|
-
*,
|
|
43
|
-
media_type: ta.Optional[str] = None,
|
|
44
|
-
) -> ta.Any:
|
|
45
|
-
if media_type is None:
|
|
46
|
-
media_type = check.non_empty_str(dct['mediaType'])
|
|
47
|
-
cls = _REGISTERED_OCI_MEDIA_DATACLASSES[media_type]
|
|
48
|
-
return unmarshal_obj(dct, cls)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
#
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
@dc.dataclass(frozen=True)
|
|
55
|
-
class OciMediaDescriptor(OciDataclass):
|
|
56
|
-
"""https://github.com/opencontainers/image-spec/blob/92353b0bee778725c617e7d57317b568a7796bd0/descriptor.md#properties""" # noqa
|
|
57
|
-
|
|
58
|
-
media_type: str = dc.field(metadata={OBJ_MARSHALER_FIELD_KEY: 'mediaType'})
|
|
59
|
-
digest: str
|
|
60
|
-
size: int
|
|
61
|
-
|
|
62
|
-
#
|
|
63
|
-
|
|
64
|
-
urls: ta.Optional[ta.Sequence[str]] = dc.field(default=None, metadata={OBJ_MARSHALER_OMIT_IF_NONE: True})
|
|
65
|
-
annotations: ta.Optional[ta.Mapping[str, str]] = dc.field(default=None, metadata={OBJ_MARSHALER_OMIT_IF_NONE: True}) # noqa
|
|
66
|
-
data: ta.Optional[str] = dc.field(default=None, metadata={OBJ_MARSHALER_OMIT_IF_NONE: True})
|
|
67
|
-
artifact_type: ta.Optional[str] = dc.field(default=None, metadata={OBJ_MARSHALER_FIELD_KEY: 'artifactType', OBJ_MARSHALER_OMIT_IF_NONE: True}) # noqa
|
|
68
|
-
|
|
69
|
-
#
|
|
70
|
-
|
|
71
|
-
platform: ta.Optional[ta.Mapping[str, ta.Any]] = dc.field(default=None, metadata={OBJ_MARSHALER_OMIT_IF_NONE: True}) # noqa
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
@_register_oci_media_dataclass
|
|
75
|
-
@dc.dataclass(frozen=True)
|
|
76
|
-
class OciMediaImageIndex(OciMediaDataclass):
|
|
77
|
-
"""https://github.com/opencontainers/image-spec/blob/92353b0bee778725c617e7d57317b568a7796bd0/image-index.md"""
|
|
78
|
-
|
|
79
|
-
manifests: ta.Sequence[OciMediaDescriptor] # -> OciMediaImageIndex | OciMediaImageManifest
|
|
80
|
-
|
|
81
|
-
#
|
|
82
|
-
|
|
83
|
-
annotations: ta.Optional[ta.Mapping[str, str]] = dc.field(default=None, metadata={OBJ_MARSHALER_OMIT_IF_NONE: True}) # noqa
|
|
84
|
-
|
|
85
|
-
#
|
|
86
|
-
|
|
87
|
-
SCHEMA_VERSION: ta.ClassVar[int] = 2
|
|
88
|
-
schema_version: int = dc.field(default=SCHEMA_VERSION, metadata={OBJ_MARSHALER_FIELD_KEY: 'schemaVersion'})
|
|
89
|
-
|
|
90
|
-
MEDIA_TYPE: ta.ClassVar[str] = 'application/vnd.oci.image.index.v1+json'
|
|
91
|
-
media_type: str = dc.field(default=MEDIA_TYPE, metadata={OBJ_MARSHALER_FIELD_KEY: 'mediaType'})
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
@_register_oci_media_dataclass
|
|
95
|
-
@dc.dataclass(frozen=True)
|
|
96
|
-
class OciMediaImageManifest(OciMediaDataclass):
|
|
97
|
-
"""https://github.com/opencontainers/image-spec/blob/92353b0bee778725c617e7d57317b568a7796bd0/manifest.md"""
|
|
98
|
-
|
|
99
|
-
config: OciMediaDescriptor # -> OciMediaImageConfig
|
|
100
|
-
|
|
101
|
-
# MEDIA_TYPES: ta.ClassVar[ta.Mapping[str, str]] = {
|
|
102
|
-
# 'TAR': 'application/vnd.oci.image.layer.v1.tar',
|
|
103
|
-
# 'TAR_GZIP': 'application/vnd.oci.image.layer.v1.tar+gzip',
|
|
104
|
-
# 'TAR_ZSTD': 'application/vnd.oci.image.layer.v1.tar+zstd',
|
|
105
|
-
# }
|
|
106
|
-
layers: ta.Sequence[OciMediaDescriptor]
|
|
107
|
-
|
|
108
|
-
#
|
|
109
|
-
|
|
110
|
-
SCHEMA_VERSION: ta.ClassVar[int] = 2
|
|
111
|
-
schema_version: int = dc.field(default=SCHEMA_VERSION, metadata={OBJ_MARSHALER_FIELD_KEY: 'schemaVersion'})
|
|
112
|
-
|
|
113
|
-
MEDIA_TYPE: ta.ClassVar[str] = 'application/vnd.oci.image.manifest.v1+json'
|
|
114
|
-
media_type: str = dc.field(default=MEDIA_TYPE, metadata={OBJ_MARSHALER_FIELD_KEY: 'mediaType'})
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
@_register_oci_media_dataclass
|
|
118
|
-
@dc.dataclass(frozen=True)
|
|
119
|
-
class OciMediaImageConfig(OciImageConfig, OciMediaDataclass):
|
|
120
|
-
SCHEMA_VERSION: ta.ClassVar[int] = 2
|
|
121
|
-
schema_version: int = dc.field(default=SCHEMA_VERSION, metadata={OBJ_MARSHALER_FIELD_KEY: 'schemaVersion'})
|
|
122
|
-
|
|
123
|
-
MEDIA_TYPE: ta.ClassVar[str] = 'application/vnd.oci.image.config.v1+json'
|
|
124
|
-
media_type: str = dc.field(default=MEDIA_TYPE, metadata={OBJ_MARSHALER_FIELD_KEY: 'mediaType'})
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|