omlish 0.0.0.dev405__py3-none-any.whl → 0.0.0.dev406__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/.manifests.json +78 -78
- omlish/__about__.py +2 -2
- omlish/bootstrap/__main__.py +3 -3
- omlish/codecs/base.py +4 -4
- omlish/diag/procfs.py +3 -3
- omlish/formats/codecs.py +4 -4
- omlish/io/compress/codecs.py +4 -4
- omlish/manifests/base.py +4 -4
- omlish/manifests/loading.py +111 -51
- omlish/manifests/static.py +2 -2
- omlish/manifests/types.py +2 -2
- omlish/os/pidfiles/__main__.py +3 -3
- omlish/secrets/pwgen.py +3 -3
- omlish/specs/jmespath/__main__.py +3 -3
- {omlish-0.0.0.dev405.dist-info → omlish-0.0.0.dev406.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev405.dist-info → omlish-0.0.0.dev406.dist-info}/RECORD +20 -20
- {omlish-0.0.0.dev405.dist-info → omlish-0.0.0.dev406.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev405.dist-info → omlish-0.0.0.dev406.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev405.dist-info → omlish-0.0.0.dev406.dist-info}/licenses/LICENSE +0 -0
- {omlish-0.0.0.dev405.dist-info → omlish-0.0.0.dev406.dist-info}/top_level.txt +0 -0
omlish/.manifests.json
CHANGED
@@ -5,9 +5,9 @@
|
|
5
5
|
"file": "omlish/bootstrap/__main__.py",
|
6
6
|
"line": 1,
|
7
7
|
"value": {
|
8
|
-
"
|
9
|
-
"
|
10
|
-
"
|
8
|
+
"!omdev.cli.types.CliModule": {
|
9
|
+
"name": "bootstrap",
|
10
|
+
"module": "omlish.bootstrap.__main__"
|
11
11
|
}
|
12
12
|
}
|
13
13
|
},
|
@@ -17,9 +17,9 @@
|
|
17
17
|
"file": "omlish/diag/procfs.py",
|
18
18
|
"line": 361,
|
19
19
|
"value": {
|
20
|
-
"
|
21
|
-
"
|
22
|
-
"
|
20
|
+
"!omdev.cli.types.CliModule": {
|
21
|
+
"name": "procfs",
|
22
|
+
"module": "omlish.diag.procfs"
|
23
23
|
}
|
24
24
|
}
|
25
25
|
},
|
@@ -29,9 +29,9 @@
|
|
29
29
|
"file": "omlish/formats/cbor.py",
|
30
30
|
"line": 30,
|
31
31
|
"value": {
|
32
|
-
"
|
33
|
-
"
|
34
|
-
"
|
32
|
+
"!.codecs.base.LazyLoadedCodec": {
|
33
|
+
"module": "omlish.formats.cbor",
|
34
|
+
"attr": "CBOR_CODEC",
|
35
35
|
"name": "cbor",
|
36
36
|
"aliases": null
|
37
37
|
}
|
@@ -43,9 +43,9 @@
|
|
43
43
|
"file": "omlish/formats/cloudpickle.py",
|
44
44
|
"line": 30,
|
45
45
|
"value": {
|
46
|
-
"
|
47
|
-
"
|
48
|
-
"
|
46
|
+
"!.codecs.base.LazyLoadedCodec": {
|
47
|
+
"module": "omlish.formats.cloudpickle",
|
48
|
+
"attr": "CLOUDPICKLE_CODEC",
|
49
49
|
"name": "cloudpickle",
|
50
50
|
"aliases": null
|
51
51
|
}
|
@@ -57,9 +57,9 @@
|
|
57
57
|
"file": "omlish/formats/edn/codec.py",
|
58
58
|
"line": 25,
|
59
59
|
"value": {
|
60
|
-
"
|
61
|
-
"
|
62
|
-
"
|
60
|
+
"!.codecs.base.LazyLoadedCodec": {
|
61
|
+
"module": "omlish.formats.edn.codec",
|
62
|
+
"attr": "EDN_CODEC",
|
63
63
|
"name": "edn",
|
64
64
|
"aliases": null
|
65
65
|
}
|
@@ -71,9 +71,9 @@
|
|
71
71
|
"file": "omlish/formats/ini/codec.py",
|
72
72
|
"line": 25,
|
73
73
|
"value": {
|
74
|
-
"
|
75
|
-
"
|
76
|
-
"
|
74
|
+
"!.codecs.base.LazyLoadedCodec": {
|
75
|
+
"module": "omlish.formats.ini.codec",
|
76
|
+
"attr": "INI_CODEC",
|
77
77
|
"name": "ini",
|
78
78
|
"aliases": null
|
79
79
|
}
|
@@ -85,9 +85,9 @@
|
|
85
85
|
"file": "omlish/formats/json/codecs.py",
|
86
86
|
"line": 14,
|
87
87
|
"value": {
|
88
|
-
"
|
89
|
-
"
|
90
|
-
"
|
88
|
+
"!.codecs.base.LazyLoadedCodec": {
|
89
|
+
"module": "omlish.formats.json.codecs",
|
90
|
+
"attr": "JSON_CODEC",
|
91
91
|
"name": "json",
|
92
92
|
"aliases": null
|
93
93
|
}
|
@@ -99,9 +99,9 @@
|
|
99
99
|
"file": "omlish/formats/json/codecs.py",
|
100
100
|
"line": 21,
|
101
101
|
"value": {
|
102
|
-
"
|
103
|
-
"
|
104
|
-
"
|
102
|
+
"!.codecs.base.LazyLoadedCodec": {
|
103
|
+
"module": "omlish.formats.json.codecs",
|
104
|
+
"attr": "JSON_COMPACT_CODEC",
|
105
105
|
"name": "json-compact",
|
106
106
|
"aliases": null
|
107
107
|
}
|
@@ -113,9 +113,9 @@
|
|
113
113
|
"file": "omlish/formats/json/codecs.py",
|
114
114
|
"line": 28,
|
115
115
|
"value": {
|
116
|
-
"
|
117
|
-
"
|
118
|
-
"
|
116
|
+
"!.codecs.base.LazyLoadedCodec": {
|
117
|
+
"module": "omlish.formats.json.codecs",
|
118
|
+
"attr": "JSON_PRETTY_CODEC",
|
119
119
|
"name": "json-pretty",
|
120
120
|
"aliases": null
|
121
121
|
}
|
@@ -127,9 +127,9 @@
|
|
127
127
|
"file": "omlish/formats/json5/codec.py",
|
128
128
|
"line": 73,
|
129
129
|
"value": {
|
130
|
-
"
|
131
|
-
"
|
132
|
-
"
|
130
|
+
"!.codecs.base.LazyLoadedCodec": {
|
131
|
+
"module": "omlish.formats.json5.codec",
|
132
|
+
"attr": "JSON5_CODEC",
|
133
133
|
"name": "json5",
|
134
134
|
"aliases": null
|
135
135
|
}
|
@@ -141,9 +141,9 @@
|
|
141
141
|
"file": "omlish/formats/pickle.py",
|
142
142
|
"line": 30,
|
143
143
|
"value": {
|
144
|
-
"
|
145
|
-
"
|
146
|
-
"
|
144
|
+
"!.codecs.base.LazyLoadedCodec": {
|
145
|
+
"module": "omlish.formats.pickle",
|
146
|
+
"attr": "PICKLE_CODEC",
|
147
147
|
"name": "pickle",
|
148
148
|
"aliases": null
|
149
149
|
}
|
@@ -155,9 +155,9 @@
|
|
155
155
|
"file": "omlish/formats/repr.py",
|
156
156
|
"line": 24,
|
157
157
|
"value": {
|
158
|
-
"
|
159
|
-
"
|
160
|
-
"
|
158
|
+
"!.codecs.base.LazyLoadedCodec": {
|
159
|
+
"module": "omlish.formats.repr",
|
160
|
+
"attr": "REPR_CODEC",
|
161
161
|
"name": "repr",
|
162
162
|
"aliases": null
|
163
163
|
}
|
@@ -169,9 +169,9 @@
|
|
169
169
|
"file": "omlish/formats/toml/codec.py",
|
170
170
|
"line": 16,
|
171
171
|
"value": {
|
172
|
-
"
|
173
|
-
"
|
174
|
-
"
|
172
|
+
"!.codecs.base.LazyLoadedCodec": {
|
173
|
+
"module": "omlish.formats.toml.codec",
|
174
|
+
"attr": "TOML_CODEC",
|
175
175
|
"name": "toml",
|
176
176
|
"aliases": null
|
177
177
|
}
|
@@ -183,9 +183,9 @@
|
|
183
183
|
"file": "omlish/formats/yaml.py",
|
184
184
|
"line": 255,
|
185
185
|
"value": {
|
186
|
-
"
|
187
|
-
"
|
188
|
-
"
|
186
|
+
"!.codecs.base.LazyLoadedCodec": {
|
187
|
+
"module": "omlish.formats.yaml",
|
188
|
+
"attr": "YAML_CODEC",
|
189
189
|
"name": "yaml",
|
190
190
|
"aliases": [
|
191
191
|
"yml"
|
@@ -199,9 +199,9 @@
|
|
199
199
|
"file": "omlish/formats/yaml.py",
|
200
200
|
"line": 262,
|
201
201
|
"value": {
|
202
|
-
"
|
203
|
-
"
|
204
|
-
"
|
202
|
+
"!.codecs.base.LazyLoadedCodec": {
|
203
|
+
"module": "omlish.formats.yaml",
|
204
|
+
"attr": "YAML_UNSAFE_CODEC",
|
205
205
|
"name": "yaml-unsafe",
|
206
206
|
"aliases": null
|
207
207
|
}
|
@@ -213,9 +213,9 @@
|
|
213
213
|
"file": "omlish/io/compress/brotli.py",
|
214
214
|
"line": 46,
|
215
215
|
"value": {
|
216
|
-
"
|
217
|
-
"
|
218
|
-
"
|
216
|
+
"!.codecs.base.LazyLoadedCodec": {
|
217
|
+
"module": "omlish.io.compress.brotli",
|
218
|
+
"attr": "BROTLI_CODEC",
|
219
219
|
"name": "brotli",
|
220
220
|
"aliases": null
|
221
221
|
}
|
@@ -227,9 +227,9 @@
|
|
227
227
|
"file": "omlish/io/compress/bz2.py",
|
228
228
|
"line": 60,
|
229
229
|
"value": {
|
230
|
-
"
|
231
|
-
"
|
232
|
-
"
|
230
|
+
"!.codecs.base.LazyLoadedCodec": {
|
231
|
+
"module": "omlish.io.compress.bz2",
|
232
|
+
"attr": "BZ2_CODEC",
|
233
233
|
"name": "bz2",
|
234
234
|
"aliases": null
|
235
235
|
}
|
@@ -241,9 +241,9 @@
|
|
241
241
|
"file": "omlish/io/compress/gzip.py",
|
242
242
|
"line": 349,
|
243
243
|
"value": {
|
244
|
-
"
|
245
|
-
"
|
246
|
-
"
|
244
|
+
"!.codecs.base.LazyLoadedCodec": {
|
245
|
+
"module": "omlish.io.compress.gzip",
|
246
|
+
"attr": "GZIP_CODEC",
|
247
247
|
"name": "gzip",
|
248
248
|
"aliases": [
|
249
249
|
"gz"
|
@@ -257,9 +257,9 @@
|
|
257
257
|
"file": "omlish/io/compress/lz4.py",
|
258
258
|
"line": 90,
|
259
259
|
"value": {
|
260
|
-
"
|
261
|
-
"
|
262
|
-
"
|
260
|
+
"!.codecs.base.LazyLoadedCodec": {
|
261
|
+
"module": "omlish.io.compress.lz4",
|
262
|
+
"attr": "LZ4_CODEC",
|
263
263
|
"name": "lz4",
|
264
264
|
"aliases": null
|
265
265
|
}
|
@@ -271,9 +271,9 @@
|
|
271
271
|
"file": "omlish/io/compress/lzma.py",
|
272
272
|
"line": 80,
|
273
273
|
"value": {
|
274
|
-
"
|
275
|
-
"
|
276
|
-
"
|
274
|
+
"!.codecs.base.LazyLoadedCodec": {
|
275
|
+
"module": "omlish.io.compress.lzma",
|
276
|
+
"attr": "LZMA_CODEC",
|
277
277
|
"name": "lzma",
|
278
278
|
"aliases": null
|
279
279
|
}
|
@@ -285,9 +285,9 @@
|
|
285
285
|
"file": "omlish/io/compress/snappy.py",
|
286
286
|
"line": 33,
|
287
287
|
"value": {
|
288
|
-
"
|
289
|
-
"
|
290
|
-
"
|
288
|
+
"!.codecs.base.LazyLoadedCodec": {
|
289
|
+
"module": "omlish.io.compress.snappy",
|
290
|
+
"attr": "SNAPPY_CODEC",
|
291
291
|
"name": "snappy",
|
292
292
|
"aliases": null
|
293
293
|
}
|
@@ -299,9 +299,9 @@
|
|
299
299
|
"file": "omlish/io/compress/zlib.py",
|
300
300
|
"line": 73,
|
301
301
|
"value": {
|
302
|
-
"
|
303
|
-
"
|
304
|
-
"
|
302
|
+
"!.codecs.base.LazyLoadedCodec": {
|
303
|
+
"module": "omlish.io.compress.zlib",
|
304
|
+
"attr": "ZLIB_CODEC",
|
305
305
|
"name": "zlib",
|
306
306
|
"aliases": null
|
307
307
|
}
|
@@ -313,9 +313,9 @@
|
|
313
313
|
"file": "omlish/io/compress/zstd.py",
|
314
314
|
"line": 51,
|
315
315
|
"value": {
|
316
|
-
"
|
317
|
-
"
|
318
|
-
"
|
316
|
+
"!.codecs.base.LazyLoadedCodec": {
|
317
|
+
"module": "omlish.io.compress.zstd",
|
318
|
+
"attr": "ZSTD_CODEC",
|
319
319
|
"name": "zstd",
|
320
320
|
"aliases": null
|
321
321
|
}
|
@@ -327,9 +327,9 @@
|
|
327
327
|
"file": "omlish/os/pidfiles/__main__.py",
|
328
328
|
"line": 1,
|
329
329
|
"value": {
|
330
|
-
"
|
331
|
-
"
|
332
|
-
"
|
330
|
+
"!omdev.cli.types.CliModule": {
|
331
|
+
"name": "pidfiles",
|
332
|
+
"module": "omlish.os.pidfiles.__main__"
|
333
333
|
}
|
334
334
|
}
|
335
335
|
},
|
@@ -339,9 +339,9 @@
|
|
339
339
|
"file": "omlish/secrets/pwgen.py",
|
340
340
|
"line": 78,
|
341
341
|
"value": {
|
342
|
-
"
|
343
|
-
"
|
344
|
-
"
|
342
|
+
"!omdev.cli.types.CliModule": {
|
343
|
+
"name": "pwgen",
|
344
|
+
"module": "omlish.secrets.pwgen"
|
345
345
|
}
|
346
346
|
}
|
347
347
|
},
|
@@ -351,12 +351,12 @@
|
|
351
351
|
"file": "omlish/specs/jmespath/__main__.py",
|
352
352
|
"line": 1,
|
353
353
|
"value": {
|
354
|
-
"
|
355
|
-
"
|
354
|
+
"!omdev.cli.types.CliModule": {
|
355
|
+
"name": [
|
356
356
|
"jmespath",
|
357
357
|
"jp"
|
358
358
|
],
|
359
|
-
"
|
359
|
+
"module": "omlish.specs.jmespath.__main__"
|
360
360
|
}
|
361
361
|
}
|
362
362
|
}
|
omlish/__about__.py
CHANGED
omlish/bootstrap/__main__.py
CHANGED
omlish/codecs/base.py
CHANGED
@@ -95,13 +95,13 @@ class LazyLoadedCodec(ModAttrManifest):
|
|
95
95
|
@classmethod
|
96
96
|
def new(
|
97
97
|
cls,
|
98
|
-
|
99
|
-
|
98
|
+
module: str,
|
99
|
+
attr: str,
|
100
100
|
codec: Codec,
|
101
101
|
) -> 'LazyLoadedCodec':
|
102
102
|
return cls(
|
103
|
-
|
104
|
-
|
103
|
+
module=module,
|
104
|
+
attr=attr,
|
105
105
|
name=codec.name,
|
106
106
|
aliases=codec.aliases,
|
107
107
|
)
|
omlish/diag/procfs.py
CHANGED
@@ -359,9 +359,9 @@ def _main() -> None:
|
|
359
359
|
|
360
360
|
|
361
361
|
# @omlish-manifest
|
362
|
-
_CLI_MODULE = {'
|
363
|
-
'
|
364
|
-
'
|
362
|
+
_CLI_MODULE = {'!omdev.cli.types.CliModule': {
|
363
|
+
'name': 'procfs',
|
364
|
+
'module': __name__,
|
365
365
|
}}
|
366
366
|
|
367
367
|
|
omlish/formats/codecs.py
CHANGED
@@ -85,12 +85,12 @@ def make_str_object_codec(
|
|
85
85
|
|
86
86
|
|
87
87
|
def make_object_lazy_loaded_codec(
|
88
|
-
|
89
|
-
|
88
|
+
module: str,
|
89
|
+
attr: str,
|
90
90
|
codec: ObjectCodec,
|
91
91
|
) -> codecs.LazyLoadedCodec:
|
92
92
|
return codecs.LazyLoadedCodec.new(
|
93
|
-
|
94
|
-
|
93
|
+
module,
|
94
|
+
attr,
|
95
95
|
codec,
|
96
96
|
)
|
omlish/io/compress/codecs.py
CHANGED
@@ -67,12 +67,12 @@ def make_compression_codec(
|
|
67
67
|
|
68
68
|
|
69
69
|
def make_compression_lazy_loaded_codec(
|
70
|
-
|
71
|
-
|
70
|
+
module: str,
|
71
|
+
attr: str,
|
72
72
|
codec: CompressionCodec,
|
73
73
|
) -> codecs.LazyLoadedCodec:
|
74
74
|
return codecs.LazyLoadedCodec.new(
|
75
|
-
|
76
|
-
|
75
|
+
module,
|
76
|
+
attr,
|
77
77
|
codec,
|
78
78
|
)
|
omlish/manifests/base.py
CHANGED
@@ -12,14 +12,14 @@ NameAliasesManifestT = ta.TypeVar('NameAliasesManifestT', bound='NameAliasesMani
|
|
12
12
|
|
13
13
|
@dc.dataclass(frozen=True)
|
14
14
|
class ModAttrManifest:
|
15
|
-
|
16
|
-
|
15
|
+
module: str
|
16
|
+
attr: str
|
17
17
|
|
18
18
|
def load(self) -> ta.Any:
|
19
19
|
import importlib # noqa
|
20
20
|
|
21
|
-
mod = importlib.import_module(self.
|
22
|
-
return getattr(mod, self.
|
21
|
+
mod = importlib.import_module(self.module)
|
22
|
+
return getattr(mod, self.attr)
|
23
23
|
|
24
24
|
|
25
25
|
##
|
omlish/manifests/loading.py
CHANGED
@@ -31,35 +31,42 @@ class ManifestLoader:
|
|
31
31
|
def __init__(
|
32
32
|
self,
|
33
33
|
package: 'ManifestLoader.LoadedPackage',
|
34
|
-
|
34
|
+
resolved: 'ManifestLoader._ResolvedManifest',
|
35
35
|
) -> None:
|
36
36
|
super().__init__()
|
37
37
|
|
38
38
|
self._package = package
|
39
|
-
self.
|
40
|
-
|
41
|
-
[(cls_key, value_dct)] = self._manifest.value.items() # noqa
|
42
|
-
self._cls_key = cls_key
|
39
|
+
self._resolved = resolved
|
43
40
|
|
44
41
|
def __repr__(self) -> str:
|
45
|
-
return
|
42
|
+
return (
|
43
|
+
f'{self.__class__.__name__}@{id(self):x}('
|
44
|
+
f'package={self._package.name!r}, '
|
45
|
+
f'module={self._resolved.module!r}, '
|
46
|
+
f'class_key={self._resolved.class_key!r}'
|
47
|
+
f')'
|
48
|
+
)
|
46
49
|
|
47
50
|
@property
|
48
51
|
def package(self) -> 'ManifestLoader.LoadedPackage':
|
49
52
|
return self._package
|
50
53
|
|
54
|
+
@property
|
55
|
+
def module(self) -> str:
|
56
|
+
return self._resolved.module
|
57
|
+
|
58
|
+
@property
|
59
|
+
def class_key(self) -> str:
|
60
|
+
return self._resolved.class_key
|
61
|
+
|
51
62
|
@property
|
52
63
|
def manifest(self) -> Manifest:
|
53
|
-
return self.
|
64
|
+
return self._resolved.manifest
|
54
65
|
|
55
66
|
@property
|
56
67
|
def loader(self) -> 'ManifestLoader':
|
57
68
|
return self._package.loader
|
58
69
|
|
59
|
-
@property
|
60
|
-
def class_key(self) -> str:
|
61
|
-
return self._cls_key
|
62
|
-
|
63
70
|
_value: ta.Any
|
64
71
|
|
65
72
|
def value(self) -> ta.Any:
|
@@ -68,7 +75,7 @@ class ManifestLoader:
|
|
68
75
|
except AttributeError:
|
69
76
|
pass
|
70
77
|
|
71
|
-
value = self.loader.
|
78
|
+
value = self.loader._instantiate_resolved_manifest(self._resolved) # noqa
|
72
79
|
self._value = value
|
73
80
|
return value
|
74
81
|
|
@@ -86,7 +93,7 @@ class ManifestLoader:
|
|
86
93
|
_manifests: ta.Sequence['ManifestLoader.LoadedManifest']
|
87
94
|
|
88
95
|
def __repr__(self) -> str:
|
89
|
-
return f'{self.__class__.__name__}(name={self._name!r})'
|
96
|
+
return f'{self.__class__.__name__}@{id(self):x}(name={self._name!r})'
|
90
97
|
|
91
98
|
@property
|
92
99
|
def loader(self) -> 'ManifestLoader':
|
@@ -287,14 +294,19 @@ class ManifestLoader:
|
|
287
294
|
|
288
295
|
##
|
289
296
|
|
297
|
+
@dc.dataclass()
|
290
298
|
class ClassKeyError(Exception):
|
291
|
-
|
299
|
+
key: str
|
300
|
+
module: ta.Optional[str] = None
|
292
301
|
|
293
302
|
def _load_class_uncached(self, key: str) -> type:
|
294
|
-
if not key.startswith('
|
303
|
+
if not key.startswith('!'):
|
295
304
|
raise ManifestLoader.ClassKeyError(key)
|
296
305
|
|
297
306
|
parts = key[1:].split('.')
|
307
|
+
if '' in parts:
|
308
|
+
raise ManifestLoader.ClassKeyError(key)
|
309
|
+
|
298
310
|
pos = next(i for i, p in enumerate(parts) if p[0].isupper())
|
299
311
|
|
300
312
|
mod_name = '.'.join(parts[:pos])
|
@@ -330,37 +342,79 @@ class ManifestLoader:
|
|
330
342
|
raise TypeError(cls)
|
331
343
|
mod_name = cls.__module__
|
332
344
|
mod_name = self._module_reverse_remap.get(mod_name, mod_name)
|
333
|
-
return f'
|
345
|
+
return f'!{mod_name}.{cls.__qualname__}'
|
346
|
+
|
347
|
+
##
|
348
|
+
|
349
|
+
class _ResolvedManifest(ta.NamedTuple):
|
350
|
+
manifest: Manifest
|
351
|
+
package: str
|
352
|
+
|
353
|
+
module: str
|
354
|
+
class_key: str
|
355
|
+
value_dct: ta.Any
|
356
|
+
|
357
|
+
@classmethod
|
358
|
+
def _resolve_raw_manifest(
|
359
|
+
cls,
|
360
|
+
m: Manifest,
|
361
|
+
*,
|
362
|
+
package_name: str,
|
363
|
+
) -> _ResolvedManifest:
|
364
|
+
# self._module = module
|
365
|
+
# self._class_key = class_key
|
366
|
+
if not m.module.startswith('.'):
|
367
|
+
raise NameError(m.module)
|
368
|
+
|
369
|
+
module = package_name + m.module
|
370
|
+
|
371
|
+
[(class_key, value_dct)] = m.value.items()
|
372
|
+
|
373
|
+
if not class_key.startswith('!'):
|
374
|
+
raise ManifestLoader.ClassKeyError(class_key, module=module)
|
375
|
+
|
376
|
+
if class_key.startswith('!.'):
|
377
|
+
class_key = f'!{package_name}{class_key[1:]}'
|
378
|
+
|
379
|
+
# FIXME: move to builder
|
380
|
+
# elif key.startswith('$.'):
|
381
|
+
# if module.startswith('.'):
|
382
|
+
# raise NameError(module)
|
383
|
+
# kl = key[1:].split('.')
|
384
|
+
# ml = module.split('.')
|
385
|
+
# lvl = len(kl) - kl[::-1].index('')
|
386
|
+
# if lvl >= len(ml):
|
387
|
+
# raise ManifestLoader.ClassKeyError(key, module=module)
|
388
|
+
# rn = '.'.join([*ml[:-lvl], *kl[lvl:]])
|
389
|
+
# return f'${rn}'
|
390
|
+
|
391
|
+
return ManifestLoader._ResolvedManifest(
|
392
|
+
manifest=m,
|
393
|
+
package=package_name,
|
394
|
+
|
395
|
+
module=module,
|
396
|
+
class_key=class_key,
|
397
|
+
value_dct=value_dct,
|
398
|
+
)
|
334
399
|
|
335
400
|
##
|
336
401
|
|
337
|
-
|
402
|
+
@classmethod
|
403
|
+
def _deserialize_raw_manifests(cls, obj: ta.Any) -> ta.Sequence[Manifest]:
|
338
404
|
if not isinstance(obj, (list, tuple)):
|
339
405
|
raise TypeError(obj)
|
340
406
|
|
341
407
|
lst: ta.List[Manifest] = []
|
342
408
|
for e in obj:
|
343
|
-
|
344
|
-
|
345
|
-
m = dc.replace(m, module=pkg_name + m.module)
|
346
|
-
|
347
|
-
[(key, value_dct)] = m.value.items()
|
348
|
-
if not key.startswith('$'):
|
349
|
-
raise ManifestLoader.ClassKeyError(key)
|
350
|
-
if key.startswith('$.'):
|
351
|
-
key = f'${pkg_name}{key[1:]}'
|
352
|
-
m = dc.replace(m, value={key: value_dct})
|
353
|
-
|
354
|
-
lst.append(m)
|
409
|
+
lst.append(Manifest(**e))
|
355
410
|
|
356
411
|
return lst
|
357
412
|
|
358
|
-
|
359
|
-
|
360
|
-
def _read_package_file_text(self, pkg_name: str, file_name: str) -> ta.Optional[str]:
|
413
|
+
@classmethod
|
414
|
+
def _read_package_file_text(cls, package_name: str, file_name: str) -> ta.Optional[str]:
|
361
415
|
# importlib.resources.files actually imports the package - to avoid this, if possible, the file is read straight
|
362
416
|
# off the filesystem.
|
363
|
-
spec = importlib.util.find_spec(
|
417
|
+
spec = importlib.util.find_spec(package_name)
|
364
418
|
if (
|
365
419
|
spec is not None and
|
366
420
|
isinstance(spec.loader, importlib.machinery.SourceFileLoader) and
|
@@ -375,17 +429,16 @@ class ManifestLoader:
|
|
375
429
|
return f.read()
|
376
430
|
|
377
431
|
from importlib import resources as importlib_resources # noqa
|
378
|
-
t = importlib_resources.files(
|
432
|
+
t = importlib_resources.files(package_name).joinpath(file_name)
|
379
433
|
if not t.is_file():
|
380
434
|
return None
|
381
435
|
return t.read_text('utf-8')
|
382
436
|
|
383
|
-
#
|
384
|
-
|
385
437
|
MANIFESTS_FILE_NAME: ta.ClassVar[str] = '.manifests.json'
|
386
438
|
|
387
|
-
|
388
|
-
|
439
|
+
@classmethod
|
440
|
+
def _read_package_raw_manifests(cls, package_name: str) -> ta.Optional[ta.Sequence[Manifest]]:
|
441
|
+
src = cls._read_package_file_text(package_name, cls.MANIFESTS_FILE_NAME)
|
389
442
|
if src is None:
|
390
443
|
return None
|
391
444
|
|
@@ -393,13 +446,21 @@ class ManifestLoader:
|
|
393
446
|
if not isinstance(obj, (list, tuple)):
|
394
447
|
raise TypeError(obj)
|
395
448
|
|
396
|
-
|
449
|
+
return cls._deserialize_raw_manifests(obj)
|
450
|
+
|
451
|
+
##
|
452
|
+
|
453
|
+
def _load_package_uncached(self, package_name: str) -> ta.Optional[LoadedPackage]:
|
454
|
+
if (raw_lst := self._read_package_raw_manifests(package_name)) is None:
|
455
|
+
return None
|
397
456
|
|
398
|
-
ld_pkg = ManifestLoader.LoadedPackage(self,
|
457
|
+
ld_pkg = ManifestLoader.LoadedPackage(self, package_name)
|
399
458
|
|
400
459
|
ld_man_lst: ta.List[ManifestLoader.LoadedManifest] = []
|
401
460
|
for raw in raw_lst:
|
402
|
-
|
461
|
+
rsv = self._resolve_raw_manifest(raw, package_name=package_name)
|
462
|
+
|
463
|
+
ld_man = ManifestLoader.LoadedManifest(ld_pkg, rsv)
|
403
464
|
|
404
465
|
ld_man_lst.append(ld_man)
|
405
466
|
|
@@ -407,19 +468,19 @@ class ManifestLoader:
|
|
407
468
|
|
408
469
|
return ld_pkg
|
409
470
|
|
410
|
-
def _load_package_locked(self,
|
471
|
+
def _load_package_locked(self, package_name: str) -> ta.Optional[LoadedPackage]:
|
411
472
|
try:
|
412
|
-
return self._loaded_packages[
|
473
|
+
return self._loaded_packages[package_name]
|
413
474
|
except KeyError:
|
414
475
|
pass
|
415
476
|
|
416
|
-
pkg = self._load_package_uncached(
|
417
|
-
self._loaded_packages[
|
477
|
+
pkg = self._load_package_uncached(package_name)
|
478
|
+
self._loaded_packages[package_name] = pkg
|
418
479
|
return pkg
|
419
480
|
|
420
|
-
def load_package(self,
|
481
|
+
def load_package(self, package_name: str) -> ta.Optional[LoadedPackage]:
|
421
482
|
with self._lock:
|
422
|
-
return self._load_package_locked(
|
483
|
+
return self._load_package_locked(package_name)
|
423
484
|
|
424
485
|
##
|
425
486
|
|
@@ -429,10 +490,9 @@ class ManifestLoader:
|
|
429
490
|
else:
|
430
491
|
return cls(**kwargs)
|
431
492
|
|
432
|
-
def
|
433
|
-
|
434
|
-
|
435
|
-
value = self._instantiate_value(cls, **value_dct)
|
493
|
+
def _instantiate_resolved_manifest(self, resolved: _ResolvedManifest) -> ta.Any:
|
494
|
+
cls = self._load_class(resolved.class_key)
|
495
|
+
value = self._instantiate_value(cls, **resolved.value_dct)
|
436
496
|
return value
|
437
497
|
|
438
498
|
##
|
omlish/manifests/static.py
CHANGED
@@ -13,8 +13,8 @@ class StaticModAttrManifest(dc.Static, ModAttrManifest, abc.ABC):
|
|
13
13
|
def __init_subclass__(cls, **kwargs: ta.Any) -> None:
|
14
14
|
if (
|
15
15
|
not (lang.is_abstract_class(cls) or abc.ABC in cls.__bases__) and
|
16
|
-
'
|
16
|
+
'module' not in cls.__dict__
|
17
17
|
):
|
18
|
-
setattr(cls, '
|
18
|
+
setattr(cls, 'module', cls.__module__)
|
19
19
|
|
20
20
|
super().__init_subclass__(**kwargs)
|
omlish/manifests/types.py
CHANGED
@@ -9,7 +9,7 @@ import typing as ta
|
|
9
9
|
|
10
10
|
@dc.dataclass(frozen=True)
|
11
11
|
class ManifestOrigin:
|
12
|
-
module: str
|
12
|
+
module: str # Always starts with exactly one '.'
|
13
13
|
attr: ta.Optional[str] # None if inline
|
14
14
|
|
15
15
|
file: str
|
@@ -18,4 +18,4 @@ class ManifestOrigin:
|
|
18
18
|
|
19
19
|
@dc.dataclass(frozen=True)
|
20
20
|
class Manifest(ManifestOrigin):
|
21
|
-
value: ta.Any
|
21
|
+
value: ta.Any # [{class_key: value_dct}], where class_key is of the form `!.foo.bar.Class` or `!baz.quz.Class`
|
omlish/os/pidfiles/__main__.py
CHANGED
omlish/secrets/pwgen.py
CHANGED
@@ -76,9 +76,9 @@ def _main() -> None:
|
|
76
76
|
|
77
77
|
|
78
78
|
# @omlish-manifest
|
79
|
-
_CLI_MODULE = {'
|
80
|
-
'
|
81
|
-
'
|
79
|
+
_CLI_MODULE = {'!omdev.cli.types.CliModule': {
|
80
|
+
'name': 'pwgen',
|
81
|
+
'module': __name__,
|
82
82
|
}}
|
83
83
|
|
84
84
|
|
@@ -1,5 +1,5 @@
|
|
1
|
-
omlish/.manifests.json,sha256=
|
2
|
-
omlish/__about__.py,sha256=
|
1
|
+
omlish/.manifests.json,sha256=uUbe0oz6BFhBWIVdOyiGxkVqyLfiT8LAeqlxAHWpZLY,8410
|
2
|
+
omlish/__about__.py,sha256=2BfLZ_Ga1VoW31FlBXVEirUy13Z-sUha0SeHaypArCM,3601
|
3
3
|
omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
|
4
4
|
omlish/c3.py,sha256=rer-TPOFDU6fYq_AWio_AmA-ckZ8JDY5shIzQ_yXfzA,8414
|
5
5
|
omlish/cached.py,sha256=MLap_p0rdGoDIMVhXVHm1tsbcWobJF0OanoodV03Ju8,542
|
@@ -61,7 +61,7 @@ omlish/asyncs/ioproxy/proxier.py,sha256=dYXiVkDJVCzasMP4eMNSvSO1eNsd6CIRTtLyoa8Y
|
|
61
61
|
omlish/asyncs/ioproxy/proxy.py,sha256=s9bnjVPkTVtW5dh_vcpKNwbzEhA2zZZKF-U1BWZ5LPo,3911
|
62
62
|
omlish/asyncs/ioproxy/typing.py,sha256=ZM-9HRO4dpy-RqomSkyRha9s901ckL30bwjACi2TJ8s,2475
|
63
63
|
omlish/bootstrap/__init__.py,sha256=JgP3xsEsCphIQs2jI4um2uPI0RN8nCPMXl6FuiPC1js,700
|
64
|
-
omlish/bootstrap/__main__.py,sha256=
|
64
|
+
omlish/bootstrap/__main__.py,sha256=GKhsZdPdJtzE4qnjt34-EvL07nLJVZD-d8nxfGl7EEI,188
|
65
65
|
omlish/bootstrap/base.py,sha256=d8hqn4hp1XMMi5PgcJBQXPKmW47epu8CxBlqDZiRZb4,1073
|
66
66
|
omlish/bootstrap/diag.py,sha256=nTHKrZBdyEYoTpctwOpwzSMbQ2dROGkxpdzWfoe2xZg,5353
|
67
67
|
omlish/bootstrap/harness.py,sha256=BMFNTYG03V74WFW5zd6aaxIb6uzGeldiR3VX2alQwlU,1994
|
@@ -69,7 +69,7 @@ omlish/bootstrap/main.py,sha256=RQAQVb_Cbk_Lnu-hSGMAo-aVQVIJ-E_TW7ZLsPO-ECk,5909
|
|
69
69
|
omlish/bootstrap/marshal.py,sha256=aKLeiOyPW6DelVK78dmw0axQzOMHX-ALrSqOOzYh05w,486
|
70
70
|
omlish/bootstrap/sys.py,sha256=r06ZroT2Rv0CBHiEweqDV6oWaMGNhFc4u0XBMBv3nnY,8793
|
71
71
|
omlish/codecs/__init__.py,sha256=-FDwRJFGagg-fZyQ8wup4GPuR6gHpmaChzthlykn-kY,876
|
72
|
-
omlish/codecs/base.py,sha256=
|
72
|
+
omlish/codecs/base.py,sha256=nKAQKF0985xosHIP0mAkUZnr8lfHFj66ShnxL0OfdQE,2193
|
73
73
|
omlish/codecs/bytes.py,sha256=3DxyQQCvFcP3mQ5G93f_mygXEb-7I8buM8EyzUcx2Is,2155
|
74
74
|
omlish/codecs/chain.py,sha256=nbkL2nz0ZqT2lxYwSXktHh1YFTQ4Iii1Hp-fWjis6rc,532
|
75
75
|
omlish/codecs/funcs.py,sha256=or0Jogczuzk7csDTRl-HURMEjl8LXXqxxXYK45xcM5w,855
|
@@ -211,7 +211,7 @@ omlish/diag/asts.py,sha256=MWh9XAG3m9L10FIJCyoNT2aU4Eft6tun_x9K0riq6Dk,3332
|
|
211
211
|
omlish/diag/debug.py,sha256=ClED7kKXeVMyKrjGIxcq14kXk9kvUJfytBQwK9y7c4Q,1637
|
212
212
|
omlish/diag/lslocks.py,sha256=VuA4MNNqXTcnHWsJvulGM6pNJRKmlXFXUZTfXpY0V6g,1750
|
213
213
|
omlish/diag/lsof.py,sha256=5N5aZQ7UqEBgV-hj3_a8QcvALOeLlVb8otqF2hvucxY,9107
|
214
|
-
omlish/diag/procfs.py,sha256=
|
214
|
+
omlish/diag/procfs.py,sha256=L-n-U8s76QwWpzwkS4AP7CJp2_V-sy3QXvYKVTFxcAE,9678
|
215
215
|
omlish/diag/procstats.py,sha256=EJEe2Zc58ykBoTfqMXro7H52aQa_pd6uC2hsIPFceso,825
|
216
216
|
omlish/diag/ps.py,sha256=MEpMU6fbkh0bSWrOHh_okOa0JDTUSUQUVSYBdh1TGvE,1672
|
217
217
|
omlish/diag/pycharm.py,sha256=9Mgn5T2ZdlEUL3VV-GzVmCBs_ZtIpLwaUzP6pgHEUEo,4712
|
@@ -249,7 +249,7 @@ omlish/dom/rendering.py,sha256=5cQK3A_uifh3Th5v3c0nx-tW8d1KyGL6C9tASPaNVNI,4336
|
|
249
249
|
omlish/formats/__init__.py,sha256=T0AG1gFnqQ5JiHN0UPQjQ-7g5tnxMIG-mgOvMYExYAM,21
|
250
250
|
omlish/formats/cbor.py,sha256=o_Hbe4kthO9CeXK-FySrw0dHVlrdyTo2Y8PpGRDfZ3c,514
|
251
251
|
omlish/formats/cloudpickle.py,sha256=16si4yUp_pAdDWGECAWf6HLA2PwSANGGgDoMLGZUem8,579
|
252
|
-
omlish/formats/codecs.py,sha256=
|
252
|
+
omlish/formats/codecs.py,sha256=n_02fv1Qk2ixG9vDkTZKdRHGWPKnvDBDdOMVKfnElOI,1641
|
253
253
|
omlish/formats/dotenv.py,sha256=60RHhpNmLhqT7ISeA79MmSc7Sq8AxF5nKj7VPjdroZU,19320
|
254
254
|
omlish/formats/pickle.py,sha256=jdp4E9WH9qVPBE3sSqbqDtUo18RbTSIiSpSzJ-IEVZw,529
|
255
255
|
omlish/formats/props.py,sha256=rPycJ-_b76NSNc2b_dZ0F0zyKzuXK8v6K6fqcV8uCRQ,18933
|
@@ -403,7 +403,7 @@ omlish/io/compress/adapters.py,sha256=LJHhjwMHXstoLyX_q0QhGoBAcqyYGWfzhzQbGBXHzH
|
|
403
403
|
omlish/io/compress/base.py,sha256=X-B9zC_JAJ84ozO4Vl_7mG3o6zkF6jZfcXO5JmDftGk,620
|
404
404
|
omlish/io/compress/brotli.py,sha256=sNDX5HmEVqg9_xID5NTFPAWuvlNPw5ixfOnnIWwZf_o,1189
|
405
405
|
omlish/io/compress/bz2.py,sha256=HtwBuBYHJ3MyWO9xJ0XhWpyIYTA3OszLrpu_J4kRRPA,1534
|
406
|
-
omlish/io/compress/codecs.py,sha256=
|
406
|
+
omlish/io/compress/codecs.py,sha256=aN7XJnWdB-wCIaHVucTosdroQDfmNniXux5121MA5zg,1776
|
407
407
|
omlish/io/compress/gzip.py,sha256=6nCWycCYo0_4cTMu4QMhu23MT1xbrwyf7E8sGGBkR_w,12199
|
408
408
|
omlish/io/compress/lz4.py,sha256=qaze1yVXexjJyN18Adh8fbTm_5pEeyytx66KoMUNpCU,2759
|
409
409
|
omlish/io/compress/lzma.py,sha256=qDyshBgBUSPcZpAyXiRXnqI7zx7x60UpPxn8K3nN8aM,2469
|
@@ -517,11 +517,11 @@ omlish/logs/standard.py,sha256=w0jS824YDvlzrGgAxKiPk9RoZ5V1b0ADiFsBEpKLuLY,3152
|
|
517
517
|
omlish/logs/timing.py,sha256=qsQ3DB6swts1pxrFlmLWQzhH-3nzDrq1MUu7PxjjUyU,1519
|
518
518
|
omlish/logs/utils.py,sha256=OkFWf1exmWImmT7BaSiIC7c0Fk9tAis-PRqo8H4ny3c,398
|
519
519
|
omlish/manifests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
520
|
-
omlish/manifests/base.py,sha256=
|
520
|
+
omlish/manifests/base.py,sha256=Dt44a3qppWaxkoi3naFFMetxbxw14qnz2naTKK93GNU,915
|
521
521
|
omlish/manifests/globals.py,sha256=kVqQ-fT4kc7xWzLHoI731GviitFPv2v2yqw-p7t7Exs,2628
|
522
|
-
omlish/manifests/loading.py,sha256=
|
523
|
-
omlish/manifests/static.py,sha256=
|
524
|
-
omlish/manifests/types.py,sha256=
|
522
|
+
omlish/manifests/loading.py,sha256=guLx-3y4rqQ2YIgTtqlpCk59inePtcEUE19JrWDzleM,17639
|
523
|
+
omlish/manifests/static.py,sha256=9BaPBLkuzxHmg5A-5k9BjjBFINCdmFOIu06dMFgCfz4,497
|
524
|
+
omlish/manifests/types.py,sha256=NeOGuIVrcbqjCDbQ3MnCxxHAgHnw0CkWJsBzo230PWE,453
|
525
525
|
omlish/marshal/.dataclasses.json,sha256=wXWUy_IR8AolAa2RQnqn_mo2QnmVcvUJmayIykdVl0I,22
|
526
526
|
omlish/marshal/__init__.py,sha256=yquxGmP5r4ITDbR1_OCTy1y9Y5vU7SKL1gj467RVJkg,3554
|
527
527
|
omlish/marshal/base.py,sha256=3GMrhJBcnVrVtlQRQLOMgvV66MciAYpHKEQi5Ns3dIk,11853
|
@@ -596,7 +596,7 @@ omlish/os/deathpacts/base.py,sha256=EGN3BWSXPv0s9kl_QLrWE31hTybDHCmsLc_w3U2VyHc,
|
|
596
596
|
omlish/os/deathpacts/heartbeatfile.py,sha256=OybdvhM2kxBTuoJWOJJ5LcX-0lg3jTOvvD2HUunxDWU,1731
|
597
597
|
omlish/os/deathpacts/pipe.py,sha256=mfN2UGsOaEmoh4jHi6D0vnjg420pNsyctb3ZTcNsdqI,3285
|
598
598
|
omlish/os/pidfiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
599
|
-
omlish/os/pidfiles/__main__.py,sha256=
|
599
|
+
omlish/os/pidfiles/__main__.py,sha256=nfjVxFY9I2I7hfb81rCxX6zm2Rc3P87ySpUouy33vG8,194
|
600
600
|
omlish/os/pidfiles/cli.py,sha256=dAKukx4mrarH8t7KZM4n_XSfTk3ycShGAFqRrirK5dw,2079
|
601
601
|
omlish/os/pidfiles/manager.py,sha256=oOnL90ttOG5ba_k9XPJ18reP7M5S-_30ln4OAfYV5W8,2357
|
602
602
|
omlish/os/pidfiles/pidfile.py,sha256=KlqrW7I-lYVDNJspFHE89i_A0HTTteT5B99b7vpTfNs,4400
|
@@ -611,7 +611,7 @@ omlish/secrets/all.py,sha256=xx1UyiokSFzdeR8c6Ro-Fi2XBUsQ2i0nR1foX12nH0c,464
|
|
611
611
|
omlish/secrets/crypto.py,sha256=9D21lnvPhStwu8arD4ssT0ih0bDG-nlqIRdVgYL40xA,3708
|
612
612
|
omlish/secrets/marshal.py,sha256=u90n1OfRfdpH1T2F0xK_pAPH1ENYL6acFt6XdVd3KvI,1986
|
613
613
|
omlish/secrets/openssl.py,sha256=UT_dXJ4zA1s9e-UHoW_NLGHQO7iouUNPnJNkkpuw3JI,6213
|
614
|
-
omlish/secrets/pwgen.py,sha256=
|
614
|
+
omlish/secrets/pwgen.py,sha256=Z5i1qMKK4idOZvWai5dXkI59gX7pYzFFlFYAj7qEmqA,1706
|
615
615
|
omlish/secrets/pwhash.py,sha256=Jctv3QzcMvVPXJsWA3w3LDUlzmyUDGEWG9sLiJz1xaw,4107
|
616
616
|
omlish/secrets/secrets.py,sha256=kGYUS0fyZEBdWyWhv_uroyZqz31bwuXwk9FAQMZIvdo,8012
|
617
617
|
omlish/secrets/ssl.py,sha256=HnH5MS31X9Uid7Iw1CWqviaVwMLF1Ha8RxZiiE-_iF8,158
|
@@ -652,7 +652,7 @@ omlish/specs/irc/protocol/tags.py,sha256=M89vR2GgDNroEsiH2QNchVX2LmT6sMIXY7huTEv
|
|
652
652
|
omlish/specs/irc/protocol/utils.py,sha256=tUbkShJov8oCsbg1KZE1EC5pCThXJTdXFcw0HBM5ApQ,692
|
653
653
|
omlish/specs/jmespath/LICENSE,sha256=IH-ZZlZkS8XMkf_ubNVD1aYHQ2l_wd0tmHtXrCcYpRU,1113
|
654
654
|
omlish/specs/jmespath/__init__.py,sha256=pppE1MqDU1mRchMZehpwLleMHDO-QGAGJKOKuAyuaiE,2187
|
655
|
-
omlish/specs/jmespath/__main__.py,sha256=
|
655
|
+
omlish/specs/jmespath/__main__.py,sha256=AkowPx7ASpK0E4EMq0MiwVarLDB7alConH-2mBOGYIA,194
|
656
656
|
omlish/specs/jmespath/ast.py,sha256=qX8jiqyUZMSLtlmyORSEHM7jwMDTtoqCPM5tZPWtB6g,5648
|
657
657
|
omlish/specs/jmespath/cli.py,sha256=oQ8u8sKM9kysB2rGChXrCl7RgsUgo6MNrWtzdLz4eIA,2147
|
658
658
|
omlish/specs/jmespath/errors.py,sha256=sU0eqKUpgjnqNsk2UhiJRXTApMhLDfgvBaKE5RZFFIA,4440
|
@@ -908,9 +908,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
|
|
908
908
|
omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
|
909
909
|
omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
|
910
910
|
omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
|
911
|
-
omlish-0.0.0.
|
912
|
-
omlish-0.0.0.
|
913
|
-
omlish-0.0.0.
|
914
|
-
omlish-0.0.0.
|
915
|
-
omlish-0.0.0.
|
916
|
-
omlish-0.0.0.
|
911
|
+
omlish-0.0.0.dev406.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
912
|
+
omlish-0.0.0.dev406.dist-info/METADATA,sha256=Pl8H4Xc-s6SxmB3XfirBXAfdyOb6tPhDnhR0h0zk6r0,18881
|
913
|
+
omlish-0.0.0.dev406.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
914
|
+
omlish-0.0.0.dev406.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
915
|
+
omlish-0.0.0.dev406.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
916
|
+
omlish-0.0.0.dev406.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|