ominfra 0.0.0.dev191__py3-none-any.whl → 0.0.0.dev192__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,,