ominfra 0.0.0.dev78__tar.gz → 0.0.0.dev80__tar.gz
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.
- {ominfra-0.0.0.dev78/ominfra.egg-info → ominfra-0.0.0.dev80}/PKG-INFO +3 -3
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/scripts/supervisor.py +65 -58
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/supervisor/poller.py +67 -59
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80/ominfra.egg-info}/PKG-INFO +3 -3
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra.egg-info/requires.txt +2 -2
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/pyproject.toml +3 -3
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/LICENSE +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/MANIFEST.in +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/README.rst +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/.manifests.json +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/__about__.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/__init__.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/clouds/__init__.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/clouds/aws/__init__.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/clouds/aws/__main__.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/clouds/aws/auth.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/clouds/aws/cli.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/clouds/aws/dataclasses.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/clouds/aws/journald2aws/__init__.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/clouds/aws/journald2aws/journald.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/clouds/aws/logs.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/clouds/aws/metadata.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/cmds.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/__init__.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/_executor.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/configs.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/executor/__init__.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/executor/base.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/executor/concerns/__init__.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/executor/concerns/dirs.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/executor/concerns/nginx.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/executor/concerns/repo.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/executor/concerns/supervisor.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/executor/concerns/systemd.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/executor/concerns/user.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/executor/concerns/venv.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/executor/main.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/poly/__init__.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/poly/_main.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/poly/base.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/poly/configs.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/poly/deploy.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/poly/main.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/poly/nginx.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/poly/repo.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/poly/runtime.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/poly/site.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/poly/supervisor.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/poly/venv.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/deploy/remote.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/manage/__init__.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/manage/manage.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/pyremote/__init__.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/pyremote/_runcommands.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/pyremote/bootstrap.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/pyremote/runcommands.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/scripts/__init__.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/ssh.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/supervisor/__init__.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/supervisor/__main__.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/supervisor/compat.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/supervisor/configs.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/supervisor/context.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/supervisor/datatypes.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/supervisor/dispatchers.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/supervisor/events.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/supervisor/exceptions.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/supervisor/process.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/supervisor/states.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/supervisor/supervisor.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/supervisor/types.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/tailscale/__init__.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/tailscale/cli.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/tools/__init__.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra/tools/listresources.py +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra.egg-info/SOURCES.txt +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra.egg-info/dependency_links.txt +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra.egg-info/entry_points.txt +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/ominfra.egg-info/top_level.txt +0 -0
- {ominfra-0.0.0.dev78 → ominfra-0.0.0.dev80}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ominfra
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev80
|
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.
|
16
|
-
Requires-Dist: omlish==0.0.0.
|
15
|
+
Requires-Dist: omdev==0.0.0.dev80
|
16
|
+
Requires-Dist: omlish==0.0.0.dev80
|
17
17
|
Provides-Extra: all
|
18
18
|
Requires-Dist: paramiko~=3.5; extra == "all"
|
19
19
|
Requires-Dist: asyncssh~=2.17; python_version < "3.13" and extra == "all"
|
@@ -596,81 +596,88 @@ class PollPoller(BasePoller):
|
|
596
596
|
return False
|
597
597
|
|
598
598
|
|
599
|
-
|
600
|
-
|
599
|
+
if sys.platform == 'darwin' or sys.platform.startswith('freebsd'):
|
600
|
+
class KqueuePoller(BasePoller):
|
601
|
+
max_events = 1000
|
601
602
|
|
602
|
-
|
603
|
-
|
603
|
+
def __init__(self) -> None:
|
604
|
+
super().__init__()
|
604
605
|
|
605
|
-
|
606
|
-
|
607
|
-
|
606
|
+
self._kqueue: ta.Optional[ta.Any] = select.kqueue()
|
607
|
+
self._readables: set[int] = set()
|
608
|
+
self._writables: set[int] = set()
|
608
609
|
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
610
|
+
def register_readable(self, fd: int) -> None:
|
611
|
+
self._readables.add(fd)
|
612
|
+
kevent = select.kevent(fd, filter=select.KQ_FILTER_READ, flags=select.KQ_EV_ADD)
|
613
|
+
self._kqueue_control(fd, kevent)
|
613
614
|
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
615
|
+
def register_writable(self, fd: int) -> None:
|
616
|
+
self._writables.add(fd)
|
617
|
+
kevent = select.kevent(fd, filter=select.KQ_FILTER_WRITE, flags=select.KQ_EV_ADD)
|
618
|
+
self._kqueue_control(fd, kevent)
|
618
619
|
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
620
|
+
def unregister_readable(self, fd: int) -> None:
|
621
|
+
kevent = select.kevent(fd, filter=select.KQ_FILTER_READ, flags=select.KQ_EV_DELETE)
|
622
|
+
self._readables.discard(fd)
|
623
|
+
self._kqueue_control(fd, kevent)
|
623
624
|
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
625
|
+
def unregister_writable(self, fd: int) -> None:
|
626
|
+
kevent = select.kevent(fd, filter=select.KQ_FILTER_WRITE, flags=select.KQ_EV_DELETE)
|
627
|
+
self._writables.discard(fd)
|
628
|
+
self._kqueue_control(fd, kevent)
|
628
629
|
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
630
|
+
def _kqueue_control(self, fd: int, kevent: 'select.kevent') -> None:
|
631
|
+
try:
|
632
|
+
self._kqueue.control([kevent], 0) # type: ignore
|
633
|
+
except OSError as error:
|
634
|
+
if error.errno == errno.EBADF:
|
635
|
+
log.debug('EBADF encountered in kqueue. Invalid file descriptor %s', fd)
|
636
|
+
else:
|
637
|
+
raise
|
637
638
|
|
638
|
-
|
639
|
-
|
639
|
+
def poll(self, timeout: ta.Optional[float]) -> ta.Tuple[ta.List[int], ta.List[int]]:
|
640
|
+
readables, writables = [], [] # type: ignore
|
640
641
|
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
642
|
+
try:
|
643
|
+
kevents = self._kqueue.control(None, self.max_events, timeout) # type: ignore
|
644
|
+
except OSError as error:
|
645
|
+
if error.errno == errno.EINTR:
|
646
|
+
log.debug('EINTR encountered in poll')
|
647
|
+
return readables, writables
|
648
|
+
raise
|
648
649
|
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
650
|
+
for kevent in kevents:
|
651
|
+
if kevent.filter == select.KQ_FILTER_READ:
|
652
|
+
readables.append(kevent.ident)
|
653
|
+
if kevent.filter == select.KQ_FILTER_WRITE:
|
654
|
+
writables.append(kevent.ident)
|
654
655
|
|
655
|
-
|
656
|
+
return readables, writables
|
656
657
|
|
657
|
-
|
658
|
-
|
658
|
+
def before_daemonize(self) -> None:
|
659
|
+
self.close()
|
659
660
|
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
661
|
+
def after_daemonize(self) -> None:
|
662
|
+
self._kqueue = select.kqueue()
|
663
|
+
for fd in self._readables:
|
664
|
+
self.register_readable(fd)
|
665
|
+
for fd in self._writables:
|
666
|
+
self.register_writable(fd)
|
666
667
|
|
667
|
-
|
668
|
-
|
669
|
-
|
668
|
+
def close(self) -> None:
|
669
|
+
self._kqueue.close() # type: ignore
|
670
|
+
self._kqueue = None
|
671
|
+
|
672
|
+
else:
|
673
|
+
KqueuePoller = None
|
670
674
|
|
671
675
|
|
672
676
|
Poller: ta.Type[BasePoller]
|
673
|
-
if
|
677
|
+
if (
|
678
|
+
sys.platform == 'darwin' or sys.platform.startswith('freebsd') and
|
679
|
+
hasattr(select, 'kqueue') and KqueuePoller is not None
|
680
|
+
):
|
674
681
|
Poller = KqueuePoller
|
675
682
|
elif hasattr(select, 'poll'):
|
676
683
|
Poller = PollPoller
|
@@ -3,6 +3,7 @@ import abc
|
|
3
3
|
import errno
|
4
4
|
import logging
|
5
5
|
import select
|
6
|
+
import sys
|
6
7
|
import typing as ta
|
7
8
|
|
8
9
|
|
@@ -150,81 +151,88 @@ class PollPoller(BasePoller):
|
|
150
151
|
return False
|
151
152
|
|
152
153
|
|
153
|
-
|
154
|
-
|
154
|
+
if sys.platform == 'darwin' or sys.platform.startswith('freebsd'):
|
155
|
+
class KqueuePoller(BasePoller):
|
156
|
+
max_events = 1000
|
155
157
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
self._kqueue: ta.Optional[ta.Any] = select.kqueue()
|
160
|
-
self._readables: set[int] = set()
|
161
|
-
self._writables: set[int] = set()
|
158
|
+
def __init__(self) -> None:
|
159
|
+
super().__init__()
|
162
160
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
self._kqueue_control(fd, kevent)
|
161
|
+
self._kqueue: ta.Optional[ta.Any] = select.kqueue()
|
162
|
+
self._readables: set[int] = set()
|
163
|
+
self._writables: set[int] = set()
|
167
164
|
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
165
|
+
def register_readable(self, fd: int) -> None:
|
166
|
+
self._readables.add(fd)
|
167
|
+
kevent = select.kevent(fd, filter=select.KQ_FILTER_READ, flags=select.KQ_EV_ADD)
|
168
|
+
self._kqueue_control(fd, kevent)
|
172
169
|
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
170
|
+
def register_writable(self, fd: int) -> None:
|
171
|
+
self._writables.add(fd)
|
172
|
+
kevent = select.kevent(fd, filter=select.KQ_FILTER_WRITE, flags=select.KQ_EV_ADD)
|
173
|
+
self._kqueue_control(fd, kevent)
|
177
174
|
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
175
|
+
def unregister_readable(self, fd: int) -> None:
|
176
|
+
kevent = select.kevent(fd, filter=select.KQ_FILTER_READ, flags=select.KQ_EV_DELETE)
|
177
|
+
self._readables.discard(fd)
|
178
|
+
self._kqueue_control(fd, kevent)
|
182
179
|
|
183
|
-
|
184
|
-
|
185
|
-
self.
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
180
|
+
def unregister_writable(self, fd: int) -> None:
|
181
|
+
kevent = select.kevent(fd, filter=select.KQ_FILTER_WRITE, flags=select.KQ_EV_DELETE)
|
182
|
+
self._writables.discard(fd)
|
183
|
+
self._kqueue_control(fd, kevent)
|
184
|
+
|
185
|
+
def _kqueue_control(self, fd: int, kevent: 'select.kevent') -> None:
|
186
|
+
try:
|
187
|
+
self._kqueue.control([kevent], 0) # type: ignore
|
188
|
+
except OSError as error:
|
189
|
+
if error.errno == errno.EBADF:
|
190
|
+
log.debug('EBADF encountered in kqueue. Invalid file descriptor %s', fd)
|
191
|
+
else:
|
192
|
+
raise
|
193
|
+
|
194
|
+
def poll(self, timeout: ta.Optional[float]) -> ta.Tuple[ta.List[int], ta.List[int]]:
|
195
|
+
readables, writables = [], [] # type: ignore
|
196
|
+
|
197
|
+
try:
|
198
|
+
kevents = self._kqueue.control(None, self.max_events, timeout) # type: ignore
|
199
|
+
except OSError as error:
|
200
|
+
if error.errno == errno.EINTR:
|
201
|
+
log.debug('EINTR encountered in poll')
|
202
|
+
return readables, writables
|
190
203
|
raise
|
191
204
|
|
192
|
-
|
193
|
-
|
205
|
+
for kevent in kevents:
|
206
|
+
if kevent.filter == select.KQ_FILTER_READ:
|
207
|
+
readables.append(kevent.ident)
|
208
|
+
if kevent.filter == select.KQ_FILTER_WRITE:
|
209
|
+
writables.append(kevent.ident)
|
194
210
|
|
195
|
-
|
196
|
-
kevents = self._kqueue.control(None, self.max_events, timeout) # type: ignore
|
197
|
-
except OSError as error:
|
198
|
-
if error.errno == errno.EINTR:
|
199
|
-
log.debug('EINTR encountered in poll')
|
200
|
-
return readables, writables
|
201
|
-
raise
|
211
|
+
return readables, writables
|
202
212
|
|
203
|
-
|
204
|
-
|
205
|
-
readables.append(kevent.ident)
|
206
|
-
if kevent.filter == select.KQ_FILTER_WRITE:
|
207
|
-
writables.append(kevent.ident)
|
213
|
+
def before_daemonize(self) -> None:
|
214
|
+
self.close()
|
208
215
|
|
209
|
-
|
216
|
+
def after_daemonize(self) -> None:
|
217
|
+
self._kqueue = select.kqueue()
|
218
|
+
for fd in self._readables:
|
219
|
+
self.register_readable(fd)
|
220
|
+
for fd in self._writables:
|
221
|
+
self.register_writable(fd)
|
210
222
|
|
211
|
-
|
212
|
-
|
223
|
+
def close(self) -> None:
|
224
|
+
self._kqueue.close() # type: ignore
|
225
|
+
self._kqueue = None
|
213
226
|
|
214
|
-
|
215
|
-
|
216
|
-
for fd in self._readables:
|
217
|
-
self.register_readable(fd)
|
218
|
-
for fd in self._writables:
|
219
|
-
self.register_writable(fd)
|
220
|
-
|
221
|
-
def close(self) -> None:
|
222
|
-
self._kqueue.close() # type: ignore
|
223
|
-
self._kqueue = None
|
227
|
+
else:
|
228
|
+
KqueuePoller = None
|
224
229
|
|
225
230
|
|
226
231
|
Poller: ta.Type[BasePoller]
|
227
|
-
if
|
232
|
+
if (
|
233
|
+
sys.platform == 'darwin' or sys.platform.startswith('freebsd') and
|
234
|
+
hasattr(select, 'kqueue') and KqueuePoller is not None
|
235
|
+
):
|
228
236
|
Poller = KqueuePoller
|
229
237
|
elif hasattr(select, 'poll'):
|
230
238
|
Poller = PollPoller
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ominfra
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev80
|
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.
|
16
|
-
Requires-Dist: omlish==0.0.0.
|
15
|
+
Requires-Dist: omdev==0.0.0.dev80
|
16
|
+
Requires-Dist: omlish==0.0.0.dev80
|
17
17
|
Provides-Extra: all
|
18
18
|
Requires-Dist: paramiko~=3.5; extra == "all"
|
19
19
|
Requires-Dist: asyncssh~=2.17; python_version < "3.13" and extra == "all"
|
@@ -12,7 +12,7 @@ authors = [
|
|
12
12
|
urls = {source = 'https://github.com/wrmsr/omlish'}
|
13
13
|
license = {text = 'BSD-3-Clause'}
|
14
14
|
requires-python = '~=3.12'
|
15
|
-
version = '0.0.0.
|
15
|
+
version = '0.0.0.dev80'
|
16
16
|
classifiers = [
|
17
17
|
'License :: OSI Approved :: BSD License',
|
18
18
|
'Development Status :: 2 - Pre-Alpha',
|
@@ -22,8 +22,8 @@ classifiers = [
|
|
22
22
|
]
|
23
23
|
description = 'ominfra'
|
24
24
|
dependencies = [
|
25
|
-
'omdev == 0.0.0.
|
26
|
-
'omlish == 0.0.0.
|
25
|
+
'omdev == 0.0.0.dev80',
|
26
|
+
'omlish == 0.0.0.dev80',
|
27
27
|
]
|
28
28
|
|
29
29
|
[project.optional-dependencies]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|