ominfra 0.0.0.dev193__py3-none-any.whl → 0.0.0.dev195__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.
@@ -5,8 +5,9 @@ import signal
5
5
  import tempfile
6
6
  import typing as ta
7
7
 
8
- from ..configs import ConfigMapping
9
- from ..configs import build_config_named_children
8
+ from omlish.configs.processing.names import build_config_named_children
9
+ from omlish.configs.types import ConfigMap
10
+
10
11
  from .utils.fs import check_existing_dir
11
12
  from .utils.fs import check_path_with_existing_dir
12
13
  from .utils.strings import parse_bytes_size
@@ -282,7 +283,7 @@ class ServerConfig:
282
283
  ##
283
284
 
284
285
 
285
- def prepare_process_group_config(dct: ConfigMapping) -> ConfigMapping:
286
+ def prepare_process_group_config(dct: ConfigMap) -> ConfigMap:
286
287
  out = dict(dct)
287
288
  out['processes'] = build_config_named_children(out.get('processes'))
288
289
  return out
@@ -35,12 +35,12 @@ import os.path
35
35
  import typing as ta
36
36
 
37
37
  from omlish.http.coro.server import CoroHttpServer
38
+ from omlish.lite.configs import load_config_file_obj
38
39
  from omlish.lite.inject import inj
39
40
  from omlish.lite.runtime import is_debugger_attached
40
41
  from omlish.logs.standard import configure_standard_logging
41
42
  from omlish.os.journald import journald_log_handler_factory
42
43
 
43
- from ..configs import read_config_file
44
44
  from .configs import ServerConfig
45
45
  from .configs import prepare_server_config
46
46
  from .inject import bind_server
@@ -91,7 +91,7 @@ def main(
91
91
 
92
92
  # if we hup, restart by making a new Supervisor()
93
93
  for epoch in itertools.count():
94
- config = read_config_file(
94
+ config = load_config_file_obj(
95
95
  os.path.expanduser(cf),
96
96
  ServerConfig,
97
97
  prepare=prepare_server_config,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ominfra
3
- Version: 0.0.0.dev193
3
+ Version: 0.0.0.dev195
4
4
  Summary: ominfra
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,9 +12,9 @@ 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.dev193
16
- Requires-Dist: omlish==0.0.0.dev193
17
- Requires-Dist: omserv==0.0.0.dev193
15
+ Requires-Dist: omdev==0.0.0.dev195
16
+ Requires-Dist: omlish==0.0.0.dev195
17
+ Requires-Dist: omserv==0.0.0.dev195
18
18
  Provides-Extra: all
19
19
  Requires-Dist: paramiko~=3.5; extra == "all"
20
20
  Requires-Dist: asyncssh~=2.18; extra == "all"
@@ -2,7 +2,6 @@ ominfra/.manifests.json,sha256=8KREXxMAlsilZOktXPYru1ND3V5hFI22vnrp6hT3bio,589
2
2
  ominfra/__about__.py,sha256=_gUs3H7uunGy5IfGw3mq4dFJWaF1mecSPruJPyjbs7Y,741
3
3
  ominfra/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  ominfra/cmds.py,sha256=E0AfnvEmnKntXWvmLW5L05_NeDpBET1VBXn7vV6EwBQ,2083
5
- ominfra/configs.py,sha256=Zj7ZHDmnhg1TFRntAFExpYDfUrcOGGe7oRRoKZsnC6M,2432
6
5
  ominfra/pyremote.py,sha256=HLfAZl3Xw5CpxLS5PS380zqCyE7n3vKVksIYT2Fbdc8,15197
7
6
  ominfra/ssh.py,sha256=jQpc4WvkMckIfk4vILda8zFaeharRqc_6wxW50b0OjQ,5431
8
7
  ominfra/systemd.py,sha256=d61NVrJoItzSaqhMDgKGrQjbrxEVAujUMDsj8WggXos,1022
@@ -19,7 +18,7 @@ ominfra/clouds/aws/journald2aws/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxk
19
18
  ominfra/clouds/aws/journald2aws/__main__.py,sha256=d23loR_cKfTYZwYiqpt_CmKI7dd5WcYFgIYzqMep75E,68
20
19
  ominfra/clouds/aws/journald2aws/cursor.py,sha256=tQ7O6BHlEdaalbiI_Rqagj0aHfdtTQ_ZJwdOSRUjNvQ,1173
21
20
  ominfra/clouds/aws/journald2aws/driver.py,sha256=b3XfSlIBWAWJLImmyh1ZK9FpdNAYNZ2YZeCv_Q9GckM,6111
22
- ominfra/clouds/aws/journald2aws/main.py,sha256=f1YbdF0FulIbUokaNz7NrPS304IdzYiw0Hd3ZDheYf0,2151
21
+ ominfra/clouds/aws/journald2aws/main.py,sha256=4qWnw33cTPUW1CU4_9ojkn0wRStANrQzSI_cXpyuOf8,2202
23
22
  ominfra/clouds/aws/journald2aws/poster.py,sha256=hz1XuctW8GtLmfjhRvCFY6py52D4BzXHYny5XKFpHSA,2833
24
23
  ominfra/clouds/gcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
24
  ominfra/clouds/gcp/auth.py,sha256=rDIiOH5gP3OSIaMC5Lp8yAD4zWuLDEYlFu37mDx5YDA,1360
@@ -34,7 +33,7 @@ ominfra/manage/bootstrap.py,sha256=1RIRhVkUZjxZcZerHMg8U6xgWhhemGgPN5cDye8dQ68,4
34
33
  ominfra/manage/bootstrap_.py,sha256=B9UfR9J7mS3J54PFaSe1MQS5lCnKgxt5dDRJ9mnHYwg,656
35
34
  ominfra/manage/config.py,sha256=1y2N_8nXHBZc6YbW6BaRZoDDCTBmiHuWtTOQ7zdr5VE,184
36
35
  ominfra/manage/inject.py,sha256=_FVaMZUBKi-oObv14H77luWYCodxNJJD1t4pNQzckFE,2030
37
- ominfra/manage/main.py,sha256=t4qilhICLxDCgLXaU6PJ56kINx0YwenWd8SXSSBWKVU,4381
36
+ ominfra/manage/main.py,sha256=1-PIAWnmd9XIy8pVcWGsME9xNTSj_t0sWWQTq9GYIzc,4403
38
37
  ominfra/manage/marshal.py,sha256=WKj7IU9bo4fBMSSzT6ZMm_WFalXIJZ-V7j8oi92fNhk,305
39
38
  ominfra/manage/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
39
  ominfra/manage/commands/base.py,sha256=LtaI0AgnplttQK7gNncNItq8yuTZQimJTaprVpZktI8,3993
@@ -62,7 +61,7 @@ ominfra/manage/deploy/types.py,sha256=ZcIoheZ3zW7n0IZiqTRW_Uo3JyWWeWg5nyKGryvGc2
62
61
  ominfra/manage/deploy/venvs.py,sha256=PlvhyhZavgiSwGt8BXrhoSwQFVKpU0zCtq2C2N1_8Ak,1696
63
62
  ominfra/manage/deploy/conf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
63
  ominfra/manage/deploy/conf/inject.py,sha256=xHZQr7oaJCxaKgpJ0H-hgiQNGt4QsskhT3f5v7xrFwE,451
65
- ominfra/manage/deploy/conf/manager.py,sha256=k7LrO9CaOae2qsnlud5I72YGJYOryBIrACLbE2j9Zik,8322
64
+ ominfra/manage/deploy/conf/manager.py,sha256=0dKI9aDsq31ziKifS_BOnUjec-HR4i0dHvEcF6z-Vo8,8322
66
65
  ominfra/manage/deploy/conf/specs.py,sha256=_TCIT5nokZiKEJBL8ZArmPiRt1GEUUC5TaE0QboNhq4,2191
67
66
  ominfra/manage/deploy/paths/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
67
  ominfra/manage/deploy/paths/inject.py,sha256=X81C-Qhef1LQ7tILWvkomBwFTvgooLVmWRnKL7TeVoI,596
@@ -93,13 +92,13 @@ ominfra/manage/targets/connection.py,sha256=rVI1YJxFClcF-sdttqWyIz9_XjPI01GUdwxY
93
92
  ominfra/manage/targets/inject.py,sha256=P4597xWM-V3I_gCt2O71OLhYQkkXtuJvkYRsIbhhMcE,1561
94
93
  ominfra/manage/targets/targets.py,sha256=7GP6UAZyJFEhpkJN6UQdpr_WN3p7C76v-s445y-WB6U,1885
95
94
  ominfra/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
- ominfra/scripts/journald2aws.py,sha256=lu70CllxhJLboPWeAWh3aoQ56ByYsm6vBznLV9Br2XQ,158335
97
- ominfra/scripts/manage.py,sha256=msquji-KoSD-3kNzNa9VQwHJeLClWexZGNw2n3sESTw,346542
98
- ominfra/scripts/supervisor.py,sha256=Bd3YCPyDVXSf-JRzpHFznRjMpUV4cXwvuLThxBC52AM,282826
95
+ ominfra/scripts/journald2aws.py,sha256=Bo_24qN3YI_72BcZYBHid9_SJWnCAmbKRJ3-wE6dGMU,166250
96
+ ominfra/scripts/manage.py,sha256=rsfvEfHm311jZ1uE90DGL2HQqZLvg36-Pybszoywjl4,353278
97
+ ominfra/scripts/supervisor.py,sha256=O0IETZgsTNq8nw_F5mL3Qkk3hHtvRNtZTeAsCixzZXw,291712
99
98
  ominfra/supervisor/LICENSE.txt,sha256=yvqaMNsDhWxziHa9ien6qCW1SkZv-DQlAg96XjfSee8,1746
100
99
  ominfra/supervisor/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
101
100
  ominfra/supervisor/__main__.py,sha256=I0yFw-C08OOiZ3BF6lF1Oiv789EQXu-_j6whDhQUTEA,66
102
- ominfra/supervisor/configs.py,sha256=rA32edDnkfcUYSUPVRG4QIoGwCvnhstaNN2jTXvoqt4,13825
101
+ ominfra/supervisor/configs.py,sha256=zpNZmei-Ajild6WNIGnxsPMGbGBFzr0K81L_gR0vBIA,13847
103
102
  ominfra/supervisor/dispatchers.py,sha256=zXLwQS4Vc6dWw5o9QOL04UMDt7w6CKu9wf19CjUiS2Q,1005
104
103
  ominfra/supervisor/dispatchersimpl.py,sha256=q3dEyOHWTPKm28nmAGisjgIW1BX6O3-SzbYa7nWuTEs,11349
105
104
  ominfra/supervisor/events.py,sha256=XGrtzHr1xm0dwjz329fn9eR0_Ap-LQL6Sk8LJ8eVDEo,6692
@@ -109,7 +108,7 @@ ominfra/supervisor/groupsimpl.py,sha256=PCDyc_Wc-pnvIj56_aEyiA5exCpK6n9iErqnJzO2
109
108
  ominfra/supervisor/http.py,sha256=Tl5eT6dyf4KuQXKbhGo1B6CFEzUDtPl_DZAuUFVD9zI,3453
110
109
  ominfra/supervisor/inject.py,sha256=IeR-WKvK1sGNxMe6G2OBT5kSP7EUP5ipkDgcUFmDPCA,4838
111
110
  ominfra/supervisor/io.py,sha256=moaGNaPuYXEAUzLg8Qjo05DEIcOUNYUj8SSr8eT0d24,3198
112
- ominfra/supervisor/main.py,sha256=7YrreFNntdRCp6MplCclfnRcgrRIb_UCeohJkDC9Few,4251
111
+ ominfra/supervisor/main.py,sha256=GjZXBnfv_f3eIrjiGsJ_aLzynZXovZeY5BNyIptS2Gs,4269
113
112
  ominfra/supervisor/pipes.py,sha256=2ZihNTnRNjnIPOtPbm3_pyqO15f7BNs7WnNtO5V8ahM,2231
114
113
  ominfra/supervisor/privileges.py,sha256=kaRTHI7XjqzxEWCeHp3_0J0Vc4gSPugRbXEwxuw6MYE,2054
115
114
  ominfra/supervisor/process.py,sha256=UaubVxsxVqDnbuWVpTH0DTGbJGLO0vGJ9mNcvy2kCXM,217
@@ -137,9 +136,9 @@ ominfra/tailscale/api.py,sha256=C5-t_b6jZXUWcy5k8bXm7CFnk73pSdrlMOgGDeGVrpw,1370
137
136
  ominfra/tailscale/cli.py,sha256=3FnJbgpLw6gInTfhERd1mDy9ijjMUGxkdYVo43Tnxx4,3555
138
137
  ominfra/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
139
138
  ominfra/tools/listresources.py,sha256=4qVg5txsb10EHhvqXXeM6gJ2jx9LbroEnPydDv1uXs0,6176
140
- ominfra-0.0.0.dev193.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
141
- ominfra-0.0.0.dev193.dist-info/METADATA,sha256=zzV9oFT9RorWK_Piv5QZt7e7F-P0EK1NLCZ9GE3ChSc,767
142
- ominfra-0.0.0.dev193.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
143
- ominfra-0.0.0.dev193.dist-info/entry_points.txt,sha256=kgecQ2MgGrM9qK744BoKS3tMesaC3yjLnl9pa5CRczg,37
144
- ominfra-0.0.0.dev193.dist-info/top_level.txt,sha256=E-b2OHkk_AOBLXHYZQ2EOFKl-_6uOGd8EjeG-Zy6h_w,8
145
- ominfra-0.0.0.dev193.dist-info/RECORD,,
139
+ ominfra-0.0.0.dev195.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
140
+ ominfra-0.0.0.dev195.dist-info/METADATA,sha256=duMhHD7cEVzbKj17BRzerlVV-8lRp6Y3Pwf8z3vC7ts,767
141
+ ominfra-0.0.0.dev195.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
142
+ ominfra-0.0.0.dev195.dist-info/entry_points.txt,sha256=kgecQ2MgGrM9qK744BoKS3tMesaC3yjLnl9pa5CRczg,37
143
+ ominfra-0.0.0.dev195.dist-info/top_level.txt,sha256=E-b2OHkk_AOBLXHYZQ2EOFKl-_6uOGd8EjeG-Zy6h_w,8
144
+ ominfra-0.0.0.dev195.dist-info/RECORD,,
ominfra/configs.py DELETED
@@ -1,102 +0,0 @@
1
- # ruff: noqa: UP006 UP007
2
- # @omlish-lite
3
- import json
4
- import os.path
5
- import typing as ta
6
-
7
- from omlish.formats.toml.parser import toml_loads
8
- from omlish.lite.check import check
9
- from omlish.lite.marshal import OBJ_MARSHALER_MANAGER
10
- from omlish.lite.marshal import ObjMarshalerManager
11
-
12
-
13
- T = ta.TypeVar('T')
14
-
15
- ConfigMapping = ta.Mapping[str, ta.Any]
16
-
17
-
18
- ##
19
-
20
-
21
- def parse_config_file(
22
- name: str,
23
- f: ta.TextIO,
24
- ) -> ConfigMapping:
25
- if name.endswith('.toml'):
26
- return toml_loads(f.read())
27
-
28
- elif any(name.endswith(e) for e in ('.yml', '.yaml')):
29
- yaml = __import__('yaml')
30
- return yaml.safe_load(f)
31
-
32
- elif name.endswith('.ini'):
33
- import configparser
34
- cp = configparser.ConfigParser()
35
- cp.read_file(f)
36
- config_dct: ta.Dict[str, ta.Any] = {}
37
- for sec in cp.sections():
38
- cd = config_dct
39
- for k in sec.split('.'):
40
- cd = cd.setdefault(k, {})
41
- cd.update(cp.items(sec))
42
- return config_dct
43
-
44
- else:
45
- return json.loads(f.read())
46
-
47
-
48
- def read_config_file(
49
- path: str,
50
- cls: ta.Type[T],
51
- *,
52
- prepare: ta.Optional[ta.Callable[[ConfigMapping], ConfigMapping]] = None,
53
- msh: ObjMarshalerManager = OBJ_MARSHALER_MANAGER,
54
- ) -> T:
55
- with open(path) as cf:
56
- config_dct = parse_config_file(os.path.basename(path), cf)
57
-
58
- if prepare is not None:
59
- config_dct = prepare(config_dct)
60
-
61
- return msh.unmarshal_obj(config_dct, cls)
62
-
63
-
64
- ##
65
-
66
-
67
- def build_config_named_children(
68
- o: ta.Union[
69
- ta.Sequence[ConfigMapping],
70
- ta.Mapping[str, ConfigMapping],
71
- None,
72
- ],
73
- *,
74
- name_key: str = 'name',
75
- ) -> ta.Optional[ta.Sequence[ConfigMapping]]:
76
- if o is None:
77
- return None
78
-
79
- lst: ta.List[ConfigMapping] = []
80
- if isinstance(o, ta.Mapping):
81
- for k, v in o.items():
82
- check.isinstance(v, ta.Mapping)
83
- if name_key in v:
84
- n = v[name_key]
85
- if k != n:
86
- raise KeyError(f'Given names do not match: {n} != {k}')
87
- lst.append(v)
88
- else:
89
- lst.append({name_key: k, **v})
90
-
91
- else:
92
- check.not_isinstance(o, str)
93
- lst.extend(o)
94
-
95
- seen = set()
96
- for d in lst:
97
- n = d['name']
98
- if n in d:
99
- raise KeyError(f'Duplicate name: {n}')
100
- seen.add(n)
101
-
102
- return lst