ominfra 0.0.0.dev223__py3-none-any.whl → 0.0.0.dev225__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.
@@ -150,9 +150,6 @@ InjectorProviderFn = ta.Callable[['Injector'], ta.Any]
150
150
  InjectorProviderFnMap = ta.Mapping['InjectorKey', 'InjectorProviderFn']
151
151
  InjectorBindingOrBindings = ta.Union['InjectorBinding', 'InjectorBindings']
152
152
 
153
- # ../../omlish/sockets/handlers.py
154
- SocketHandler = ta.Callable[[SocketAddress, 'SocketIoPair'], None] # ta.TypeAlias
155
-
156
153
  # ../../omlish/http/handlers.py
157
154
  HttpHandler = ta.Callable[['HttpHandlerRequest'], 'HttpHandlerResponse'] # ta.TypeAlias
158
155
  HttpHandlerResponseData = ta.Union[bytes, 'HttpHandlerResponseStreamedData'] # ta.TypeAlias # noqa
@@ -2876,74 +2873,6 @@ class SocketAndAddress(ta.NamedTuple):
2876
2873
  return inner
2877
2874
 
2878
2875
 
2879
- ########################################
2880
- # ../../../omlish/sockets/io.py
2881
-
2882
-
2883
- ##
2884
-
2885
-
2886
- class SocketWriter(io.BufferedIOBase):
2887
- """
2888
- Simple writable BufferedIOBase implementation for a socket
2889
-
2890
- Does not hold data in a buffer, avoiding any need to call flush().
2891
- """
2892
-
2893
- def __init__(self, sock):
2894
- super().__init__()
2895
-
2896
- self._sock = sock
2897
-
2898
- def writable(self):
2899
- return True
2900
-
2901
- def write(self, b):
2902
- self._sock.sendall(b)
2903
- with memoryview(b) as view:
2904
- return view.nbytes
2905
-
2906
- def fileno(self):
2907
- return self._sock.fileno()
2908
-
2909
-
2910
- class SocketIoPair(ta.NamedTuple):
2911
- r: ta.BinaryIO
2912
- w: ta.BinaryIO
2913
-
2914
- @classmethod
2915
- def from_socket(
2916
- cls,
2917
- sock: socket.socket,
2918
- *,
2919
- r_buf_size: int = -1,
2920
- w_buf_size: int = 0,
2921
- ) -> 'SocketIoPair':
2922
- rf: ta.Any = sock.makefile('rb', r_buf_size)
2923
-
2924
- if w_buf_size:
2925
- wf: ta.Any = SocketWriter(sock)
2926
- else:
2927
- wf = sock.makefile('wb', w_buf_size)
2928
-
2929
- return cls(rf, wf)
2930
-
2931
-
2932
- ##
2933
-
2934
-
2935
- def close_socket_immediately(sock: socket.socket) -> None:
2936
- try:
2937
- # Explicitly shutdown. socket.close() merely releases the socket and waits for GC to perform the actual close.
2938
- sock.shutdown(socket.SHUT_WR)
2939
-
2940
- except OSError:
2941
- # Some platforms may raise ENOTCONN here
2942
- pass
2943
-
2944
- sock.close()
2945
-
2946
-
2947
2876
  ########################################
2948
2877
  # ../events.py
2949
2878
 
@@ -6426,19 +6355,6 @@ def journald_log_handler_factory(
6426
6355
  return logging.StreamHandler()
6427
6356
 
6428
6357
 
6429
- ########################################
6430
- # ../../../omlish/sockets/handlers.py
6431
-
6432
-
6433
- ##
6434
-
6435
-
6436
- class SocketHandler_(abc.ABC): # noqa
6437
- @abc.abstractmethod
6438
- def __call__(self, addr: SocketAddress, f: SocketIoPair) -> None:
6439
- raise NotImplementedError
6440
-
6441
-
6442
6358
  ########################################
6443
6359
  # ../configs.py
6444
6360
 
@@ -6908,11 +6824,14 @@ class HttpHandler_(abc.ABC): # noqa
6908
6824
  raise NotImplementedError
6909
6825
 
6910
6826
 
6827
+ ##
6828
+
6829
+
6911
6830
  @dc.dataclass(frozen=True)
6912
6831
  class LoggingHttpHandler(HttpHandler_):
6913
6832
  handler: HttpHandler
6914
6833
  log: logging.Logger
6915
- level: int = logging.INFO
6834
+ level: int = logging.DEBUG
6916
6835
 
6917
6836
  def __call__(self, req: HttpHandlerRequest) -> HttpHandlerResponse:
6918
6837
  self.log.log(self.level, '%r', req)
@@ -6921,6 +6840,54 @@ class LoggingHttpHandler(HttpHandler_):
6921
6840
  return resp
6922
6841
 
6923
6842
 
6843
+ ##
6844
+
6845
+
6846
+ @dc.dataclass(frozen=True)
6847
+ class BytesResponseHttpHandler(HttpHandler_):
6848
+ data: bytes
6849
+
6850
+ status: ta.Union[http.HTTPStatus, int] = 200
6851
+ content_type: ta.Optional[str] = 'application/octet-stream'
6852
+ headers: ta.Optional[ta.Mapping[str, str]] = None
6853
+ close_connection: bool = True
6854
+
6855
+ def __call__(self, req: HttpHandlerRequest) -> HttpHandlerResponse:
6856
+ return HttpHandlerResponse(
6857
+ status=self.status,
6858
+ headers={
6859
+ **({'Content-Type': self.content_type} if self.content_type else {}),
6860
+ 'Content-Length': str(len(self.data)),
6861
+ **(self.headers or {}),
6862
+ },
6863
+ data=self.data,
6864
+ close_connection=self.close_connection,
6865
+ )
6866
+
6867
+
6868
+ @dc.dataclass(frozen=True)
6869
+ class StringResponseHttpHandler(HttpHandler_):
6870
+ data: str
6871
+
6872
+ status: ta.Union[http.HTTPStatus, int] = 200
6873
+ content_type: ta.Optional[str] = 'text/plain; charset=utf-8'
6874
+ headers: ta.Optional[ta.Mapping[str, str]] = None
6875
+ close_connection: bool = True
6876
+
6877
+ def __call__(self, req: HttpHandlerRequest) -> HttpHandlerResponse:
6878
+ data = self.data.encode('utf-8')
6879
+ return HttpHandlerResponse(
6880
+ status=self.status,
6881
+ headers={
6882
+ **({'Content-Type': self.content_type} if self.content_type else {}),
6883
+ 'Content-Length': str(len(data)),
6884
+ **(self.headers or {}),
6885
+ },
6886
+ data=data,
6887
+ close_connection=self.close_connection,
6888
+ )
6889
+
6890
+
6924
6891
  ########################################
6925
6892
  # ../../../omlish/lite/configs.py
6926
6893
 
@@ -7079,9 +7046,6 @@ def configure_standard_logging(
7079
7046
  # ../types.py
7080
7047
 
7081
7048
 
7082
- ##
7083
-
7084
-
7085
7049
  class ExitNow(Exception): # noqa
7086
7050
  pass
7087
7051
 
@@ -7651,6 +7615,9 @@ class CoroHttpServer:
7651
7615
  def coro_handle(self) -> ta.Generator[Io, ta.Optional[bytes], None]:
7652
7616
  return self._coro_run_handler(self._coro_handle_one())
7653
7617
 
7618
+ class Close(Exception): # noqa
7619
+ pass
7620
+
7654
7621
  def _coro_run_handler(
7655
7622
  self,
7656
7623
  gen: ta.Generator[
@@ -7690,7 +7657,7 @@ class CoroHttpServer:
7690
7657
 
7691
7658
  try:
7692
7659
  o = gen.send(i)
7693
- except EOFError:
7660
+ except self.Close:
7694
7661
  return
7695
7662
  except StopIteration:
7696
7663
  break
@@ -7719,7 +7686,7 @@ class CoroHttpServer:
7719
7686
  break
7720
7687
 
7721
7688
  if isinstance(parsed, EmptyParsedHttpResult):
7722
- raise EOFError # noqa
7689
+ raise self.Close
7723
7690
 
7724
7691
  if isinstance(parsed, ParseHttpRequestError):
7725
7692
  err = self._build_error(
@@ -7811,56 +7778,6 @@ class CoroHttpServer:
7811
7778
  raise
7812
7779
 
7813
7780
 
7814
- ##
7815
-
7816
-
7817
- class CoroHttpServerSocketHandler(SocketHandler_):
7818
- def __init__(
7819
- self,
7820
- server_factory: CoroHttpServerFactory,
7821
- *,
7822
- log_handler: ta.Optional[ta.Callable[[CoroHttpServer, CoroHttpServer.AnyLogIo], None]] = None,
7823
- ) -> None:
7824
- super().__init__()
7825
-
7826
- self._server_factory = server_factory
7827
- self._log_handler = log_handler
7828
-
7829
- def __call__(self, client_address: SocketAddress, fp: SocketIoPair) -> None:
7830
- server = self._server_factory(client_address)
7831
-
7832
- gen = server.coro_handle()
7833
-
7834
- o = next(gen)
7835
- while True:
7836
- if isinstance(o, CoroHttpServer.AnyLogIo):
7837
- i = None
7838
- if self._log_handler is not None:
7839
- self._log_handler(server, o)
7840
-
7841
- elif isinstance(o, CoroHttpServer.ReadIo):
7842
- i = fp.r.read(o.sz)
7843
-
7844
- elif isinstance(o, CoroHttpServer.ReadLineIo):
7845
- i = fp.r.readline(o.sz)
7846
-
7847
- elif isinstance(o, CoroHttpServer.WriteIo):
7848
- i = None
7849
- fp.w.write(o.data)
7850
- fp.w.flush()
7851
-
7852
- else:
7853
- raise TypeError(o)
7854
-
7855
- try:
7856
- if i is not None:
7857
- o = gen.send(i)
7858
- else:
7859
- o = next(gen)
7860
- except StopIteration:
7861
- break
7862
-
7863
-
7864
7781
  ########################################
7865
7782
  # ../dispatchers.py
7866
7783
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: ominfra
3
- Version: 0.0.0.dev223
3
+ Version: 0.0.0.dev225
4
4
  Summary: ominfra
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,8 +12,8 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
- Requires-Dist: omdev==0.0.0.dev223
16
- Requires-Dist: omlish==0.0.0.dev223
15
+ Requires-Dist: omdev==0.0.0.dev225
16
+ Requires-Dist: omlish==0.0.0.dev225
17
17
  Provides-Extra: all
18
18
  Requires-Dist: paramiko~=3.5; extra == "all"
19
19
  Requires-Dist: asyncssh~=2.18; extra == "all"
@@ -20,7 +20,7 @@ ominfra/clouds/aws/instancetypes/cli.py,sha256=HcfOchROLGFsxmEIuXtXVywFJWjHOk4yv
20
20
  ominfra/clouds/aws/journald2aws/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
21
21
  ominfra/clouds/aws/journald2aws/__main__.py,sha256=d23loR_cKfTYZwYiqpt_CmKI7dd5WcYFgIYzqMep75E,68
22
22
  ominfra/clouds/aws/journald2aws/cursor.py,sha256=tQ7O6BHlEdaalbiI_Rqagj0aHfdtTQ_ZJwdOSRUjNvQ,1173
23
- ominfra/clouds/aws/journald2aws/driver.py,sha256=b3XfSlIBWAWJLImmyh1ZK9FpdNAYNZ2YZeCv_Q9GckM,6111
23
+ ominfra/clouds/aws/journald2aws/driver.py,sha256=eXz32NbU_1rEB0tOnNg0KLIJ3tpRQcFKgA63lmpmZOc,6120
24
24
  ominfra/clouds/aws/journald2aws/main.py,sha256=sqs_IoLzadv0EJoWHnYdgg3bkDDSFshCvyRWByTm8Sg,2179
25
25
  ominfra/clouds/aws/journald2aws/poster.py,sha256=hz1XuctW8GtLmfjhRvCFY6py52D4BzXHYny5XKFpHSA,2833
26
26
  ominfra/clouds/aws/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -45,7 +45,7 @@ ominfra/journald/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
45
45
  ominfra/journald/fields.py,sha256=NjjVn7GW4jkcGdyiiizVjEfQqSFnolXYk3kDcSQcMmc,12278
46
46
  ominfra/journald/genmessages.py,sha256=rLTS-K2v7otNOtTz4RoOEVYCm0fQuuBzf47e0T61tA8,1857
47
47
  ominfra/journald/messages.py,sha256=zhAQswhpSBybaBPWONCt0quenYK91HMHRkuOz38mq1E,2184
48
- ominfra/journald/tailer.py,sha256=fiyZkzZh3_QaCCeX1pnF1nwOhJ-u-QcbmAEH5V01Vsc,33506
48
+ ominfra/journald/tailer.py,sha256=PBdttWM0NRGqgxSpbPueyz39KuICFf_KUrgnsWxmLaI,33517
49
49
  ominfra/manage/__init__.py,sha256=aykrEASTHEtJ-o97jUHRIv8oea41tO7RDHB56cQfmis,265
50
50
  ominfra/manage/__main__.py,sha256=5IeIERm-371fSI5ZvPv8eldAJBwgKwpR0R49pTsILNM,76
51
51
  ominfra/manage/bootstrap.py,sha256=1RIRhVkUZjxZcZerHMg8U6xgWhhemGgPN5cDye8dQ68,446
@@ -61,7 +61,7 @@ ominfra/manage/commands/injection.py,sha256=lhiSzcGM-lLDsvuxakyc_8XViCzF7JPuAicQ
61
61
  ominfra/manage/commands/local.py,sha256=DyHIsQ03_YS6kAA8WLeMyXyGgyizkd1WZUZdATkSsZE,532
62
62
  ominfra/manage/commands/marshal.py,sha256=Xl_yRgCD94yDmAx6e2uKVRjkmhV5EOr-Akqo3C0DGXw,689
63
63
  ominfra/manage/commands/ping.py,sha256=DVZFzL1Z_f-Bq53vxMrL3xOi0iK_nMonJE4KvQf9wsI,546
64
- ominfra/manage/commands/subprocess.py,sha256=yHGMbAI-xKe_9BUs5IZ3Yav8qRE-I9aGnBtTwW15Pnw,2440
64
+ ominfra/manage/commands/subprocess.py,sha256=9JKg3opViTjIrXfgeMkPjlHWCWsJEhLhyZxXS5xJpxc,2455
65
65
  ominfra/manage/commands/types.py,sha256=XFZPeqeIBAaIIQF3pdPbGxLlb-LCrz6WtlDWO2q_vz0,210
66
66
  ominfra/manage/deploy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
67
  ominfra/manage/deploy/apps.py,sha256=T0eU0Jw-h33_ZPIs0zy9DOx_fgs3YSAAGzu-H0pvt2U,4865
@@ -98,7 +98,7 @@ ominfra/manage/remote/connection.py,sha256=T4fL-GXXAfnbCbkZ3_28t8LAwwki4Td3j41eY
98
98
  ominfra/manage/remote/execution.py,sha256=_bygZi_0Uel615uIg43S14CTdmv1unEIu9TPz2mVRJ4,11738
99
99
  ominfra/manage/remote/inject.py,sha256=nSNP_VInCCZOWVrUIRHBvLmnM45geFoYmMh-zqc__as,1080
100
100
  ominfra/manage/remote/payload.py,sha256=Rn-Yo26POpHEOOfUHX3jWkqcQVEAvkJ_5Bu13jwoob4,944
101
- ominfra/manage/remote/spawning.py,sha256=H4NqyfPr-58V3e495NwlVGRmUfs5sDjNWSKLW7H-mcg,3296
101
+ ominfra/manage/remote/spawning.py,sha256=cElA7SesWYVWzZ_M2JtShYwO7mdvemmsN8foFy1hnhk,3306
102
102
  ominfra/manage/system/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
103
  ominfra/manage/system/commands.py,sha256=XrYvsxiwTJh17buIWmoFGH8zTUIXmrXvYkLy1INtmkU,1173
104
104
  ominfra/manage/system/config.py,sha256=mEVBL1cy4twO6F0bdnCI01Sm0xuLe1Z5eiAzCvbmoAc,196
@@ -112,9 +112,9 @@ ominfra/manage/targets/connection.py,sha256=rVI1YJxFClcF-sdttqWyIz9_XjPI01GUdwxY
112
112
  ominfra/manage/targets/inject.py,sha256=P4597xWM-V3I_gCt2O71OLhYQkkXtuJvkYRsIbhhMcE,1561
113
113
  ominfra/manage/targets/targets.py,sha256=7GP6UAZyJFEhpkJN6UQdpr_WN3p7C76v-s445y-WB6U,1885
114
114
  ominfra/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
- ominfra/scripts/journald2aws.py,sha256=JciUBLUqkdYUH-QEe5p1rN3m1Rva33FCzB5or3P9UCk,174157
116
- ominfra/scripts/manage.py,sha256=ugFO2yEgd5r9F1YvqaTqoFA5fZr_6kxJkyBQhXBYE80,365322
117
- ominfra/scripts/supervisor.py,sha256=lGMR_wVYDvdStvQXt-48BSs1L0k09vLtLWY3pGXt_vw,297684
115
+ ominfra/scripts/journald2aws.py,sha256=XZI8-2Z1kxCZz3qAS656HGwnYKtZx6tNiQI9xnWvdgY,164113
116
+ ominfra/scripts/manage.py,sha256=ktyMVWd00ZCK3yEtaYT0CHJqP0tQvRXmt9XKO0V95RU,367611
117
+ ominfra/scripts/supervisor.py,sha256=8vVoR8kq7Qh2z_NdOrDXXnNCu9N5TnOM2M5om4D-ZmA,296097
118
118
  ominfra/supervisor/LICENSE.txt,sha256=ZrHY15PVR98y26Yg6iQfa-SXnUaYTDhrUsPVcEO5OKM,1874
119
119
  ominfra/supervisor/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
120
120
  ominfra/supervisor/__main__.py,sha256=I0yFw-C08OOiZ3BF6lF1Oiv789EQXu-_j6whDhQUTEA,66
@@ -156,9 +156,9 @@ ominfra/tailscale/api.py,sha256=C5-t_b6jZXUWcy5k8bXm7CFnk73pSdrlMOgGDeGVrpw,1370
156
156
  ominfra/tailscale/cli.py,sha256=3FnJbgpLw6gInTfhERd1mDy9ijjMUGxkdYVo43Tnxx4,3555
157
157
  ominfra/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
158
  ominfra/tools/listresources.py,sha256=BxFoxtyF2aVEcW67ZD9QujoBkJBtvIxGmKqXvLwnEHo,6180
159
- ominfra-0.0.0.dev223.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
160
- ominfra-0.0.0.dev223.dist-info/METADATA,sha256=kp6iE8u8sk6dRbinaC51rSoPjSrwW2TiX-Q_JYDtBDw,731
161
- ominfra-0.0.0.dev223.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
162
- ominfra-0.0.0.dev223.dist-info/entry_points.txt,sha256=kgecQ2MgGrM9qK744BoKS3tMesaC3yjLnl9pa5CRczg,37
163
- ominfra-0.0.0.dev223.dist-info/top_level.txt,sha256=E-b2OHkk_AOBLXHYZQ2EOFKl-_6uOGd8EjeG-Zy6h_w,8
164
- ominfra-0.0.0.dev223.dist-info/RECORD,,
159
+ ominfra-0.0.0.dev225.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
160
+ ominfra-0.0.0.dev225.dist-info/METADATA,sha256=anqfSH5n5Dsr6-lbN9972BXw9Ep-dz86hI0NyjbKaoE,731
161
+ ominfra-0.0.0.dev225.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
162
+ ominfra-0.0.0.dev225.dist-info/entry_points.txt,sha256=kgecQ2MgGrM9qK744BoKS3tMesaC3yjLnl9pa5CRczg,37
163
+ ominfra-0.0.0.dev225.dist-info/top_level.txt,sha256=E-b2OHkk_AOBLXHYZQ2EOFKl-_6uOGd8EjeG-Zy6h_w,8
164
+ ominfra-0.0.0.dev225.dist-info/RECORD,,