omlish 0.0.0.dev162__py3-none-any.whl → 0.0.0.dev163__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 +228 -0
- omlish/__about__.py +2 -2
- omlish/codecs/__init__.py +69 -0
- omlish/codecs/base.py +102 -0
- omlish/codecs/bytes.py +119 -0
- omlish/codecs/chain.py +23 -0
- omlish/codecs/funcs.py +28 -0
- omlish/codecs/registry.py +139 -0
- omlish/codecs/standard.py +4 -0
- omlish/codecs/text.py +217 -0
- omlish/formats/cbor.py +31 -0
- omlish/formats/codecs.py +93 -0
- omlish/formats/json/codecs.py +33 -0
- omlish/formats/json5.py +31 -0
- omlish/formats/pickle.py +31 -0
- omlish/formats/toml.py +17 -0
- omlish/formats/yaml.py +18 -0
- omlish/io/compress/brotli.py +15 -1
- omlish/io/compress/bz2.py +14 -0
- omlish/io/compress/codecs.py +58 -0
- omlish/io/compress/gzip.py +11 -0
- omlish/io/compress/lz4.py +14 -0
- omlish/io/compress/lzma.py +14 -0
- omlish/io/compress/snappy.py +14 -0
- omlish/io/compress/zlib.py +14 -0
- omlish/io/compress/zstd.py +14 -0
- omlish/lang/__init__.py +1 -0
- omlish/lang/functions.py +11 -0
- omlish/manifests/load.py +44 -6
- {omlish-0.0.0.dev162.dist-info → omlish-0.0.0.dev163.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev162.dist-info → omlish-0.0.0.dev163.dist-info}/RECORD +35 -20
- {omlish-0.0.0.dev162.dist-info → omlish-0.0.0.dev163.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev162.dist-info → omlish-0.0.0.dev163.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev162.dist-info → omlish-0.0.0.dev163.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev162.dist-info → omlish-0.0.0.dev163.dist-info}/top_level.txt +0 -0
| @@ -0,0 +1,58 @@ | |
| 1 | 
            +
            import dataclasses as dc
         | 
| 2 | 
            +
            import typing as ta
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            from ... import codecs
         | 
| 5 | 
            +
            from .base import Compression
         | 
| 6 | 
            +
             | 
| 7 | 
            +
             | 
| 8 | 
            +
            ##
         | 
| 9 | 
            +
             | 
| 10 | 
            +
             | 
| 11 | 
            +
            @dc.dataclass(frozen=True)
         | 
| 12 | 
            +
            class CompressionEagerCodec(codecs.EagerCodec[bytes, bytes]):
         | 
| 13 | 
            +
                compression: Compression
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                def encode(self, i: bytes) -> bytes:
         | 
| 16 | 
            +
                    return self.compression.compress(i)
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def decode(self, o: bytes) -> bytes:
         | 
| 19 | 
            +
                    return self.compression.decompress(o)
         | 
| 20 | 
            +
             | 
| 21 | 
            +
             | 
| 22 | 
            +
            ##
         | 
| 23 | 
            +
             | 
| 24 | 
            +
             | 
| 25 | 
            +
            class CompressionCodec(codecs.Codec):
         | 
| 26 | 
            +
                pass
         | 
| 27 | 
            +
             | 
| 28 | 
            +
             | 
| 29 | 
            +
            def make_compression_codec(
         | 
| 30 | 
            +
                    name: str,
         | 
| 31 | 
            +
                    cls: type[Compression],
         | 
| 32 | 
            +
                    *,
         | 
| 33 | 
            +
                    aliases: ta.Collection[str] | None = None,
         | 
| 34 | 
            +
            ) -> CompressionCodec:
         | 
| 35 | 
            +
                return CompressionCodec(
         | 
| 36 | 
            +
                    name=name,
         | 
| 37 | 
            +
                    aliases=aliases,
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                    input=bytes,
         | 
| 40 | 
            +
                    output=bytes,
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                    new=lambda *args, **kwargs: CompressionEagerCodec(cls(*args, **kwargs)),
         | 
| 43 | 
            +
                )
         | 
| 44 | 
            +
             | 
| 45 | 
            +
             | 
| 46 | 
            +
            ##
         | 
| 47 | 
            +
             | 
| 48 | 
            +
             | 
| 49 | 
            +
            def make_compression_lazy_loaded_codec(
         | 
| 50 | 
            +
                    mod_name: str,
         | 
| 51 | 
            +
                    attr_name: str,
         | 
| 52 | 
            +
                    codec: CompressionCodec,
         | 
| 53 | 
            +
            ) -> codecs.LazyLoadedCodec:
         | 
| 54 | 
            +
                return codecs.LazyLoadedCodec.new(
         | 
| 55 | 
            +
                    mod_name,
         | 
| 56 | 
            +
                    attr_name,
         | 
| 57 | 
            +
                    codec,
         | 
| 58 | 
            +
                )
         | 
    
        omlish/io/compress/gzip.py
    CHANGED
    
    | @@ -48,6 +48,8 @@ from ..generators import BytesSteppedReaderGenerator | |
| 48 48 | 
             
            from ..generators.readers import PrependableBytesGeneratorReader
         | 
| 49 49 | 
             
            from .base import Compression
         | 
| 50 50 | 
             
            from .base import IncrementalCompression
         | 
| 51 | 
            +
            from .codecs import make_compression_codec
         | 
| 52 | 
            +
            from .codecs import make_compression_lazy_loaded_codec
         | 
| 51 53 |  | 
| 52 54 |  | 
| 53 55 | 
             
            if ta.TYPE_CHECKING:
         | 
| @@ -337,3 +339,12 @@ class IncrementalGzipDecompressor: | |
| 337 339 | 
             
                        stream_size += len(uncompress)
         | 
| 338 340 | 
             
                        pos += len(uncompress)
         | 
| 339 341 | 
             
                        check.none((yield uncompress))
         | 
| 342 | 
            +
             | 
| 343 | 
            +
             | 
| 344 | 
            +
            ##
         | 
| 345 | 
            +
             | 
| 346 | 
            +
             | 
| 347 | 
            +
            GZIP_CODEC = make_compression_codec('gzip', GzipCompression, aliases=['gz'])
         | 
| 348 | 
            +
             | 
| 349 | 
            +
            # @omlish-manifest
         | 
| 350 | 
            +
            _GZIP_LAZY_CODEC = make_compression_lazy_loaded_codec(__name__, 'GZIP_CODEC', GZIP_CODEC)
         | 
    
        omlish/io/compress/lz4.py
    CHANGED
    
    | @@ -6,6 +6,8 @@ from ... import lang | |
| 6 6 | 
             
            from ..generators import BytesSteppedGenerator
         | 
| 7 7 | 
             
            from .base import Compression
         | 
| 8 8 | 
             
            from .base import IncrementalCompression
         | 
| 9 | 
            +
            from .codecs import make_compression_codec
         | 
| 10 | 
            +
            from .codecs import make_compression_lazy_loaded_codec
         | 
| 9 11 |  | 
| 10 12 |  | 
| 11 13 | 
             
            if ta.TYPE_CHECKING:
         | 
| @@ -14,6 +16,9 @@ else: | |
| 14 16 | 
             
                lz4_frame = lang.proxy_import('lz4.frame')
         | 
| 15 17 |  | 
| 16 18 |  | 
| 19 | 
            +
            ##
         | 
| 20 | 
            +
             | 
| 21 | 
            +
             | 
| 17 22 | 
             
            @dc.dataclass(frozen=True, kw_only=True)
         | 
| 18 23 | 
             
            class Lz4Compression(Compression, IncrementalCompression):
         | 
| 19 24 | 
             
                level: int = 0
         | 
| @@ -75,3 +80,12 @@ class Lz4Compression(Compression, IncrementalCompression): | |
| 75 80 | 
             
                                return
         | 
| 76 81 | 
             
                            if (o := decompressor.decompress(i)):
         | 
| 77 82 | 
             
                                yield o
         | 
| 83 | 
            +
             | 
| 84 | 
            +
             | 
| 85 | 
            +
            ##
         | 
| 86 | 
            +
             | 
| 87 | 
            +
             | 
| 88 | 
            +
            LZ4_CODEC = make_compression_codec('lz4', Lz4Compression)
         | 
| 89 | 
            +
             | 
| 90 | 
            +
            # @omlish-manifest
         | 
| 91 | 
            +
            _LZ4_LAZY_CODEC = make_compression_lazy_loaded_codec(__name__, 'LZ4_CODEC', LZ4_CODEC)
         | 
    
        omlish/io/compress/lzma.py
    CHANGED
    
    | @@ -9,6 +9,8 @@ from .adapters import CompressorObjectIncrementalAdapter | |
| 9 9 | 
             
            from .adapters import DecompressorObjectIncrementalAdapter
         | 
| 10 10 | 
             
            from .base import Compression
         | 
| 11 11 | 
             
            from .base import IncrementalCompression
         | 
| 12 | 
            +
            from .codecs import make_compression_codec
         | 
| 13 | 
            +
            from .codecs import make_compression_lazy_loaded_codec
         | 
| 12 14 |  | 
| 13 15 |  | 
| 14 16 | 
             
            if ta.TYPE_CHECKING:
         | 
| @@ -17,6 +19,9 @@ else: | |
| 17 19 | 
             
                lzma = lang.proxy_import('lzma')
         | 
| 18 20 |  | 
| 19 21 |  | 
| 22 | 
            +
            ##
         | 
| 23 | 
            +
             | 
| 24 | 
            +
             | 
| 20 25 | 
             
            @dc.dataclass(frozen=True, kw_only=True)
         | 
| 21 26 | 
             
            class LzmaCompression(Compression, IncrementalCompression):
         | 
| 22 27 | 
             
                format: int | None = None
         | 
| @@ -65,3 +70,12 @@ class LzmaCompression(Compression, IncrementalCompression): | |
| 65 70 | 
             
                        ),
         | 
| 66 71 | 
             
                        trailing_error=lzma.LZMAError,
         | 
| 67 72 | 
             
                    )()
         | 
| 73 | 
            +
             | 
| 74 | 
            +
             | 
| 75 | 
            +
            ##
         | 
| 76 | 
            +
             | 
| 77 | 
            +
             | 
| 78 | 
            +
            LZMA_CODEC = make_compression_codec('lzma', LzmaCompression)
         | 
| 79 | 
            +
             | 
| 80 | 
            +
            # @omlish-manifest
         | 
| 81 | 
            +
            _LZMA_LAZY_CODEC = make_compression_lazy_loaded_codec(__name__, 'LZMA_CODEC', LZMA_CODEC)
         | 
    
        omlish/io/compress/snappy.py
    CHANGED
    
    | @@ -3,6 +3,8 @@ import typing as ta | |
| 3 3 |  | 
| 4 4 | 
             
            from ... import lang
         | 
| 5 5 | 
             
            from .base import Compression
         | 
| 6 | 
            +
            from .codecs import make_compression_codec
         | 
| 7 | 
            +
            from .codecs import make_compression_lazy_loaded_codec
         | 
| 6 8 |  | 
| 7 9 |  | 
| 8 10 | 
             
            if ta.TYPE_CHECKING:
         | 
| @@ -11,6 +13,9 @@ else: | |
| 11 13 | 
             
                snappy = lang.proxy_import('snappy')
         | 
| 12 14 |  | 
| 13 15 |  | 
| 16 | 
            +
            ##
         | 
| 17 | 
            +
             | 
| 18 | 
            +
             | 
| 14 19 | 
             
            @dc.dataclass(frozen=True)
         | 
| 15 20 | 
             
            class SnappyCompression(Compression):
         | 
| 16 21 | 
             
                def compress(self, d: bytes) -> bytes:
         | 
| @@ -18,3 +23,12 @@ class SnappyCompression(Compression): | |
| 18 23 |  | 
| 19 24 | 
             
                def decompress(self, d: bytes) -> bytes:
         | 
| 20 25 | 
             
                    return snappy.decompress(d)
         | 
| 26 | 
            +
             | 
| 27 | 
            +
             | 
| 28 | 
            +
            ##
         | 
| 29 | 
            +
             | 
| 30 | 
            +
             | 
| 31 | 
            +
            SNAPPY_CODEC = make_compression_codec('snappy', SnappyCompression)
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            # @omlish-manifest
         | 
| 34 | 
            +
            _SNAPPY_LAZY_CODEC = make_compression_lazy_loaded_codec(__name__, 'SNAPPY_CODEC', SNAPPY_CODEC)
         | 
    
        omlish/io/compress/zlib.py
    CHANGED
    
    | @@ -9,6 +9,8 @@ from .adapters import CompressorObjectIncrementalAdapter | |
| 9 9 | 
             
            from .adapters import DecompressorObjectIncrementalAdapter
         | 
| 10 10 | 
             
            from .base import Compression
         | 
| 11 11 | 
             
            from .base import IncrementalCompression
         | 
| 12 | 
            +
            from .codecs import make_compression_codec
         | 
| 13 | 
            +
            from .codecs import make_compression_lazy_loaded_codec
         | 
| 12 14 |  | 
| 13 15 |  | 
| 14 16 | 
             
            if ta.TYPE_CHECKING:
         | 
| @@ -17,6 +19,9 @@ else: | |
| 17 19 | 
             
                zlib = lang.proxy_import('zlib')
         | 
| 18 20 |  | 
| 19 21 |  | 
| 22 | 
            +
            ##
         | 
| 23 | 
            +
             | 
| 24 | 
            +
             | 
| 20 25 | 
             
            @dc.dataclass(frozen=True, kw_only=True)
         | 
| 21 26 | 
             
            class ZlibCompression(Compression, IncrementalCompression):
         | 
| 22 27 | 
             
                level: int = 9
         | 
| @@ -58,3 +63,12 @@ class ZlibCompression(Compression, IncrementalCompression): | |
| 58 63 | 
             
                        ),
         | 
| 59 64 | 
             
                        trailing_error=OSError,
         | 
| 60 65 | 
             
                    )()
         | 
| 66 | 
            +
             | 
| 67 | 
            +
             | 
| 68 | 
            +
            ##
         | 
| 69 | 
            +
             | 
| 70 | 
            +
             | 
| 71 | 
            +
            ZLIB_CODEC = make_compression_codec('zlib', ZlibCompression)
         | 
| 72 | 
            +
             | 
| 73 | 
            +
            # @omlish-manifest
         | 
| 74 | 
            +
            _ZLIB_LAZY_CODEC = make_compression_lazy_loaded_codec(__name__, 'ZLIB_CODEC', ZLIB_CODEC)
         | 
    
        omlish/io/compress/zstd.py
    CHANGED
    
    | @@ -3,6 +3,8 @@ import typing as ta | |
| 3 3 |  | 
| 4 4 | 
             
            from ... import lang
         | 
| 5 5 | 
             
            from .base import Compression
         | 
| 6 | 
            +
            from .codecs import make_compression_codec
         | 
| 7 | 
            +
            from .codecs import make_compression_lazy_loaded_codec
         | 
| 6 8 |  | 
| 7 9 |  | 
| 8 10 | 
             
            if ta.TYPE_CHECKING:
         | 
| @@ -11,6 +13,9 @@ else: | |
| 11 13 | 
             
                zstandard = lang.proxy_import('zstandard')
         | 
| 12 14 |  | 
| 13 15 |  | 
| 16 | 
            +
            ##
         | 
| 17 | 
            +
             | 
| 18 | 
            +
             | 
| 14 19 | 
             
            @dc.dataclass(frozen=True, kw_only=True)
         | 
| 15 20 | 
             
            class ZstdCompression(Compression):
         | 
| 16 21 | 
             
                level: int | None = None
         | 
| @@ -28,3 +33,12 @@ class ZstdCompression(Compression): | |
| 28 33 | 
             
                        d,
         | 
| 29 34 | 
             
                        max_output_size=self.max_output_size,
         | 
| 30 35 | 
             
                    )
         | 
| 36 | 
            +
             | 
| 37 | 
            +
             | 
| 38 | 
            +
            ##
         | 
| 39 | 
            +
             | 
| 40 | 
            +
             | 
| 41 | 
            +
            ZSTD_CODEC = make_compression_codec('zstd', ZstdCompression)
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            # @omlish-manifest
         | 
| 44 | 
            +
            _ZSTD_LAZY_CODEC = make_compression_lazy_loaded_codec(__name__, 'ZSTD_CODEC', ZSTD_CODEC)
         | 
    
        omlish/lang/__init__.py
    CHANGED
    
    
    
        omlish/lang/functions.py
    CHANGED
    
    | @@ -4,6 +4,7 @@ import time | |
| 4 4 | 
             
            import typing as ta
         | 
| 5 5 |  | 
| 6 6 |  | 
| 7 | 
            +
            F = ta.TypeVar('F')
         | 
| 7 8 | 
             
            T = ta.TypeVar('T')
         | 
| 8 9 | 
             
            P = ta.ParamSpec('P')
         | 
| 9 10 | 
             
            CallableT = ta.TypeVar('CallableT', bound=ta.Callable)
         | 
| @@ -81,6 +82,16 @@ def identity(obj: T) -> T: | |
| 81 82 | 
             
                return obj
         | 
| 82 83 |  | 
| 83 84 |  | 
| 85 | 
            +
            def opt_fn(fn: ta.Callable[[F], T]) -> ta.Callable[[F | None], T | None]:
         | 
| 86 | 
            +
                @functools.wraps(fn)
         | 
| 87 | 
            +
                def inner(v: F | None) -> T | None:
         | 
| 88 | 
            +
                    if v is not None:
         | 
| 89 | 
            +
                        return fn(v)
         | 
| 90 | 
            +
                    else:
         | 
| 91 | 
            +
                        return None
         | 
| 92 | 
            +
                return inner
         | 
| 93 | 
            +
             | 
| 94 | 
            +
             | 
| 84 95 | 
             
            class constant(ta.Generic[T]):  # noqa
         | 
| 85 96 | 
             
                def __init__(self, obj: T) -> None:
         | 
| 86 97 | 
             
                    super().__init__()
         | 
    
        omlish/manifests/load.py
    CHANGED
    
    | @@ -9,6 +9,7 @@ import dataclasses as dc | |
| 9 9 | 
             
            import importlib.machinery
         | 
| 10 10 | 
             
            import importlib.resources
         | 
| 11 11 | 
             
            import json
         | 
| 12 | 
            +
            import threading
         | 
| 12 13 | 
             
            import typing as ta
         | 
| 13 14 |  | 
| 14 15 | 
             
            from .types import Manifest
         | 
| @@ -25,6 +26,8 @@ class ManifestLoader: | |
| 25 26 | 
             
                ) -> None:
         | 
| 26 27 | 
             
                    super().__init__()
         | 
| 27 28 |  | 
| 29 | 
            +
                    self._lock = threading.RLock()
         | 
| 30 | 
            +
             | 
| 28 31 | 
             
                    self._module_remap = module_remap or {}
         | 
| 29 32 | 
             
                    self._module_reverse_remap = {v: k for k, v in self._module_remap.items()}
         | 
| 30 33 |  | 
| @@ -56,7 +59,7 @@ class ManifestLoader: | |
| 56 59 |  | 
| 57 60 | 
             
                #
         | 
| 58 61 |  | 
| 59 | 
            -
                def  | 
| 62 | 
            +
                def _load_cls(self, key: str) -> type:
         | 
| 60 63 | 
             
                    try:
         | 
| 61 64 | 
             
                        return self._cls_cache[key]
         | 
| 62 65 | 
             
                    except KeyError:
         | 
| @@ -83,7 +86,13 @@ class ManifestLoader: | |
| 83 86 | 
             
                    self._cls_cache[key] = cls
         | 
| 84 87 | 
             
                    return cls
         | 
| 85 88 |  | 
| 86 | 
            -
                def  | 
| 89 | 
            +
                def load_cls(self, key: str) -> type:
         | 
| 90 | 
            +
                    with self._lock:
         | 
| 91 | 
            +
                        return self._load_cls(key)
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                #
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                def _load_contents(self, obj: ta.Any, pkg_name: str) -> ta.Sequence[Manifest]:
         | 
| 87 96 | 
             
                    if not isinstance(obj, (list, tuple)):
         | 
| 88 97 | 
             
                        raise TypeError(obj)
         | 
| 89 98 |  | 
| @@ -104,7 +113,13 @@ class ManifestLoader: | |
| 104 113 |  | 
| 105 114 | 
             
                    return lst
         | 
| 106 115 |  | 
| 107 | 
            -
                def  | 
| 116 | 
            +
                def load_contents(self, obj: ta.Any, pkg_name: str) -> ta.Sequence[Manifest]:
         | 
| 117 | 
            +
                    with self._lock:
         | 
| 118 | 
            +
                        return self.load_contents(obj, pkg_name)
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                #
         | 
| 121 | 
            +
             | 
| 122 | 
            +
                def _load_raw(self, pkg_name: str) -> ta.Optional[ta.Sequence[Manifest]]:
         | 
| 108 123 | 
             
                    try:
         | 
| 109 124 | 
             
                        return self._raw_cache[pkg_name]
         | 
| 110 125 | 
             
                    except KeyError:
         | 
| @@ -120,12 +135,18 @@ class ManifestLoader: | |
| 120 135 | 
             
                    if not isinstance(obj, (list, tuple)):
         | 
| 121 136 | 
             
                        raise TypeError(obj)
         | 
| 122 137 |  | 
| 123 | 
            -
                    lst = self. | 
| 138 | 
            +
                    lst = self._load_contents(obj, pkg_name)
         | 
| 124 139 |  | 
| 125 140 | 
             
                    self._raw_cache[pkg_name] = lst
         | 
| 126 141 | 
             
                    return lst
         | 
| 127 142 |  | 
| 128 | 
            -
                def  | 
| 143 | 
            +
                def load_raw(self, pkg_name: str) -> ta.Optional[ta.Sequence[Manifest]]:
         | 
| 144 | 
            +
                    with self._lock:
         | 
| 145 | 
            +
                        return self._load_raw(pkg_name)
         | 
| 146 | 
            +
             | 
| 147 | 
            +
                #
         | 
| 148 | 
            +
             | 
| 149 | 
            +
                def _load(
         | 
| 129 150 | 
             
                        self,
         | 
| 130 151 | 
             
                        *pkg_names: str,
         | 
| 131 152 | 
             
                        only: ta.Optional[ta.Iterable[type]] = None,
         | 
| @@ -149,7 +170,7 @@ class ManifestLoader: | |
| 149 170 | 
             
                            if only_keys is not None and key not in only_keys:
         | 
| 150 171 | 
             
                                continue
         | 
| 151 172 |  | 
| 152 | 
            -
                            cls = self. | 
| 173 | 
            +
                            cls = self._load_cls(key)
         | 
| 153 174 | 
             
                            value = cls(**value_dct)
         | 
| 154 175 |  | 
| 155 176 | 
             
                            manifest = dc.replace(manifest, value=value)
         | 
| @@ -157,6 +178,17 @@ class ManifestLoader: | |
| 157 178 |  | 
| 158 179 | 
             
                    return lst
         | 
| 159 180 |  | 
| 181 | 
            +
                def load(
         | 
| 182 | 
            +
                        self,
         | 
| 183 | 
            +
                        *pkg_names: str,
         | 
| 184 | 
            +
                        only: ta.Optional[ta.Iterable[type]] = None,
         | 
| 185 | 
            +
                ) -> ta.Sequence[Manifest]:
         | 
| 186 | 
            +
                    with self._lock:
         | 
| 187 | 
            +
                        return self._load(
         | 
| 188 | 
            +
                            *pkg_names,
         | 
| 189 | 
            +
                            only=only,
         | 
| 190 | 
            +
                        )
         | 
| 191 | 
            +
             | 
| 160 192 | 
             
                #
         | 
| 161 193 |  | 
| 162 194 | 
             
                ENTRY_POINT_GROUP = 'omlish.manifests'
         | 
| @@ -169,3 +201,9 @@ class ManifestLoader: | |
| 169 201 | 
             
                        ep.value
         | 
| 170 202 | 
             
                        for ep in importlib.metadata.entry_points(group=self.ENTRY_POINT_GROUP)
         | 
| 171 203 | 
             
                    ]
         | 
| 204 | 
            +
             | 
| 205 | 
            +
             | 
| 206 | 
            +
            ##
         | 
| 207 | 
            +
             | 
| 208 | 
            +
             | 
| 209 | 
            +
            MANIFEST_LOADER = ManifestLoader()
         | 
| @@ -1,5 +1,5 @@ | |
| 1 | 
            -
            omlish/.manifests.json,sha256= | 
| 2 | 
            -
            omlish/__about__.py,sha256= | 
| 1 | 
            +
            omlish/.manifests.json,sha256=Z-OzsisX-uiidgvNIQIrN92nEPRucZUOhM5lIc52LMY,6568
         | 
| 2 | 
            +
            omlish/__about__.py,sha256=Y07EsFN7CjY1AAm1qpNSzRY2us9VYdNOAdlHXLTfjcs,3409
         | 
| 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
         | 
| @@ -109,6 +109,14 @@ omlish/bootstrap/harness.py,sha256=VW8YP-yENGyXIuJ8GL_xintArF13nafwpz-iAghPt34,1 | |
| 109 109 | 
             
            omlish/bootstrap/main.py,sha256=yZhOHDDlj4xB5a89dRdT8z58FsqqnpoBg1-tvY2CJe4,5903
         | 
| 110 110 | 
             
            omlish/bootstrap/marshal.py,sha256=ZxdAeMNd2qXRZ1HUK89HmEhz8tqlS9OduW34QBscKw0,516
         | 
| 111 111 | 
             
            omlish/bootstrap/sys.py,sha256=aqMzxZa_lPj78cgz4guYZAkjT6En32e2LptfEo20NIM,8769
         | 
| 112 | 
            +
            omlish/codecs/__init__.py,sha256=dtDRfvZRLM6KSfT0y9GRRPu8kjkMaBM1ItrfQTa84Vk,854
         | 
| 113 | 
            +
            omlish/codecs/base.py,sha256=90e4PJKtBj9AFw0IXlhVLM1jlrDgJmDD-Zy0GFkth1c,2078
         | 
| 114 | 
            +
            omlish/codecs/bytes.py,sha256=jlZ87OmZ52HhQDNyL87R3OIviK2qV5iU2jZYOTOLWjk,2157
         | 
| 115 | 
            +
            omlish/codecs/chain.py,sha256=DrBi5vbaFfObfoppo6alwOmyW2XbrH2051cjExwr2Gs,527
         | 
| 116 | 
            +
            omlish/codecs/funcs.py,sha256=bMcARQUziSiGocaERbfCR71sVw-BcmKfQEns30y_bEc,590
         | 
| 117 | 
            +
            omlish/codecs/registry.py,sha256=8ySUG-kwGJoUN1HCRnz8VjcykB0wlIzoWF5WTAE1ny0,3860
         | 
| 118 | 
            +
            omlish/codecs/standard.py,sha256=eiZ4u9ep0XrA4Z_D1zJI0vmWyuN8HLrX4Se_r_Cq_ZM,60
         | 
| 119 | 
            +
            omlish/codecs/text.py,sha256=D8uy-3_XFwUSlygPQsHP8c2t5ZCgebQS0hv5CWoDXCI,5728
         | 
| 112 120 | 
             
            omlish/collections/__init__.py,sha256=zeUvcAz073ekko37QKya6sElTMfKTuF1bKrdbMtaRpI,2142
         | 
| 113 121 | 
             
            omlish/collections/abc.py,sha256=sP7BpTVhx6s6C59mTFeosBi4rHOWC6tbFBYbxdZmvh0,2365
         | 
| 114 122 | 
             
            omlish/collections/coerce.py,sha256=g68ROb_-5HgH-vI8612mU2S0FZ8-wp2ZHK5_Zy_kVC0,7037
         | 
| @@ -195,11 +203,17 @@ omlish/docker/hub.py,sha256=7LIuJGdA-N1Y1dmo50ynKM1KUTcnQM_5XbtPbdT_QLU,3940 | |
| 195 203 | 
             
            omlish/docker/manifests.py,sha256=LR4FpOGNUT3bZQ-gTjB6r_-1C3YiG30QvevZjrsVUQM,7068
         | 
| 196 204 | 
             
            omlish/docker/timebomb.py,sha256=A_pgIDaXKsQwPiikrCTgIJl91gwYqkPGFY6j-Naq07Q,342
         | 
| 197 205 | 
             
            omlish/formats/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 206 | 
            +
            omlish/formats/cbor.py,sha256=o_Hbe4kthO9CeXK-FySrw0dHVlrdyTo2Y8PpGRDfZ3c,514
         | 
| 207 | 
            +
            omlish/formats/codecs.py,sha256=6AbKIz_gl_om36-7qsutybYzK8cJP3LzwC9YJlwCPOA,1590
         | 
| 198 208 | 
             
            omlish/formats/dotenv.py,sha256=qoDG4Ayu7B-8LjBBhcmNiLZW0_9LgCi3Ri2aPo9DEQ8,19314
         | 
| 209 | 
            +
            omlish/formats/json5.py,sha256=odpZIShlUpv19aACWe58SoMPcv0AHKIa6zSMjlKgaMI,515
         | 
| 210 | 
            +
            omlish/formats/pickle.py,sha256=jdp4E9WH9qVPBE3sSqbqDtUo18RbTSIiSpSzJ-IEVZw,529
         | 
| 199 211 | 
             
            omlish/formats/props.py,sha256=cek3JLFLIrpE76gvs8rs_B8yF4SpY8ooDH8apWsquwE,18953
         | 
| 212 | 
            +
            omlish/formats/toml.py,sha256=AhpVNAy87eBohBCsvIvwH2ucASWxnWXMEsMH8zB7rpI,340
         | 
| 200 213 | 
             
            omlish/formats/xml.py,sha256=ggiOwSERt4d9XmZwLZiDIh5qnFJS4jdmow9m9_9USps,1491
         | 
| 201 | 
            -
            omlish/formats/yaml.py,sha256= | 
| 214 | 
            +
            omlish/formats/yaml.py,sha256=2-ULW2fm82cA2L14UNbSHZwYr7b6W3CxjAbIiNnfHz8,7185
         | 
| 202 215 | 
             
            omlish/formats/json/__init__.py,sha256=y7T-Jm-7FuQFzb-6uedky0ZhBaKtCKzcu291juXfiWI,669
         | 
| 216 | 
            +
            omlish/formats/json/codecs.py,sha256=0eRmbHPDq1XELuPcgl_vTqJoaHMuCoUitd0GYCntpTY,800
         | 
| 203 217 | 
             
            omlish/formats/json/consts.py,sha256=A0cTAGGLyjo-gcYIQrL4JIaardI0yPMhQoNmh42BaRg,387
         | 
| 204 218 | 
             
            omlish/formats/json/encoding.py,sha256=O4iIWle7W_-RwpOvJNlqOfkbnDyiQHexV5Za4hlrFzw,497
         | 
| 205 219 | 
             
            omlish/formats/json/json.py,sha256=Mdqv2vdMi7gp96eV0BIYH5UdWpjWfsh-tSMZeywG-08,331
         | 
| @@ -293,14 +307,15 @@ omlish/io/compress/__init__.py,sha256=qV-aDfPWykTMYcoQmE8THZ4KFDRzqwN3QPPNEJVarX | |
| 293 307 | 
             
            omlish/io/compress/abc.py,sha256=P9YoQX8XYoq2UfBsinKLUuwwqV1ODUIJzjTraRWGF1M,3090
         | 
| 294 308 | 
             
            omlish/io/compress/adapters.py,sha256=DQvbiqTiaVE-GsawpOpUTX07Gjg125Iuwd6IhjuSaxE,6180
         | 
| 295 309 | 
             
            omlish/io/compress/base.py,sha256=yx8ifzs_j8y66gMCQcssjZ936NNBFhYn_kBRwNh3SWQ,647
         | 
| 296 | 
            -
            omlish/io/compress/brotli.py,sha256= | 
| 297 | 
            -
            omlish/io/compress/bz2.py,sha256= | 
| 298 | 
            -
            omlish/io/compress/ | 
| 299 | 
            -
            omlish/io/compress/ | 
| 300 | 
            -
            omlish/io/compress/ | 
| 301 | 
            -
            omlish/io/compress/ | 
| 302 | 
            -
            omlish/io/compress/ | 
| 303 | 
            -
            omlish/io/compress/ | 
| 310 | 
            +
            omlish/io/compress/brotli.py,sha256=Q2t9uRqBEgRyJCSPsTaJv5w7d-rhsjDMluA4VRBHa_A,1182
         | 
| 311 | 
            +
            omlish/io/compress/bz2.py,sha256=2ULaZwcpAkHKV-JargrLoXgL9G-gxrVnPqE_pGqNUrg,1566
         | 
| 312 | 
            +
            omlish/io/compress/codecs.py,sha256=e6jCYVfUbanUzvkWW9IHDK6SbG6dwRLAztTADCWnWEQ,1076
         | 
| 313 | 
            +
            omlish/io/compress/gzip.py,sha256=ZKZdg0wg_nIgFdkfemOv8xZpHneBXZAiCH0n6gIibWY,12281
         | 
| 314 | 
            +
            omlish/io/compress/lz4.py,sha256=4kppXZCXpSAQw6wJvCs9LLHFzukekENja7RiwmN8uMc,2790
         | 
| 315 | 
            +
            omlish/io/compress/lzma.py,sha256=4bWNKk7uTFiRT_HogW2ZldgaNy1IukmqfVDVkf5M2Ok,2501
         | 
| 316 | 
            +
            omlish/io/compress/snappy.py,sha256=JFoH_9l0Tr9AGaQ0jHRiP4TsFnG071l27mprCBcqt4c,704
         | 
| 317 | 
            +
            omlish/io/compress/zlib.py,sha256=BQ0BvX-wEN-0NwktcqFECYHTGwVe-VHCVCNarspGQ8o,2396
         | 
| 318 | 
            +
            omlish/io/compress/zstd.py,sha256=wik_HWLq_8fGAJgGyMGq9fhFQovot1aCH4lwMpihQmg,949
         | 
| 304 319 | 
             
            omlish/io/fdio/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
         | 
| 305 320 | 
             
            omlish/io/fdio/handlers.py,sha256=OOQhiazbhNMwxLwyzf8KUQrBQSuHIm-UqAMpXmmHGFQ,1344
         | 
| 306 321 | 
             
            omlish/io/fdio/kqueue.py,sha256=YgGBQibkAUYODYDiGl7Enjtx1oQsJXuDsBLBXgqlLQw,3832
         | 
| @@ -311,7 +326,7 @@ omlish/io/generators/consts.py,sha256=4r6IMLBMic6MJHVn9UiORIkkPAuxsqtzFT3KV0fatC | |
| 311 326 | 
             
            omlish/io/generators/direct.py,sha256=A9VJB1rNKU3l-NatpYIwyCLI3R_ybGglmdx6sAtoTo4,324
         | 
| 312 327 | 
             
            omlish/io/generators/readers.py,sha256=MolTFCzcnD5XoP0su0YUNHJ0xlHC3KTihvWAi75y8Bo,4336
         | 
| 313 328 | 
             
            omlish/io/generators/stepped.py,sha256=wk4vDqOKi_Tr4qMY_FxIGO5dF3Ob-3Uh8UcV_9UYrAg,4677
         | 
| 314 | 
            -
            omlish/lang/__init__.py,sha256= | 
| 329 | 
            +
            omlish/lang/__init__.py,sha256=wMfsQjBFNsZ_Y4352iEr0DlEnNebf26JmR4ETtDsQow,3948
         | 
| 315 330 | 
             
            omlish/lang/cached.py,sha256=92TvRZQ6sWlm7dNn4hgl7aWKbX0J1XUEo3DRjBpgVQk,7834
         | 
| 316 331 | 
             
            omlish/lang/clsdct.py,sha256=AjtIWLlx2E6D5rC97zQ3Lwq2SOMkbg08pdO_AxpzEHI,1744
         | 
| 317 332 | 
             
            omlish/lang/cmp.py,sha256=5vbzWWbqdzDmNKAGL19z6ZfUKe5Ci49e-Oegf9f4BsE,1346
         | 
| @@ -319,7 +334,7 @@ omlish/lang/contextmanagers.py,sha256=NEwaTLQMfhKawD5x_0HgI2RpeLXbMa5r9NqWqfDnUX | |
| 319 334 | 
             
            omlish/lang/datetimes.py,sha256=ehI_DhQRM-bDxAavnp470XcekbbXc4Gdw9y1KpHDJT0,223
         | 
| 320 335 | 
             
            omlish/lang/descriptors.py,sha256=RRBbkMgTzg82fFFE4D0muqobpM-ZZaOta6yB1lpX3s8,6617
         | 
| 321 336 | 
             
            omlish/lang/exceptions.py,sha256=qJBo3NU1mOWWm-NhQUHCY5feYXR3arZVyEHinLsmRH4,47
         | 
| 322 | 
            -
            omlish/lang/functions.py,sha256= | 
| 337 | 
            +
            omlish/lang/functions.py,sha256=t9nsnWwhsibG0w908VMx-_pRM5tZfruE3faPxrCWTbI,4160
         | 
| 323 338 | 
             
            omlish/lang/generators.py,sha256=5LX17j-Ej3QXhwBgZvRTm_dq3n9veC4IOUcVmvSu2vU,5243
         | 
| 324 339 | 
             
            omlish/lang/imports.py,sha256=TXLbj2F53LsmozlM05bQhvow9kEgWJOi9qYKsnm2D18,9258
         | 
| 325 340 | 
             
            omlish/lang/iterables.py,sha256=mE-XyhqMe9LztBf5Y36SDSO0Gtu8rIKmE-hcNvhhOX8,2085
         | 
| @@ -375,7 +390,7 @@ omlish/logs/proxy.py,sha256=A-ROPUUAlF397qTbEqhel6YhQMstNuXL3Xmts7w9dAo,2347 | |
| 375 390 | 
             
            omlish/logs/standard.py,sha256=BVFn8pFyafxuco1sjA5COYxX5Q0Wv80_OE9zo6uDp2Q,3164
         | 
| 376 391 | 
             
            omlish/logs/utils.py,sha256=mzHrZ9ji75p5A8qR29eUr05CBAHMb8J753MSkID_VaQ,393
         | 
| 377 392 | 
             
            omlish/manifests/__init__.py,sha256=P2B0dpT8D7l5lJwRGPA92IcQj6oeXfd90X5-q9BJrKg,51
         | 
| 378 | 
            -
            omlish/manifests/load.py,sha256= | 
| 393 | 
            +
            omlish/manifests/load.py,sha256=LrWAvBfdzDkFdLuVwfw2RwFvLjxx-rvfkpU9eBsWeIc,5626
         | 
| 379 394 | 
             
            omlish/manifests/types.py,sha256=d8bv5tknCJqclRfxCpao_8XxHo2yofhLpVHQTB-MfNw,260
         | 
| 380 395 | 
             
            omlish/marshal/__init__.py,sha256=iVA7n31L08Bdub6HKPvYOXVvDhk2CMA6rPeKDL_u1to,2298
         | 
| 381 396 | 
             
            omlish/marshal/any.py,sha256=e82OyYK3Emm1P1ClnsnxP7fIWC2iNVyW0H5nK4mLmWM,779
         | 
| @@ -535,9 +550,9 @@ omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,329 | |
| 535 550 | 
             
            omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
         | 
| 536 551 | 
             
            omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
         | 
| 537 552 | 
             
            omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
         | 
| 538 | 
            -
            omlish-0.0.0. | 
| 539 | 
            -
            omlish-0.0.0. | 
| 540 | 
            -
            omlish-0.0.0. | 
| 541 | 
            -
            omlish-0.0.0. | 
| 542 | 
            -
            omlish-0.0.0. | 
| 543 | 
            -
            omlish-0.0.0. | 
| 553 | 
            +
            omlish-0.0.0.dev163.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
         | 
| 554 | 
            +
            omlish-0.0.0.dev163.dist-info/METADATA,sha256=CbI3Uq6iTFyvnBAKSWdpADOUvmHFsUkfMV5rnHiOOio,4264
         | 
| 555 | 
            +
            omlish-0.0.0.dev163.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
         | 
| 556 | 
            +
            omlish-0.0.0.dev163.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
         | 
| 557 | 
            +
            omlish-0.0.0.dev163.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
         | 
| 558 | 
            +
            omlish-0.0.0.dev163.dist-info/RECORD,,
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         |