ominfra 0.0.0.dev191__py3-none-any.whl → 0.0.0.dev192__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.
@@ -84,6 +84,8 @@ class DeployAppManager(DeployPathOwner):
84
84
  spec: DeployAppSpec,
85
85
  home: DeployHome,
86
86
  tags: DeployTagMap,
87
+ *,
88
+ conf_string_ns: ta.Optional[ta.Mapping[str, ta.Any]] = None,
87
89
  ) -> PreparedApp:
88
90
  spec_json = json_dumps_pretty(self._msh.marshal_obj(spec))
89
91
 
@@ -140,9 +142,17 @@ class DeployAppManager(DeployPathOwner):
140
142
  if spec.conf is not None:
141
143
  conf_dir = os.path.join(app_dir, 'conf')
142
144
  rkw.update(conf_dir=conf_dir)
145
+
146
+ conf_ns: ta.Dict[str, ta.Any] = dict(
147
+ **(conf_string_ns or {}),
148
+ app=spec.app.s,
149
+ app_dir=app_dir.rstrip('/'),
150
+ )
151
+
143
152
  await self._conf.write_app_conf(
144
153
  spec.conf,
145
154
  conf_dir,
155
+ string_ns=conf_ns,
146
156
  )
147
157
 
148
158
  #
@@ -133,9 +133,15 @@ class DeployConfManager:
133
133
  self,
134
134
  spec: DeployAppConfSpec,
135
135
  app_conf_dir: str,
136
+ *,
137
+ string_ns: ta.Optional[ta.Mapping[str, ta.Any]] = None,
136
138
  ) -> None:
137
- def process_str(s: str) -> str:
138
- return s
139
+ process_str: ta.Any
140
+ if string_ns is not None:
141
+ def process_str(s: str) -> str:
142
+ return s.format(**string_ns)
143
+ else:
144
+ process_str = None
139
145
 
140
146
  for acf in spec.files or []:
141
147
  await self._write_app_conf_file(
@@ -30,7 +30,7 @@ from .types import DeployHome
30
30
  ##
31
31
 
32
32
 
33
- DEPLOY_TAG_DATETIME_FMT = '%Y%m%dT%H%M%SZ'
33
+ DEPLOY_TAG_DATETIME_FMT = '%Y-%m-%d-T-%H-%M-%S-%f-Z'
34
34
 
35
35
 
36
36
  DeployManagerUtcClock = ta.NewType('DeployManagerUtcClock', Func0[datetime.datetime])
@@ -183,8 +183,9 @@ class DeployDriver:
183
183
 
184
184
  das: ta.Set[DeployApp] = {a.app for a in self._spec.apps}
185
185
  las: ta.Set[DeployApp] = set(self._spec.app_links.apps)
186
- if (ras := das & las):
187
- raise RuntimeError(f'Must not specify apps as both deploy and link: {sorted(a.s for a in ras)}')
186
+ ras: ta.Set[DeployApp] = set(self._spec.app_links.removed_apps)
187
+ check.empty(das & (las | ras))
188
+ check.empty(las & ras)
188
189
 
189
190
  #
190
191
 
@@ -230,10 +231,10 @@ class DeployDriver:
230
231
  cad = abs_real_path(os.path.join(current_link, 'apps'))
231
232
  if os.path.exists(cad):
232
233
  for d in os.listdir(cad):
233
- if (da := DeployApp(d)) not in das:
234
+ if (da := DeployApp(d)) not in das and da not in ras:
234
235
  las.add(da)
235
236
 
236
- for la in self._spec.app_links.apps:
237
+ for la in las:
237
238
  await self._drive_app_link(
238
239
  la,
239
240
  current_link,
@@ -263,10 +264,16 @@ class DeployDriver:
263
264
  #
264
265
 
265
266
  async def _drive_app_deploy(self, app: DeployAppSpec) -> None:
267
+ current_deploy_link = os.path.join(self._home, self._deploys.CURRENT_DEPLOY_LINK.render())
268
+
266
269
  pa = await self._apps.prepare_app(
267
270
  app,
268
271
  self._home,
269
272
  self.tags,
273
+ conf_string_ns=dict(
274
+ deploy_home=self._home,
275
+ current_deploy_link=current_deploy_link,
276
+ ),
270
277
  )
271
278
 
272
279
  #
@@ -91,7 +91,9 @@ class DeployGitManager(SingleDirDeployPathOwner):
91
91
 
92
92
  async def fetch(self, rev: DeployRev) -> None:
93
93
  await self.init()
94
- await self._call('git', 'fetch', '--depth=1', 'origin', rev)
94
+
95
+ # This fetch shouldn't be depth=1 - git doesn't reuse local data with shallow fetches.
96
+ await self._call('git', 'fetch', 'origin', rev)
95
97
 
96
98
  #
97
99
 
@@ -95,6 +95,8 @@ class DeployAppSpec(DeploySpecKeyed[DeployAppKey]):
95
95
  class DeployAppLinksSpec:
96
96
  apps: ta.Sequence[DeployApp] = ()
97
97
 
98
+ removed_apps: ta.Sequence[DeployApp] = ()
99
+
98
100
  exclude_unspecified: bool = False
99
101
 
100
102
 
@@ -8,6 +8,7 @@ TODO:
8
8
  - ominfra.systemd / x.sd_orphans
9
9
  """
10
10
  import os.path
11
+ import shutil
11
12
  import sys
12
13
  import typing as ta
13
14
 
@@ -101,7 +102,7 @@ class DeploySystemdManager:
101
102
 
102
103
  #
103
104
 
104
- if sys.platform == 'linux':
105
+ if sys.platform == 'linux' and shutil.which('systemctl') is not None:
105
106
  async def reload() -> None:
106
107
  await asyncio_subprocesses.check_call('systemctl', '--user', 'daemon-reload')
107
108
 
ominfra/scripts/manage.py CHANGED
@@ -9353,9 +9353,15 @@ class DeployConfManager:
9353
9353
  self,
9354
9354
  spec: DeployAppConfSpec,
9355
9355
  app_conf_dir: str,
9356
+ *,
9357
+ string_ns: ta.Optional[ta.Mapping[str, ta.Any]] = None,
9356
9358
  ) -> None:
9357
- def process_str(s: str) -> str:
9358
- return s
9359
+ process_str: ta.Any
9360
+ if string_ns is not None:
9361
+ def process_str(s: str) -> str:
9362
+ return s.format(**string_ns)
9363
+ else:
9364
+ process_str = None
9359
9365
 
9360
9366
  for acf in spec.files or []:
9361
9367
  await self._write_app_conf_file(
@@ -9608,6 +9614,8 @@ class DeployAppSpec(DeploySpecKeyed[DeployAppKey]):
9608
9614
  class DeployAppLinksSpec:
9609
9615
  apps: ta.Sequence[DeployApp] = ()
9610
9616
 
9617
+ removed_apps: ta.Sequence[DeployApp] = ()
9618
+
9611
9619
  exclude_unspecified: bool = False
9612
9620
 
9613
9621
 
@@ -10967,7 +10975,9 @@ class DeployGitManager(SingleDirDeployPathOwner):
10967
10975
 
10968
10976
  async def fetch(self, rev: DeployRev) -> None:
10969
10977
  await self.init()
10970
- await self._call('git', 'fetch', '--depth=1', 'origin', rev)
10978
+
10979
+ # This fetch shouldn't be depth=1 - git doesn't reuse local data with shallow fetches.
10980
+ await self._call('git', 'fetch', 'origin', rev)
10971
10981
 
10972
10982
  #
10973
10983
 
@@ -11125,7 +11135,7 @@ class DeploySystemdManager:
11125
11135
 
11126
11136
  #
11127
11137
 
11128
- if sys.platform == 'linux':
11138
+ if sys.platform == 'linux' and shutil.which('systemctl') is not None:
11129
11139
  async def reload() -> None:
11130
11140
  await asyncio_subprocesses.check_call('systemctl', '--user', 'daemon-reload')
11131
11141
 
@@ -11614,6 +11624,8 @@ class DeployAppManager(DeployPathOwner):
11614
11624
  spec: DeployAppSpec,
11615
11625
  home: DeployHome,
11616
11626
  tags: DeployTagMap,
11627
+ *,
11628
+ conf_string_ns: ta.Optional[ta.Mapping[str, ta.Any]] = None,
11617
11629
  ) -> PreparedApp:
11618
11630
  spec_json = json_dumps_pretty(self._msh.marshal_obj(spec))
11619
11631
 
@@ -11670,9 +11682,17 @@ class DeployAppManager(DeployPathOwner):
11670
11682
  if spec.conf is not None:
11671
11683
  conf_dir = os.path.join(app_dir, 'conf')
11672
11684
  rkw.update(conf_dir=conf_dir)
11685
+
11686
+ conf_ns: ta.Dict[str, ta.Any] = dict(
11687
+ **(conf_string_ns or {}),
11688
+ app=spec.app.s,
11689
+ app_dir=app_dir.rstrip('/'),
11690
+ )
11691
+
11673
11692
  await self._conf.write_app_conf(
11674
11693
  spec.conf,
11675
11694
  conf_dir,
11695
+ string_ns=conf_ns,
11676
11696
  )
11677
11697
 
11678
11698
  #
@@ -11735,7 +11755,7 @@ class DeployAppManager(DeployPathOwner):
11735
11755
  ##
11736
11756
 
11737
11757
 
11738
- DEPLOY_TAG_DATETIME_FMT = '%Y%m%dT%H%M%SZ'
11758
+ DEPLOY_TAG_DATETIME_FMT = '%Y-%m-%d-T-%H-%M-%S-%f-Z'
11739
11759
 
11740
11760
 
11741
11761
  DeployManagerUtcClock = ta.NewType('DeployManagerUtcClock', Func0[datetime.datetime])
@@ -11888,8 +11908,9 @@ class DeployDriver:
11888
11908
 
11889
11909
  das: ta.Set[DeployApp] = {a.app for a in self._spec.apps}
11890
11910
  las: ta.Set[DeployApp] = set(self._spec.app_links.apps)
11891
- if (ras := das & las):
11892
- raise RuntimeError(f'Must not specify apps as both deploy and link: {sorted(a.s for a in ras)}')
11911
+ ras: ta.Set[DeployApp] = set(self._spec.app_links.removed_apps)
11912
+ check.empty(das & (las | ras))
11913
+ check.empty(las & ras)
11893
11914
 
11894
11915
  #
11895
11916
 
@@ -11935,10 +11956,10 @@ class DeployDriver:
11935
11956
  cad = abs_real_path(os.path.join(current_link, 'apps'))
11936
11957
  if os.path.exists(cad):
11937
11958
  for d in os.listdir(cad):
11938
- if (da := DeployApp(d)) not in das:
11959
+ if (da := DeployApp(d)) not in das and da not in ras:
11939
11960
  las.add(da)
11940
11961
 
11941
- for la in self._spec.app_links.apps:
11962
+ for la in las:
11942
11963
  await self._drive_app_link(
11943
11964
  la,
11944
11965
  current_link,
@@ -11968,10 +11989,16 @@ class DeployDriver:
11968
11989
  #
11969
11990
 
11970
11991
  async def _drive_app_deploy(self, app: DeployAppSpec) -> None:
11992
+ current_deploy_link = os.path.join(self._home, self._deploys.CURRENT_DEPLOY_LINK.render())
11993
+
11971
11994
  pa = await self._apps.prepare_app(
11972
11995
  app,
11973
11996
  self._home,
11974
11997
  self.tags,
11998
+ conf_string_ns=dict(
11999
+ deploy_home=self._home,
12000
+ current_deploy_link=current_deploy_link,
12001
+ ),
11975
12002
  )
11976
12003
 
11977
12004
  #
@@ -6481,6 +6481,12 @@ class ServerConfig:
6481
6481
  # TODO: implement - make sure to accept broken symlinks
6482
6482
  group_config_dirs: ta.Optional[ta.Sequence[str]] = None
6483
6483
 
6484
+ #
6485
+
6486
+ http_port: ta.Optional[int] = None
6487
+
6488
+ #
6489
+
6484
6490
  @classmethod
6485
6491
  def new(
6486
6492
  cls,
@@ -8354,7 +8360,7 @@ class HttpServer(HasDispatchers):
8354
8360
  def __init__(
8355
8361
  self,
8356
8362
  handler: Handler,
8357
- addr: Address = Address(('localhost', 8000)),
8363
+ addr: Address, # = Address(('localhost', 8000)),
8358
8364
  *,
8359
8365
  exit_stack: contextlib.ExitStack,
8360
8366
  ) -> None:
@@ -9617,16 +9623,19 @@ def bind_server(
9617
9623
 
9618
9624
  #
9619
9625
 
9620
- def _provide_http_handler(s: SupervisorHttpHandler) -> HttpServer.Handler:
9621
- return HttpServer.Handler(s.handle)
9626
+ if config.http_port is not None:
9627
+ def _provide_http_handler(s: SupervisorHttpHandler) -> HttpServer.Handler:
9628
+ return HttpServer.Handler(s.handle)
9622
9629
 
9623
- lst.extend([
9624
- inj.bind(HttpServer, singleton=True, eager=True),
9625
- inj.bind(HasDispatchers, array=True, to_key=HttpServer),
9630
+ lst.extend([
9631
+ inj.bind(HttpServer, singleton=True, eager=True),
9632
+ inj.bind(HasDispatchers, array=True, to_key=HttpServer),
9626
9633
 
9627
- inj.bind(SupervisorHttpHandler, singleton=True),
9628
- inj.bind(_provide_http_handler),
9629
- ])
9634
+ inj.bind(HttpServer.Address(('localhost', config.http_port))),
9635
+
9636
+ inj.bind(SupervisorHttpHandler, singleton=True),
9637
+ inj.bind(_provide_http_handler),
9638
+ ])
9630
9639
 
9631
9640
  #
9632
9641
 
@@ -248,6 +248,12 @@ class ServerConfig:
248
248
  # TODO: implement - make sure to accept broken symlinks
249
249
  group_config_dirs: ta.Optional[ta.Sequence[str]] = None
250
250
 
251
+ #
252
+
253
+ http_port: ta.Optional[int] = None
254
+
255
+ #
256
+
251
257
  @classmethod
252
258
  def new(
253
259
  cls,
@@ -60,7 +60,7 @@ class HttpServer(HasDispatchers):
60
60
  def __init__(
61
61
  self,
62
62
  handler: Handler,
63
- addr: Address = Address(('localhost', 8000)),
63
+ addr: Address, # = Address(('localhost', 8000)),
64
64
  *,
65
65
  exit_stack: contextlib.ExitStack,
66
66
  ) -> None:
@@ -131,16 +131,19 @@ def bind_server(
131
131
 
132
132
  #
133
133
 
134
- def _provide_http_handler(s: SupervisorHttpHandler) -> HttpServer.Handler:
135
- return HttpServer.Handler(s.handle)
134
+ if config.http_port is not None:
135
+ def _provide_http_handler(s: SupervisorHttpHandler) -> HttpServer.Handler:
136
+ return HttpServer.Handler(s.handle)
136
137
 
137
- lst.extend([
138
- inj.bind(HttpServer, singleton=True, eager=True),
139
- inj.bind(HasDispatchers, array=True, to_key=HttpServer),
138
+ lst.extend([
139
+ inj.bind(HttpServer, singleton=True, eager=True),
140
+ inj.bind(HasDispatchers, array=True, to_key=HttpServer),
140
141
 
141
- inj.bind(SupervisorHttpHandler, singleton=True),
142
- inj.bind(_provide_http_handler),
143
- ])
142
+ inj.bind(HttpServer.Address(('localhost', config.http_port))),
143
+
144
+ inj.bind(SupervisorHttpHandler, singleton=True),
145
+ inj.bind(_provide_http_handler),
146
+ ])
144
147
 
145
148
  #
146
149
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ominfra
3
- Version: 0.0.0.dev191
3
+ Version: 0.0.0.dev192
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.dev191
16
- Requires-Dist: omlish==0.0.0.dev191
17
- Requires-Dist: omserv==0.0.0.dev191
15
+ Requires-Dist: omdev==0.0.0.dev192
16
+ Requires-Dist: omlish==0.0.0.dev192
17
+ Requires-Dist: omserv==0.0.0.dev192
18
18
  Provides-Extra: all
19
19
  Requires-Dist: paramiko~=3.5; extra == "all"
20
20
  Requires-Dist: asyncssh~=2.18; extra == "all"
@@ -45,24 +45,24 @@ ominfra/manage/commands/ping.py,sha256=DVZFzL1Z_f-Bq53vxMrL3xOi0iK_nMonJE4KvQf9w
45
45
  ominfra/manage/commands/subprocess.py,sha256=yHGMbAI-xKe_9BUs5IZ3Yav8qRE-I9aGnBtTwW15Pnw,2440
46
46
  ominfra/manage/commands/types.py,sha256=XFZPeqeIBAaIIQF3pdPbGxLlb-LCrz6WtlDWO2q_vz0,210
47
47
  ominfra/manage/deploy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- ominfra/manage/deploy/apps.py,sha256=yvzY40Tk3dtNpIaqabyAxcm2LyE4UD3sI9pH64UaWek,4557
48
+ ominfra/manage/deploy/apps.py,sha256=T0eU0Jw-h33_ZPIs0zy9DOx_fgs3YSAAGzu-H0pvt2U,4865
49
49
  ominfra/manage/deploy/commands.py,sha256=OVZzSY4EP_SD7KJRkIIPeqUxcV4mcwrc_WYNvM16ahM,830
50
50
  ominfra/manage/deploy/config.py,sha256=kPpl8TRisz295cM4oj-RHA6oh5jdcJ_N9pVpkl_doO8,114
51
- ominfra/manage/deploy/deploy.py,sha256=JXyeO0ZukcJYzMkY4h9wO2pKVzkfzgKZReuHWi_qS0w,8713
52
- ominfra/manage/deploy/git.py,sha256=g4wzUuSu9HwWSDhdVX-7BvA2htMwtWbRcHaoDy-xOJ4,3960
51
+ ominfra/manage/deploy/deploy.py,sha256=YRr_0OPIZJ9LnOeMaHYCSSvqh81a5_LB7OZy-bR2GeA,8966
52
+ ominfra/manage/deploy/git.py,sha256=AnZCUuJt9infrWLAgxwELSEJVkDACNwQCen2Qi81-IA,4047
53
53
  ominfra/manage/deploy/inject.py,sha256=lVNik0CfQMd31fiqzFlM828oQKVUTJY-zTmU1pGOopQ,3467
54
54
  ominfra/manage/deploy/inject_.py,sha256=LR7gEkVx2ldUoQZsGvIcm1Y4QXCVDnLIAdc3LHhQiD4,392
55
55
  ominfra/manage/deploy/interp.py,sha256=_5fuHrY5ZA0eGbnNcOqAhAMSWI1UNvbm0l29eDjE5fI,1037
56
56
  ominfra/manage/deploy/nginx.py,sha256=cU9GjWMSxqeNhbuSBZYRuBXUokiRiY4OWMLAgbj_4m4,89
57
- ominfra/manage/deploy/specs.py,sha256=1N1HHx_956sap4rFihsK6u71f0wGqn-eDaXrTkJkBeA,2819
58
- ominfra/manage/deploy/systemd.py,sha256=MIb8RWljBgJ22WXMlapzLYBVrYJtD04G3pI297GIFD0,3556
57
+ ominfra/manage/deploy/specs.py,sha256=0mZnMeMYLChcryXQhQ1V72zr8ooCWaw9AMvnPVJBZFE,2866
58
+ ominfra/manage/deploy/systemd.py,sha256=5hJ6d2zT24zBMUkuJwkhsvm7r4MqNBtm4_ov0kF2Jus,3612
59
59
  ominfra/manage/deploy/tags.py,sha256=h2kJEmizzeKcn7hG-oKnakCquS87xw8EPb2nkB-XkaI,5118
60
60
  ominfra/manage/deploy/tmp.py,sha256=FqXoVpIpVe8-KWNu7kXt37A4jKdK_y7h_YFvtrUoOG8,729
61
61
  ominfra/manage/deploy/types.py,sha256=ZcIoheZ3zW7n0IZiqTRW_Uo3JyWWeWg5nyKGryvGc2I,112
62
62
  ominfra/manage/deploy/venvs.py,sha256=PlvhyhZavgiSwGt8BXrhoSwQFVKpU0zCtq2C2N1_8Ak,1696
63
63
  ominfra/manage/deploy/conf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
64
  ominfra/manage/deploy/conf/inject.py,sha256=xHZQr7oaJCxaKgpJ0H-hgiQNGt4QsskhT3f5v7xrFwE,451
65
- ominfra/manage/deploy/conf/manager.py,sha256=fwuMnH-1Iou3Zwz5lcM70F5dyULueAl-lzDKvGTbsCk,8084
65
+ ominfra/manage/deploy/conf/manager.py,sha256=ZJPwLuly5Jwd6-42umv_hDNr3J86zNrZkNU-RuM0ees,8302
66
66
  ominfra/manage/deploy/conf/specs.py,sha256=AWeofV1YbcNZS-7WX7EpsX8i_7stJAXndXktB6fDWw8,2187
67
67
  ominfra/manage/deploy/paths/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
68
  ominfra/manage/deploy/paths/inject.py,sha256=X81C-Qhef1LQ7tILWvkomBwFTvgooLVmWRnKL7TeVoI,596
@@ -94,20 +94,20 @@ ominfra/manage/targets/inject.py,sha256=P4597xWM-V3I_gCt2O71OLhYQkkXtuJvkYRsIbhh
94
94
  ominfra/manage/targets/targets.py,sha256=7GP6UAZyJFEhpkJN6UQdpr_WN3p7C76v-s445y-WB6U,1885
95
95
  ominfra/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
96
  ominfra/scripts/journald2aws.py,sha256=jxBI2ETft-GMJn0hFwV_lZgT55tj2kqKl0PszxUkOg8,158938
97
- ominfra/scripts/manage.py,sha256=sWdkSTm4Q3JinJn7MJSIXTk5FA2xh5I5k4U-ru-97RA,345127
98
- ominfra/scripts/supervisor.py,sha256=nFPSB-NGQeoHwAA5UCAvcgy6sUWh4UtuQbhVZShk7wI,283226
97
+ ominfra/scripts/manage.py,sha256=_C2fwegFHqx7OK0dfPZ631HwZHYfCYubi24sDHwSk4U,346082
98
+ ominfra/scripts/supervisor.py,sha256=5Nskq1fVdgwXvRXojDmkMO3JlcfQkxOwJ5vgexFi9EE,283429
99
99
  ominfra/supervisor/LICENSE.txt,sha256=yvqaMNsDhWxziHa9ien6qCW1SkZv-DQlAg96XjfSee8,1746
100
100
  ominfra/supervisor/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
101
101
  ominfra/supervisor/__main__.py,sha256=I0yFw-C08OOiZ3BF6lF1Oiv789EQXu-_j6whDhQUTEA,66
102
- ominfra/supervisor/configs.py,sha256=UxcZ1yaw7CiwiSb7A1AegwcWKFXqtswaKaHlIN8Bt_Q,13771
102
+ ominfra/supervisor/configs.py,sha256=rA32edDnkfcUYSUPVRG4QIoGwCvnhstaNN2jTXvoqt4,13825
103
103
  ominfra/supervisor/dispatchers.py,sha256=zXLwQS4Vc6dWw5o9QOL04UMDt7w6CKu9wf19CjUiS2Q,1005
104
104
  ominfra/supervisor/dispatchersimpl.py,sha256=q3dEyOHWTPKm28nmAGisjgIW1BX6O3-SzbYa7nWuTEs,11349
105
105
  ominfra/supervisor/events.py,sha256=XGrtzHr1xm0dwjz329fn9eR0_Ap-LQL6Sk8LJ8eVDEo,6692
106
106
  ominfra/supervisor/exceptions.py,sha256=Qbu211H3CLlSmi9LsSikOwrcL5HgJP9ugvcKWlGTAoI,750
107
107
  ominfra/supervisor/groups.py,sha256=MBbsbt8Zh_WEYkGOr1KXa82gnPVw9wPB2lAnqhugXSc,2457
108
108
  ominfra/supervisor/groupsimpl.py,sha256=PCDyc_Wc-pnvIj56_aEyiA5exCpK6n9iErqnJzO2rZk,2281
109
- ominfra/supervisor/http.py,sha256=_5wiB0DpLzqsPTHn9DkWqhrNSVQSbbIiwsCuSEtosoM,3449
110
- ominfra/supervisor/inject.py,sha256=6nBEnpE8VLjtYK12z5DGRP7WzgbwLAz5yf__1KnJl6g,4693
109
+ ominfra/supervisor/http.py,sha256=Tl5eT6dyf4KuQXKbhGo1B6CFEzUDtPl_DZAuUFVD9zI,3453
110
+ ominfra/supervisor/inject.py,sha256=IeR-WKvK1sGNxMe6G2OBT5kSP7EUP5ipkDgcUFmDPCA,4838
111
111
  ominfra/supervisor/io.py,sha256=moaGNaPuYXEAUzLg8Qjo05DEIcOUNYUj8SSr8eT0d24,3198
112
112
  ominfra/supervisor/main.py,sha256=7YrreFNntdRCp6MplCclfnRcgrRIb_UCeohJkDC9Few,4251
113
113
  ominfra/supervisor/pipes.py,sha256=2ZihNTnRNjnIPOtPbm3_pyqO15f7BNs7WnNtO5V8ahM,2231
@@ -137,9 +137,9 @@ ominfra/tailscale/api.py,sha256=C5-t_b6jZXUWcy5k8bXm7CFnk73pSdrlMOgGDeGVrpw,1370
137
137
  ominfra/tailscale/cli.py,sha256=3FnJbgpLw6gInTfhERd1mDy9ijjMUGxkdYVo43Tnxx4,3555
138
138
  ominfra/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
139
139
  ominfra/tools/listresources.py,sha256=4qVg5txsb10EHhvqXXeM6gJ2jx9LbroEnPydDv1uXs0,6176
140
- ominfra-0.0.0.dev191.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
141
- ominfra-0.0.0.dev191.dist-info/METADATA,sha256=88HCm4Rj1RAfAyjlC5T8wpwxPcfiy_kieXZBY5bUM0E,767
142
- ominfra-0.0.0.dev191.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
143
- ominfra-0.0.0.dev191.dist-info/entry_points.txt,sha256=kgecQ2MgGrM9qK744BoKS3tMesaC3yjLnl9pa5CRczg,37
144
- ominfra-0.0.0.dev191.dist-info/top_level.txt,sha256=E-b2OHkk_AOBLXHYZQ2EOFKl-_6uOGd8EjeG-Zy6h_w,8
145
- ominfra-0.0.0.dev191.dist-info/RECORD,,
140
+ ominfra-0.0.0.dev192.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
141
+ ominfra-0.0.0.dev192.dist-info/METADATA,sha256=R7AOfKOeQacurgpdYE4zsQs9JRq0tCFHDEVItCCS5Lg,767
142
+ ominfra-0.0.0.dev192.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
143
+ ominfra-0.0.0.dev192.dist-info/entry_points.txt,sha256=kgecQ2MgGrM9qK744BoKS3tMesaC3yjLnl9pa5CRczg,37
144
+ ominfra-0.0.0.dev192.dist-info/top_level.txt,sha256=E-b2OHkk_AOBLXHYZQ2EOFKl-_6uOGd8EjeG-Zy6h_w,8
145
+ ominfra-0.0.0.dev192.dist-info/RECORD,,