omlish 0.0.0.dev148__py3-none-any.whl → 0.0.0.dev150__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- omlish/__about__.py +2 -2
- omlish/argparse/all.py +45 -0
- omlish/{argparse.py → argparse/cli.py} +59 -99
- omlish/check.py +49 -462
- omlish/http/__init__.py +0 -48
- omlish/http/all.py +48 -0
- omlish/{lite/http → http}/coroserver.py +11 -12
- omlish/{lite/http → http}/handlers.py +2 -1
- omlish/{lite/http → http}/parsing.py +1 -0
- omlish/{lite/http → http}/versions.py +1 -0
- omlish/io/__init__.py +0 -3
- omlish/{lite/io.py → io/buffers.py} +8 -9
- omlish/{lite → io}/fdio/corohttp.py +13 -16
- omlish/{lite → io}/fdio/handlers.py +3 -3
- omlish/lite/asyncio/subprocesses.py +9 -12
- omlish/lite/check.py +438 -75
- omlish/lite/contextmanagers.py +3 -4
- omlish/lite/inject.py +12 -16
- omlish/lite/marshal.py +7 -8
- omlish/lite/socketserver.py +2 -2
- {omlish-0.0.0.dev148.dist-info → omlish-0.0.0.dev150.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev148.dist-info → omlish-0.0.0.dev150.dist-info}/RECORD +31 -29
- /omlish/{lite/fdio → argparse}/__init__.py +0 -0
- /omlish/{lite/http → io/fdio}/__init__.py +0 -0
- /omlish/{lite → io}/fdio/kqueue.py +0 -0
- /omlish/{lite → io}/fdio/manager.py +0 -0
- /omlish/{lite → io}/fdio/pollers.py +0 -0
- {omlish-0.0.0.dev148.dist-info → omlish-0.0.0.dev150.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev148.dist-info → omlish-0.0.0.dev150.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev148.dist-info → omlish-0.0.0.dev150.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev148.dist-info → omlish-0.0.0.dev150.dist-info}/top_level.txt +0 -0
| @@ -1,4 +1,5 @@ | |
| 1 1 | 
             
            # ruff: noqa: UP006 UP007
         | 
| 2 | 
            +
            # @omlish-lite
         | 
| 2 3 | 
             
            # PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
         | 
| 3 4 | 
             
            # --------------------------------------------
         | 
| 4 5 | 
             
            #
         | 
| @@ -62,11 +63,9 @@ import textwrap | |
| 62 63 | 
             
            import time
         | 
| 63 64 | 
             
            import typing as ta
         | 
| 64 65 |  | 
| 65 | 
            -
            from ..check import  | 
| 66 | 
            -
            from .. | 
| 67 | 
            -
            from .. | 
| 68 | 
            -
            from ..socket import SocketAddress
         | 
| 69 | 
            -
            from ..socket import SocketHandler
         | 
| 66 | 
            +
            from ..lite.check import check
         | 
| 67 | 
            +
            from ..lite.socket import SocketAddress
         | 
| 68 | 
            +
            from ..lite.socket import SocketHandler
         | 
| 70 69 | 
             
            from .handlers import HttpHandler
         | 
| 71 70 | 
             
            from .handlers import HttpHandlerRequest
         | 
| 72 71 | 
             
            from .handlers import UnsupportedMethodHttpHandlerError
         | 
| @@ -406,13 +405,13 @@ class CoroHttpServer: | |
| 406 405 | 
             
                                yield o
         | 
| 407 406 |  | 
| 408 407 | 
             
                            elif isinstance(o, self.AnyReadIo):
         | 
| 409 | 
            -
                                i =  | 
| 408 | 
            +
                                i = check.isinstance((yield o), bytes)
         | 
| 410 409 |  | 
| 411 410 | 
             
                            elif isinstance(o, self._Response):
         | 
| 412 411 | 
             
                                i = None
         | 
| 413 412 | 
             
                                r = self._preprocess_response(o)
         | 
| 414 413 | 
             
                                b = self._build_response_bytes(r)
         | 
| 415 | 
            -
                                 | 
| 414 | 
            +
                                check.none((yield self.WriteIo(b)))
         | 
| 416 415 |  | 
| 417 416 | 
             
                            else:
         | 
| 418 417 | 
             
                                raise TypeError(o)
         | 
| @@ -435,7 +434,7 @@ class CoroHttpServer: | |
| 435 434 | 
             
                    sz = next(gen)
         | 
| 436 435 | 
             
                    while True:
         | 
| 437 436 | 
             
                        try:
         | 
| 438 | 
            -
                            line =  | 
| 437 | 
            +
                            line = check.isinstance((yield self.ReadLineIo(sz)), bytes)
         | 
| 439 438 | 
             
                            sz = gen.send(line)
         | 
| 440 439 | 
             
                        except StopIteration as e:
         | 
| 441 440 | 
             
                            parsed = e.value
         | 
| @@ -454,11 +453,11 @@ class CoroHttpServer: | |
| 454 453 | 
             
                        yield self._build_error_response(err)
         | 
| 455 454 | 
             
                        return
         | 
| 456 455 |  | 
| 457 | 
            -
                    parsed =  | 
| 456 | 
            +
                    parsed = check.isinstance(parsed, ParsedHttpRequest)
         | 
| 458 457 |  | 
| 459 458 | 
             
                    # Log
         | 
| 460 459 |  | 
| 461 | 
            -
                     | 
| 460 | 
            +
                    check.none((yield self.ParsedRequestLogIo(parsed)))
         | 
| 462 461 |  | 
| 463 462 | 
             
                    # Handle CONTINUE
         | 
| 464 463 |  | 
| @@ -474,7 +473,7 @@ class CoroHttpServer: | |
| 474 473 |  | 
| 475 474 | 
             
                    request_data: ta.Optional[bytes]
         | 
| 476 475 | 
             
                    if (cl := parsed.headers.get('Content-Length')) is not None:
         | 
| 477 | 
            -
                        request_data =  | 
| 476 | 
            +
                        request_data = check.isinstance((yield self.ReadIo(int(cl))), bytes)
         | 
| 478 477 | 
             
                    else:
         | 
| 479 478 | 
             
                        request_data = None
         | 
| 480 479 |  | 
| @@ -482,7 +481,7 @@ class CoroHttpServer: | |
| 482 481 |  | 
| 483 482 | 
             
                    handler_request = HttpHandlerRequest(
         | 
| 484 483 | 
             
                        client_address=self._client_address,
         | 
| 485 | 
            -
                        method= | 
| 484 | 
            +
                        method=check.not_none(parsed.method),
         | 
| 486 485 | 
             
                        path=parsed.path,
         | 
| 487 486 | 
             
                        headers=parsed.headers,
         | 
| 488 487 | 
             
                        data=request_data,
         | 
    
        omlish/io/__init__.py
    CHANGED
    
    
| @@ -1,11 +1,10 @@ | |
| 1 1 | 
             
            # ruff: noqa: UP007
         | 
| 2 | 
            +
            # @omlish-lite
         | 
| 2 3 | 
             
            import io
         | 
| 3 4 | 
             
            import typing as ta
         | 
| 4 5 |  | 
| 5 | 
            -
            from .check import  | 
| 6 | 
            -
            from . | 
| 7 | 
            -
            from .check import check_not_none
         | 
| 8 | 
            -
            from .strings import attr_repr
         | 
| 6 | 
            +
            from ..lite.check import check
         | 
| 7 | 
            +
            from ..lite.strings import attr_repr
         | 
| 9 8 |  | 
| 10 9 |  | 
| 11 10 | 
             
            class DelimitingBuffer:
         | 
| @@ -39,7 +38,7 @@ class DelimitingBuffer: | |
| 39 38 | 
             
                ) -> None:
         | 
| 40 39 | 
             
                    super().__init__()
         | 
| 41 40 |  | 
| 42 | 
            -
                    self._delimiters = frozenset( | 
| 41 | 
            +
                    self._delimiters = frozenset(check.isinstance(d, int) for d in delimiters)
         | 
| 43 42 | 
             
                    self._keep_ends = keep_ends
         | 
| 44 43 | 
             
                    self._max_size = max_size
         | 
| 45 44 |  | 
| @@ -70,7 +69,7 @@ class DelimitingBuffer: | |
| 70 69 | 
             
                    return r
         | 
| 71 70 |  | 
| 72 71 | 
             
                def _append_and_reset(self, chunk: bytes) -> bytes:
         | 
| 73 | 
            -
                    buf =  | 
| 72 | 
            +
                    buf = check.not_none(self._buf)
         | 
| 74 73 | 
             
                    if not buf.tell():
         | 
| 75 74 | 
             
                        return chunk
         | 
| 76 75 |  | 
| @@ -192,7 +191,7 @@ class IncrementalWriteBuffer: | |
| 192 191 | 
             
                ) -> None:
         | 
| 193 192 | 
             
                    super().__init__()
         | 
| 194 193 |  | 
| 195 | 
            -
                     | 
| 194 | 
            +
                    check.not_empty(data)
         | 
| 196 195 | 
             
                    self._len = len(data)
         | 
| 197 196 | 
             
                    self._write_size = write_size
         | 
| 198 197 |  | 
| @@ -207,11 +206,11 @@ class IncrementalWriteBuffer: | |
| 207 206 | 
             
                    return self._len - self._pos
         | 
| 208 207 |  | 
| 209 208 | 
             
                def write(self, fn: ta.Callable[[bytes], int]) -> int:
         | 
| 210 | 
            -
                    lst =  | 
| 209 | 
            +
                    lst = check.not_empty(self._lst)
         | 
| 211 210 |  | 
| 212 211 | 
             
                    t = 0
         | 
| 213 212 | 
             
                    for i, d in enumerate(lst):  # noqa
         | 
| 214 | 
            -
                        n = fn( | 
| 213 | 
            +
                        n = fn(check.not_empty(d))
         | 
| 215 214 | 
             
                        if not n:
         | 
| 216 215 | 
             
                            break
         | 
| 217 216 | 
             
                        t += n
         | 
| @@ -2,15 +2,12 @@ | |
| 2 2 | 
             
            import socket
         | 
| 3 3 | 
             
            import typing as ta
         | 
| 4 4 |  | 
| 5 | 
            -
            from  | 
| 6 | 
            -
            from  | 
| 7 | 
            -
            from  | 
| 8 | 
            -
            from  | 
| 9 | 
            -
            from .. | 
| 10 | 
            -
            from .. | 
| 11 | 
            -
            from ..io import IncrementalWriteBuffer
         | 
| 12 | 
            -
            from ..io import ReadableListBuffer
         | 
| 13 | 
            -
            from ..socket import SocketAddress
         | 
| 5 | 
            +
            from ...http.coroserver import CoroHttpServer
         | 
| 6 | 
            +
            from ...http.handlers import HttpHandler
         | 
| 7 | 
            +
            from ...lite.check import check
         | 
| 8 | 
            +
            from ...lite.socket import SocketAddress
         | 
| 9 | 
            +
            from ..buffers import IncrementalWriteBuffer
         | 
| 10 | 
            +
            from ..buffers import ReadableListBuffer
         | 
| 14 11 | 
             
            from .handlers import SocketFdioHandler
         | 
| 15 12 |  | 
| 16 13 |  | 
| @@ -25,7 +22,7 @@ class CoroHttpServerConnectionFdioHandler(SocketFdioHandler): | |
| 25 22 | 
             
                        write_size: int = 0x10000,
         | 
| 26 23 | 
             
                        log_handler: ta.Optional[ta.Callable[[CoroHttpServer, CoroHttpServer.AnyLogIo], None]] = None,
         | 
| 27 24 | 
             
                ) -> None:
         | 
| 28 | 
            -
                     | 
| 25 | 
            +
                    check.state(not sock.getblocking())
         | 
| 29 26 |  | 
| 30 27 | 
             
                    super().__init__(addr, sock)
         | 
| 31 28 |  | 
| @@ -49,7 +46,7 @@ class CoroHttpServerConnectionFdioHandler(SocketFdioHandler): | |
| 49 46 | 
             
                #
         | 
| 50 47 |  | 
| 51 48 | 
             
                def _next_io(self) -> None:  # noqa
         | 
| 52 | 
            -
                    coro =  | 
| 49 | 
            +
                    coro = check.not_none(self._srv_coro)
         | 
| 53 50 |  | 
| 54 51 | 
             
                    d: bytes | None = None
         | 
| 55 52 | 
             
                    o = self._cur_io
         | 
| @@ -82,7 +79,7 @@ class CoroHttpServerConnectionFdioHandler(SocketFdioHandler): | |
| 82 79 | 
             
                            o = None
         | 
| 83 80 |  | 
| 84 81 | 
             
                        elif isinstance(o, CoroHttpServer.WriteIo):
         | 
| 85 | 
            -
                             | 
| 82 | 
            +
                            check.none(self._write_buf)
         | 
| 86 83 | 
             
                            self._write_buf = IncrementalWriteBuffer(o.data, write_size=self._write_size)
         | 
| 87 84 | 
             
                            break
         | 
| 88 85 |  | 
| @@ -103,7 +100,7 @@ class CoroHttpServerConnectionFdioHandler(SocketFdioHandler): | |
| 103 100 |  | 
| 104 101 | 
             
                def on_readable(self) -> None:
         | 
| 105 102 | 
             
                    try:
         | 
| 106 | 
            -
                        buf =  | 
| 103 | 
            +
                        buf = check.not_none(self._sock).recv(self._read_size)
         | 
| 107 104 | 
             
                    except BlockingIOError:
         | 
| 108 105 | 
             
                        return
         | 
| 109 106 | 
             
                    except ConnectionResetError:
         | 
| @@ -119,12 +116,12 @@ class CoroHttpServerConnectionFdioHandler(SocketFdioHandler): | |
| 119 116 | 
             
                        self._next_io()
         | 
| 120 117 |  | 
| 121 118 | 
             
                def on_writable(self) -> None:
         | 
| 122 | 
            -
                     | 
| 123 | 
            -
                    wb =  | 
| 119 | 
            +
                    check.isinstance(self._cur_io, CoroHttpServer.WriteIo)
         | 
| 120 | 
            +
                    wb = check.not_none(self._write_buf)
         | 
| 124 121 | 
             
                    while wb.rem > 0:
         | 
| 125 122 | 
             
                        def send(d: bytes) -> int:
         | 
| 126 123 | 
             
                            try:
         | 
| 127 | 
            -
                                return  | 
| 124 | 
            +
                                return check.not_none(self._sock).send(d)
         | 
| 128 125 | 
             
                            except ConnectionResetError:
         | 
| 129 126 | 
             
                                self.close()
         | 
| 130 127 | 
             
                                return 0
         | 
| @@ -3,8 +3,8 @@ import abc | |
| 3 3 | 
             
            import socket
         | 
| 4 4 | 
             
            import typing as ta
         | 
| 5 5 |  | 
| 6 | 
            -
            from  | 
| 7 | 
            -
            from  | 
| 6 | 
            +
            from ...lite.check import check
         | 
| 7 | 
            +
            from ...lite.socket import SocketAddress
         | 
| 8 8 |  | 
| 9 9 |  | 
| 10 10 | 
             
            class FdioHandler(abc.ABC):
         | 
| @@ -55,7 +55,7 @@ class SocketFdioHandler(FdioHandler, abc.ABC): | |
| 55 55 | 
             
                    self._sock: ta.Optional[socket.socket] = sock
         | 
| 56 56 |  | 
| 57 57 | 
             
                def fd(self) -> int:
         | 
| 58 | 
            -
                    return  | 
| 58 | 
            +
                    return check.not_none(self._sock).fileno()
         | 
| 59 59 |  | 
| 60 60 | 
             
                @property
         | 
| 61 61 | 
             
                def closed(self) -> bool:
         | 
| @@ -8,10 +8,7 @@ import subprocess | |
| 8 8 | 
             
            import sys
         | 
| 9 9 | 
             
            import typing as ta
         | 
| 10 10 |  | 
| 11 | 
            -
            from ..check import  | 
| 12 | 
            -
            from ..check import check_isinstance
         | 
| 13 | 
            -
            from ..check import check_not_none
         | 
| 14 | 
            -
            from ..check import check_single
         | 
| 11 | 
            +
            from ..check import check
         | 
| 15 12 | 
             
            from ..logs import log
         | 
| 16 13 | 
             
            from ..subprocesses import DEFAULT_SUBPROCESS_TRY_EXCEPTIONS
         | 
| 17 14 | 
             
            from ..subprocesses import prepare_subprocess_invocation
         | 
| @@ -36,7 +33,7 @@ async def asyncio_subprocess_popen( | |
| 36 33 | 
             
                if shell:
         | 
| 37 34 | 
             
                    fac = functools.partial(
         | 
| 38 35 | 
             
                        asyncio.create_subprocess_shell,
         | 
| 39 | 
            -
                         | 
| 36 | 
            +
                        check.single(cmd),
         | 
| 40 37 | 
             
                    )
         | 
| 41 38 | 
             
                else:
         | 
| 42 39 | 
             
                    fac = functools.partial(
         | 
| @@ -76,7 +73,7 @@ class AsyncioProcessCommunicator: | |
| 76 73 | 
             
                    self._proc = proc
         | 
| 77 74 | 
             
                    self._loop = loop
         | 
| 78 75 |  | 
| 79 | 
            -
                    self._transport: asyncio.base_subprocess.BaseSubprocessTransport =  | 
| 76 | 
            +
                    self._transport: asyncio.base_subprocess.BaseSubprocessTransport = check.isinstance(
         | 
| 80 77 | 
             
                        proc._transport,  # type: ignore  # noqa
         | 
| 81 78 | 
             
                        asyncio.base_subprocess.BaseSubprocessTransport,
         | 
| 82 79 | 
             
                    )
         | 
| @@ -86,7 +83,7 @@ class AsyncioProcessCommunicator: | |
| 86 83 | 
             
                    return self._loop.get_debug()
         | 
| 87 84 |  | 
| 88 85 | 
             
                async def _feed_stdin(self, input: bytes) -> None:  # noqa
         | 
| 89 | 
            -
                    stdin =  | 
| 86 | 
            +
                    stdin = check.not_none(self._proc.stdin)
         | 
| 90 87 | 
             
                    try:
         | 
| 91 88 | 
             
                        if input is not None:
         | 
| 92 89 | 
             
                            stdin.write(input)
         | 
| @@ -110,13 +107,13 @@ class AsyncioProcessCommunicator: | |
| 110 107 | 
             
                    return None
         | 
| 111 108 |  | 
| 112 109 | 
             
                async def _read_stream(self, fd: int) -> bytes:
         | 
| 113 | 
            -
                    transport: ta.Any =  | 
| 110 | 
            +
                    transport: ta.Any = check.not_none(self._transport.get_pipe_transport(fd))
         | 
| 114 111 |  | 
| 115 112 | 
             
                    if fd == 2:
         | 
| 116 | 
            -
                        stream =  | 
| 113 | 
            +
                        stream = check.not_none(self._proc.stderr)
         | 
| 117 114 | 
             
                    else:
         | 
| 118 | 
            -
                         | 
| 119 | 
            -
                        stream =  | 
| 115 | 
            +
                        check.equal(fd, 1)
         | 
| 116 | 
            +
                        stream = check.not_none(self._proc.stdout)
         | 
| 120 117 |  | 
| 121 118 | 
             
                    if self._debug:
         | 
| 122 119 | 
             
                        name = 'stdout' if fd == 1 else 'stderr'
         | 
| @@ -236,7 +233,7 @@ async def asyncio_subprocess_check_output( | |
| 236 233 | 
             
                    **kwargs,
         | 
| 237 234 | 
             
                )
         | 
| 238 235 |  | 
| 239 | 
            -
                return  | 
| 236 | 
            +
                return check.not_none(stdout)
         | 
| 240 237 |  | 
| 241 238 |  | 
| 242 239 | 
             
            async def asyncio_subprocess_check_output_str(*args: str, **kwargs: ta.Any) -> str:
         |