ominfra 0.0.0.dev471__tar.gz → 0.0.0.dev472__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.dev471/ominfra.egg-info → ominfra-0.0.0.dev472}/PKG-INFO +3 -3
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/scripts/journald2aws.py +52 -25
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/scripts/manage.py +52 -25
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/scripts/supervisor.py +52 -25
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472/ominfra.egg-info}/PKG-INFO +3 -3
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra.egg-info/requires.txt +2 -2
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/pyproject.toml +3 -3
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/LICENSE +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/MANIFEST.in +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/README.md +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/.omlish-manifests.json +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/__about__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/__main__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/auth.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/cli.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/dataclasses.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/instancetypes/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/instancetypes/__main__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/instancetypes/cache.json.gz +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/instancetypes/cache.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/instancetypes/cli.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/journald2aws/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/journald2aws/__main__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/journald2aws/cursor.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/journald2aws/driver.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/journald2aws/main.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/journald2aws/poster.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/logs.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/metadata.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/models/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/models/base.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/models/gen/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/models/gen/__main__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/models/gen/cli.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/models/gen/gen.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/models/services/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/models/services/ec2.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/models/services/lambda_.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/models/services/rds.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/models/services/s3.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/models/services/services.toml +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/gcp/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/gcp/api.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/gcp/auth.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/commands/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/commands/runners.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/commands/ssh.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/journald/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/journald/fields.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/journald/genmessages.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/journald/messages.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/journald/tailer.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/__main__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/bootstrap.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/bootstrap_.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/commands/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/commands/base.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/commands/inject.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/commands/injection.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/commands/local.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/commands/marshal.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/commands/ping.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/commands/subprocess.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/commands/types.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/config.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/apps.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/commands.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/conf/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/conf/inject.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/conf/manager.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/conf/specs.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/config.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/deploy.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/git.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/inject.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/injection.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/interp.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/nginx.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/paths/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/paths/inject.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/paths/manager.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/paths/owners.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/paths/paths.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/paths/specs.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/paths/types.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/specs.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/systemd.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/tags.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/tmp.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/types.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/deploy/venvs.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/inject.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/main.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/marshal.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/remote/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/remote/_main.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/remote/channel.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/remote/config.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/remote/connection.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/remote/execution.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/remote/inject.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/remote/payload.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/remote/spawning.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/system/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/system/commands.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/system/config.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/system/inject.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/system/packages.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/system/platforms.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/targets/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/targets/bestpython.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/targets/bestpython.sh +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/targets/connection.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/targets/inject.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/manage/targets/targets.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/pyremote.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/scripts/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/LICENSE.txt +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/__main__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/configs.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/dispatchers.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/dispatchersimpl.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/errors.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/events.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/groups.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/groupsimpl.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/http.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/inject.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/io.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/main.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/pipes.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/privileges.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/process.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/processimpl.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/setup.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/setupimpl.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/signals.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/spawning.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/spawningimpl.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/states.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/supervisor.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/types.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/utils/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/utils/collections.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/utils/diag.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/utils/fds.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/utils/fs.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/utils/os.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/utils/ostypes.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/utils/signals.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/utils/strings.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/supervisor/utils/users.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/systemd.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/tailscale/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/tailscale/api.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/tailscale/cli.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/threadworkers.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/tools/__init__.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/tools/listresources.py +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra.egg-info/SOURCES.txt +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra.egg-info/dependency_links.txt +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra.egg-info/entry_points.txt +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra.egg-info/top_level.txt +0 -0
- {ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ominfra
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev472
|
|
4
4
|
Summary: ominfra
|
|
5
5
|
Author: wrmsr
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -14,8 +14,8 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
14
14
|
Requires-Python: >=3.13
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
Requires-Dist: omdev==0.0.0.
|
|
18
|
-
Requires-Dist: omlish==0.0.0.
|
|
17
|
+
Requires-Dist: omdev==0.0.0.dev472
|
|
18
|
+
Requires-Dist: omlish==0.0.0.dev472
|
|
19
19
|
Provides-Extra: all
|
|
20
20
|
Requires-Dist: paramiko~=4.0; extra == "all"
|
|
21
21
|
Requires-Dist: asyncssh~=2.21; extra == "all"
|
|
@@ -68,7 +68,7 @@ TomlParseFloat = ta.Callable[[str], ta.Any] # ta.TypeAlias
|
|
|
68
68
|
TomlKey = ta.Tuple[str, ...] # ta.TypeAlias
|
|
69
69
|
TomlPos = int # ta.TypeAlias
|
|
70
70
|
|
|
71
|
-
# ../../../../omlish/lite/
|
|
71
|
+
# ../../../../omlish/lite/abstract.py
|
|
72
72
|
T = ta.TypeVar('T')
|
|
73
73
|
|
|
74
74
|
# ../../../../omlish/lite/cached.py
|
|
@@ -1215,25 +1215,49 @@ def is_abstract_method(obj: ta.Any) -> bool:
|
|
|
1215
1215
|
return bool(getattr(obj, _IS_ABSTRACT_METHOD_ATTR, False))
|
|
1216
1216
|
|
|
1217
1217
|
|
|
1218
|
-
def
|
|
1218
|
+
def compute_abstract_methods(cls: type) -> ta.FrozenSet[str]:
|
|
1219
|
+
# ~> https://github.com/python/cpython/blob/f3476c6507381ca860eec0989f53647b13517423/Modules/_abc.c#L358
|
|
1220
|
+
|
|
1221
|
+
# Stage 1: direct abstract methods
|
|
1222
|
+
|
|
1223
|
+
abstracts = {
|
|
1224
|
+
a
|
|
1225
|
+
# Get items as a list to avoid mutation issues during iteration
|
|
1226
|
+
for a, v in list(cls.__dict__.items())
|
|
1227
|
+
if is_abstract_method(v)
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
# Stage 2: inherited abstract methods
|
|
1231
|
+
|
|
1232
|
+
for base in cls.__bases__:
|
|
1233
|
+
# Get __abstractmethods__ from base if it exists
|
|
1234
|
+
if (base_abstracts := getattr(base, _ABSTRACT_METHODS_ATTR, None)) is None:
|
|
1235
|
+
continue
|
|
1236
|
+
|
|
1237
|
+
# Iterate over abstract methods in base
|
|
1238
|
+
for key in base_abstracts:
|
|
1239
|
+
# Check if this class has an attribute with this name
|
|
1240
|
+
try:
|
|
1241
|
+
value = getattr(cls, key)
|
|
1242
|
+
except AttributeError:
|
|
1243
|
+
# Attribute not found in this class, skip
|
|
1244
|
+
continue
|
|
1245
|
+
|
|
1246
|
+
# Check if it's still abstract
|
|
1247
|
+
if is_abstract_method(value):
|
|
1248
|
+
abstracts.add(key)
|
|
1249
|
+
|
|
1250
|
+
return frozenset(abstracts)
|
|
1251
|
+
|
|
1252
|
+
|
|
1253
|
+
def update_abstracts(cls: ta.Type[T], *, force: bool = False) -> ta.Type[T]:
|
|
1219
1254
|
if not force and not hasattr(cls, _ABSTRACT_METHODS_ATTR):
|
|
1220
1255
|
# Per stdlib: We check for __abstractmethods__ here because cls might by a C implementation or a python
|
|
1221
1256
|
# implementation (especially during testing), and we want to handle both cases.
|
|
1222
1257
|
return cls
|
|
1223
1258
|
|
|
1224
|
-
abstracts
|
|
1225
|
-
|
|
1226
|
-
for scls in cls.__bases__:
|
|
1227
|
-
for name in getattr(scls, _ABSTRACT_METHODS_ATTR, ()):
|
|
1228
|
-
value = getattr(cls, name, None)
|
|
1229
|
-
if getattr(value, _IS_ABSTRACT_METHOD_ATTR, False):
|
|
1230
|
-
abstracts.add(name)
|
|
1231
|
-
|
|
1232
|
-
for name, value in cls.__dict__.items():
|
|
1233
|
-
if getattr(value, _IS_ABSTRACT_METHOD_ATTR, False):
|
|
1234
|
-
abstracts.add(name)
|
|
1235
|
-
|
|
1236
|
-
setattr(cls, _ABSTRACT_METHODS_ATTR, frozenset(abstracts))
|
|
1259
|
+
abstracts = compute_abstract_methods(cls)
|
|
1260
|
+
setattr(cls, _ABSTRACT_METHODS_ATTR, abstracts)
|
|
1237
1261
|
return cls
|
|
1238
1262
|
|
|
1239
1263
|
|
|
@@ -1287,23 +1311,26 @@ class Abstract:
|
|
|
1287
1311
|
super().__init_subclass__(**kwargs)
|
|
1288
1312
|
|
|
1289
1313
|
if not (Abstract in cls.__bases__ or abc.ABC in cls.__bases__):
|
|
1290
|
-
ams
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1314
|
+
if ams := compute_abstract_methods(cls):
|
|
1315
|
+
amd = {
|
|
1316
|
+
a: mcls
|
|
1317
|
+
for mcls in cls.__mro__[::-1]
|
|
1318
|
+
for a in ams
|
|
1319
|
+
if a in mcls.__dict__
|
|
1320
|
+
}
|
|
1296
1321
|
|
|
1297
|
-
if ams:
|
|
1298
1322
|
raise AbstractTypeError(
|
|
1299
1323
|
f'Cannot subclass abstract class {cls.__name__} with abstract methods: ' +
|
|
1300
1324
|
', '.join(sorted([
|
|
1301
1325
|
'.'.join([
|
|
1302
|
-
*([
|
|
1303
|
-
|
|
1326
|
+
*([
|
|
1327
|
+
*([m] if (m := getattr(c, '__module__')) else []),
|
|
1328
|
+
getattr(c, '__qualname__', getattr(c, '__name__')),
|
|
1329
|
+
] if c is not None else '?'),
|
|
1304
1330
|
a,
|
|
1305
1331
|
])
|
|
1306
|
-
for a
|
|
1332
|
+
for a in ams
|
|
1333
|
+
for c in [amd.get(a)]
|
|
1307
1334
|
])),
|
|
1308
1335
|
)
|
|
1309
1336
|
|
|
@@ -91,7 +91,7 @@ TomlParseFloat = ta.Callable[[str], ta.Any] # ta.TypeAlias
|
|
|
91
91
|
TomlKey = ta.Tuple[str, ...] # ta.TypeAlias
|
|
92
92
|
TomlPos = int # ta.TypeAlias
|
|
93
93
|
|
|
94
|
-
# ../../omlish/lite/
|
|
94
|
+
# ../../omlish/lite/abstract.py
|
|
95
95
|
T = ta.TypeVar('T')
|
|
96
96
|
|
|
97
97
|
# ../../omlish/lite/cached.py
|
|
@@ -2395,25 +2395,49 @@ def is_abstract_method(obj: ta.Any) -> bool:
|
|
|
2395
2395
|
return bool(getattr(obj, _IS_ABSTRACT_METHOD_ATTR, False))
|
|
2396
2396
|
|
|
2397
2397
|
|
|
2398
|
-
def
|
|
2398
|
+
def compute_abstract_methods(cls: type) -> ta.FrozenSet[str]:
|
|
2399
|
+
# ~> https://github.com/python/cpython/blob/f3476c6507381ca860eec0989f53647b13517423/Modules/_abc.c#L358
|
|
2400
|
+
|
|
2401
|
+
# Stage 1: direct abstract methods
|
|
2402
|
+
|
|
2403
|
+
abstracts = {
|
|
2404
|
+
a
|
|
2405
|
+
# Get items as a list to avoid mutation issues during iteration
|
|
2406
|
+
for a, v in list(cls.__dict__.items())
|
|
2407
|
+
if is_abstract_method(v)
|
|
2408
|
+
}
|
|
2409
|
+
|
|
2410
|
+
# Stage 2: inherited abstract methods
|
|
2411
|
+
|
|
2412
|
+
for base in cls.__bases__:
|
|
2413
|
+
# Get __abstractmethods__ from base if it exists
|
|
2414
|
+
if (base_abstracts := getattr(base, _ABSTRACT_METHODS_ATTR, None)) is None:
|
|
2415
|
+
continue
|
|
2416
|
+
|
|
2417
|
+
# Iterate over abstract methods in base
|
|
2418
|
+
for key in base_abstracts:
|
|
2419
|
+
# Check if this class has an attribute with this name
|
|
2420
|
+
try:
|
|
2421
|
+
value = getattr(cls, key)
|
|
2422
|
+
except AttributeError:
|
|
2423
|
+
# Attribute not found in this class, skip
|
|
2424
|
+
continue
|
|
2425
|
+
|
|
2426
|
+
# Check if it's still abstract
|
|
2427
|
+
if is_abstract_method(value):
|
|
2428
|
+
abstracts.add(key)
|
|
2429
|
+
|
|
2430
|
+
return frozenset(abstracts)
|
|
2431
|
+
|
|
2432
|
+
|
|
2433
|
+
def update_abstracts(cls: ta.Type[T], *, force: bool = False) -> ta.Type[T]:
|
|
2399
2434
|
if not force and not hasattr(cls, _ABSTRACT_METHODS_ATTR):
|
|
2400
2435
|
# Per stdlib: We check for __abstractmethods__ here because cls might by a C implementation or a python
|
|
2401
2436
|
# implementation (especially during testing), and we want to handle both cases.
|
|
2402
2437
|
return cls
|
|
2403
2438
|
|
|
2404
|
-
abstracts
|
|
2405
|
-
|
|
2406
|
-
for scls in cls.__bases__:
|
|
2407
|
-
for name in getattr(scls, _ABSTRACT_METHODS_ATTR, ()):
|
|
2408
|
-
value = getattr(cls, name, None)
|
|
2409
|
-
if getattr(value, _IS_ABSTRACT_METHOD_ATTR, False):
|
|
2410
|
-
abstracts.add(name)
|
|
2411
|
-
|
|
2412
|
-
for name, value in cls.__dict__.items():
|
|
2413
|
-
if getattr(value, _IS_ABSTRACT_METHOD_ATTR, False):
|
|
2414
|
-
abstracts.add(name)
|
|
2415
|
-
|
|
2416
|
-
setattr(cls, _ABSTRACT_METHODS_ATTR, frozenset(abstracts))
|
|
2439
|
+
abstracts = compute_abstract_methods(cls)
|
|
2440
|
+
setattr(cls, _ABSTRACT_METHODS_ATTR, abstracts)
|
|
2417
2441
|
return cls
|
|
2418
2442
|
|
|
2419
2443
|
|
|
@@ -2467,23 +2491,26 @@ class Abstract:
|
|
|
2467
2491
|
super().__init_subclass__(**kwargs)
|
|
2468
2492
|
|
|
2469
2493
|
if not (Abstract in cls.__bases__ or abc.ABC in cls.__bases__):
|
|
2470
|
-
ams
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
2494
|
+
if ams := compute_abstract_methods(cls):
|
|
2495
|
+
amd = {
|
|
2496
|
+
a: mcls
|
|
2497
|
+
for mcls in cls.__mro__[::-1]
|
|
2498
|
+
for a in ams
|
|
2499
|
+
if a in mcls.__dict__
|
|
2500
|
+
}
|
|
2476
2501
|
|
|
2477
|
-
if ams:
|
|
2478
2502
|
raise AbstractTypeError(
|
|
2479
2503
|
f'Cannot subclass abstract class {cls.__name__} with abstract methods: ' +
|
|
2480
2504
|
', '.join(sorted([
|
|
2481
2505
|
'.'.join([
|
|
2482
|
-
*([
|
|
2483
|
-
|
|
2506
|
+
*([
|
|
2507
|
+
*([m] if (m := getattr(c, '__module__')) else []),
|
|
2508
|
+
getattr(c, '__qualname__', getattr(c, '__name__')),
|
|
2509
|
+
] if c is not None else '?'),
|
|
2484
2510
|
a,
|
|
2485
2511
|
])
|
|
2486
|
-
for a
|
|
2512
|
+
for a in ams
|
|
2513
|
+
for c in [amd.get(a)]
|
|
2487
2514
|
])),
|
|
2488
2515
|
)
|
|
2489
2516
|
|
|
@@ -113,7 +113,7 @@ TomlParseFloat = ta.Callable[[str], ta.Any] # ta.TypeAlias
|
|
|
113
113
|
TomlKey = ta.Tuple[str, ...] # ta.TypeAlias
|
|
114
114
|
TomlPos = int # ta.TypeAlias
|
|
115
115
|
|
|
116
|
-
# ../../omlish/lite/
|
|
116
|
+
# ../../omlish/lite/abstract.py
|
|
117
117
|
T = ta.TypeVar('T')
|
|
118
118
|
|
|
119
119
|
# ../../omlish/lite/cached.py
|
|
@@ -1741,25 +1741,49 @@ def is_abstract_method(obj: ta.Any) -> bool:
|
|
|
1741
1741
|
return bool(getattr(obj, _IS_ABSTRACT_METHOD_ATTR, False))
|
|
1742
1742
|
|
|
1743
1743
|
|
|
1744
|
-
def
|
|
1744
|
+
def compute_abstract_methods(cls: type) -> ta.FrozenSet[str]:
|
|
1745
|
+
# ~> https://github.com/python/cpython/blob/f3476c6507381ca860eec0989f53647b13517423/Modules/_abc.c#L358
|
|
1746
|
+
|
|
1747
|
+
# Stage 1: direct abstract methods
|
|
1748
|
+
|
|
1749
|
+
abstracts = {
|
|
1750
|
+
a
|
|
1751
|
+
# Get items as a list to avoid mutation issues during iteration
|
|
1752
|
+
for a, v in list(cls.__dict__.items())
|
|
1753
|
+
if is_abstract_method(v)
|
|
1754
|
+
}
|
|
1755
|
+
|
|
1756
|
+
# Stage 2: inherited abstract methods
|
|
1757
|
+
|
|
1758
|
+
for base in cls.__bases__:
|
|
1759
|
+
# Get __abstractmethods__ from base if it exists
|
|
1760
|
+
if (base_abstracts := getattr(base, _ABSTRACT_METHODS_ATTR, None)) is None:
|
|
1761
|
+
continue
|
|
1762
|
+
|
|
1763
|
+
# Iterate over abstract methods in base
|
|
1764
|
+
for key in base_abstracts:
|
|
1765
|
+
# Check if this class has an attribute with this name
|
|
1766
|
+
try:
|
|
1767
|
+
value = getattr(cls, key)
|
|
1768
|
+
except AttributeError:
|
|
1769
|
+
# Attribute not found in this class, skip
|
|
1770
|
+
continue
|
|
1771
|
+
|
|
1772
|
+
# Check if it's still abstract
|
|
1773
|
+
if is_abstract_method(value):
|
|
1774
|
+
abstracts.add(key)
|
|
1775
|
+
|
|
1776
|
+
return frozenset(abstracts)
|
|
1777
|
+
|
|
1778
|
+
|
|
1779
|
+
def update_abstracts(cls: ta.Type[T], *, force: bool = False) -> ta.Type[T]:
|
|
1745
1780
|
if not force and not hasattr(cls, _ABSTRACT_METHODS_ATTR):
|
|
1746
1781
|
# Per stdlib: We check for __abstractmethods__ here because cls might by a C implementation or a python
|
|
1747
1782
|
# implementation (especially during testing), and we want to handle both cases.
|
|
1748
1783
|
return cls
|
|
1749
1784
|
|
|
1750
|
-
abstracts
|
|
1751
|
-
|
|
1752
|
-
for scls in cls.__bases__:
|
|
1753
|
-
for name in getattr(scls, _ABSTRACT_METHODS_ATTR, ()):
|
|
1754
|
-
value = getattr(cls, name, None)
|
|
1755
|
-
if getattr(value, _IS_ABSTRACT_METHOD_ATTR, False):
|
|
1756
|
-
abstracts.add(name)
|
|
1757
|
-
|
|
1758
|
-
for name, value in cls.__dict__.items():
|
|
1759
|
-
if getattr(value, _IS_ABSTRACT_METHOD_ATTR, False):
|
|
1760
|
-
abstracts.add(name)
|
|
1761
|
-
|
|
1762
|
-
setattr(cls, _ABSTRACT_METHODS_ATTR, frozenset(abstracts))
|
|
1785
|
+
abstracts = compute_abstract_methods(cls)
|
|
1786
|
+
setattr(cls, _ABSTRACT_METHODS_ATTR, abstracts)
|
|
1763
1787
|
return cls
|
|
1764
1788
|
|
|
1765
1789
|
|
|
@@ -1813,23 +1837,26 @@ class Abstract:
|
|
|
1813
1837
|
super().__init_subclass__(**kwargs)
|
|
1814
1838
|
|
|
1815
1839
|
if not (Abstract in cls.__bases__ or abc.ABC in cls.__bases__):
|
|
1816
|
-
ams
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1840
|
+
if ams := compute_abstract_methods(cls):
|
|
1841
|
+
amd = {
|
|
1842
|
+
a: mcls
|
|
1843
|
+
for mcls in cls.__mro__[::-1]
|
|
1844
|
+
for a in ams
|
|
1845
|
+
if a in mcls.__dict__
|
|
1846
|
+
}
|
|
1822
1847
|
|
|
1823
|
-
if ams:
|
|
1824
1848
|
raise AbstractTypeError(
|
|
1825
1849
|
f'Cannot subclass abstract class {cls.__name__} with abstract methods: ' +
|
|
1826
1850
|
', '.join(sorted([
|
|
1827
1851
|
'.'.join([
|
|
1828
|
-
*([
|
|
1829
|
-
|
|
1852
|
+
*([
|
|
1853
|
+
*([m] if (m := getattr(c, '__module__')) else []),
|
|
1854
|
+
getattr(c, '__qualname__', getattr(c, '__name__')),
|
|
1855
|
+
] if c is not None else '?'),
|
|
1830
1856
|
a,
|
|
1831
1857
|
])
|
|
1832
|
-
for a
|
|
1858
|
+
for a in ams
|
|
1859
|
+
for c in [amd.get(a)]
|
|
1833
1860
|
])),
|
|
1834
1861
|
)
|
|
1835
1862
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ominfra
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev472
|
|
4
4
|
Summary: ominfra
|
|
5
5
|
Author: wrmsr
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -14,8 +14,8 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
14
14
|
Requires-Python: >=3.13
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
Requires-Dist: omdev==0.0.0.
|
|
18
|
-
Requires-Dist: omlish==0.0.0.
|
|
17
|
+
Requires-Dist: omdev==0.0.0.dev472
|
|
18
|
+
Requires-Dist: omlish==0.0.0.dev472
|
|
19
19
|
Provides-Extra: all
|
|
20
20
|
Requires-Dist: paramiko~=4.0; extra == "all"
|
|
21
21
|
Requires-Dist: asyncssh~=2.21; extra == "all"
|
|
@@ -13,7 +13,7 @@ urls = {source = 'https://github.com/wrmsr/omlish'}
|
|
|
13
13
|
license = 'BSD-3-Clause'
|
|
14
14
|
readme = 'README.md'
|
|
15
15
|
requires-python = '>=3.13'
|
|
16
|
-
version = '0.0.0.
|
|
16
|
+
version = '0.0.0.dev472'
|
|
17
17
|
classifiers = [
|
|
18
18
|
'Development Status :: 2 - Pre-Alpha',
|
|
19
19
|
'Intended Audience :: Developers',
|
|
@@ -24,8 +24,8 @@ classifiers = [
|
|
|
24
24
|
]
|
|
25
25
|
description = 'ominfra'
|
|
26
26
|
dependencies = [
|
|
27
|
-
'omdev == 0.0.0.
|
|
28
|
-
'omlish == 0.0.0.
|
|
27
|
+
'omdev == 0.0.0.dev472',
|
|
28
|
+
'omlish == 0.0.0.dev472',
|
|
29
29
|
]
|
|
30
30
|
|
|
31
31
|
[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
|
{ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/instancetypes/cache.json.gz
RENAMED
|
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
|
{ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/models/services/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ominfra-0.0.0.dev471 → ominfra-0.0.0.dev472}/ominfra/clouds/aws/models/services/services.toml
RENAMED
|
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
|
|
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
|