ominfra 0.0.0.dev428__tar.gz → 0.0.0.dev430__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.dev428/ominfra.egg-info → ominfra-0.0.0.dev430}/PKG-INFO +3 -3
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/scripts/journald2aws.py +99 -53
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/scripts/manage.py +100 -53
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/scripts/supervisor.py +100 -53
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430/ominfra.egg-info}/PKG-INFO +3 -3
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra.egg-info/requires.txt +2 -2
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/pyproject.toml +3 -3
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/LICENSE +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/MANIFEST.in +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/README.md +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/.omlish-manifests.json +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/__about__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/__main__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/auth.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/cli.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/dataclasses.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/instancetypes/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/instancetypes/__main__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/instancetypes/cache.json.gz +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/instancetypes/cache.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/instancetypes/cli.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/journald2aws/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/journald2aws/__main__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/journald2aws/cursor.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/journald2aws/driver.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/journald2aws/main.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/journald2aws/poster.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/logs.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/metadata.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/base.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/gen/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/gen/__main__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/gen/cli.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/gen/gen.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/services/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/services/ec2.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/services/lambda_.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/services/rds.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/services/s3.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/services/services.toml +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/gcp/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/gcp/api.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/clouds/gcp/auth.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/commands/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/commands/runners.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/commands/ssh.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/journald/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/journald/fields.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/journald/genmessages.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/journald/messages.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/journald/tailer.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/__main__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/bootstrap.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/bootstrap_.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/commands/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/commands/base.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/commands/inject.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/commands/injection.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/commands/local.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/commands/marshal.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/commands/ping.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/commands/subprocess.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/commands/types.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/config.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/apps.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/commands.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/conf/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/conf/inject.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/conf/manager.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/conf/specs.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/config.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/deploy.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/git.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/inject.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/injection.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/interp.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/nginx.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/paths/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/paths/inject.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/paths/manager.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/paths/owners.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/paths/paths.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/paths/specs.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/paths/types.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/specs.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/systemd.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/tags.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/tmp.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/types.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/venvs.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/inject.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/main.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/marshal.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/remote/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/remote/_main.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/remote/channel.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/remote/config.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/remote/connection.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/remote/execution.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/remote/inject.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/remote/payload.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/remote/spawning.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/system/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/system/commands.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/system/config.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/system/inject.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/system/packages.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/system/platforms.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/targets/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/targets/bestpython.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/targets/bestpython.sh +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/targets/connection.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/targets/inject.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/manage/targets/targets.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/pyremote.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/scripts/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/LICENSE.txt +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/__main__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/configs.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/dispatchers.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/dispatchersimpl.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/errors.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/events.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/groups.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/groupsimpl.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/http.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/inject.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/io.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/main.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/pipes.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/privileges.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/process.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/processimpl.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/setup.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/setupimpl.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/signals.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/spawning.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/spawningimpl.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/states.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/supervisor.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/types.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/collections.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/diag.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/fds.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/fs.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/os.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/ostypes.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/signals.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/strings.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/users.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/systemd.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/tailscale/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/tailscale/api.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/tailscale/cli.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/threadworkers.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/tools/__init__.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra/tools/listresources.py +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra.egg-info/SOURCES.txt +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra.egg-info/dependency_links.txt +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra.egg-info/entry_points.txt +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/ominfra.egg-info/top_level.txt +0 -0
- {ominfra-0.0.0.dev428 → ominfra-0.0.0.dev430}/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.dev430
|
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.dev430
|
18
|
+
Requires-Dist: omlish==0.0.0.dev430
|
19
19
|
Provides-Extra: all
|
20
20
|
Requires-Dist: paramiko~=4.0; extra == "all"
|
21
21
|
Requires-Dist: asyncssh~=2.21; extra == "all"
|
@@ -1600,8 +1600,6 @@ class AttrOps(ta.Generic[T]):
|
|
1600
1600
|
self._eq = _eq
|
1601
1601
|
return _eq
|
1602
1602
|
|
1603
|
-
#
|
1604
|
-
|
1605
1603
|
@property
|
1606
1604
|
def hash_eq(self) -> ta.Tuple[
|
1607
1605
|
ta.Callable[[T], int],
|
@@ -1609,6 +1607,8 @@ class AttrOps(ta.Generic[T]):
|
|
1609
1607
|
]:
|
1610
1608
|
return (self.hash, self.eq)
|
1611
1609
|
|
1610
|
+
#
|
1611
|
+
|
1612
1612
|
@property
|
1613
1613
|
def repr_hash_eq(self) -> ta.Tuple[
|
1614
1614
|
ta.Callable[[T], str],
|
@@ -1619,20 +1619,25 @@ class AttrOps(ta.Generic[T]):
|
|
1619
1619
|
|
1620
1620
|
#
|
1621
1621
|
|
1622
|
+
class NOT_SET: # noqa
|
1623
|
+
def __new__(cls, *args, **kwargs): # noqa
|
1624
|
+
raise TypeError
|
1625
|
+
|
1622
1626
|
def install(
|
1623
1627
|
self,
|
1624
1628
|
locals_dct: ta.MutableMapping[str, ta.Any],
|
1625
1629
|
*,
|
1626
|
-
|
1627
|
-
|
1628
|
-
|
1629
|
-
eq: bool = False,
|
1630
|
+
repr: ta.Union[bool, ta.Type[NOT_SET]] = NOT_SET, # noqa
|
1631
|
+
hash: ta.Union[bool, ta.Type[NOT_SET]] = NOT_SET, # noqa
|
1632
|
+
eq: ta.Union[bool, ta.Type[NOT_SET]] = NOT_SET,
|
1630
1633
|
) -> 'AttrOps[T]':
|
1631
|
-
if repr
|
1634
|
+
if all(a is self.NOT_SET for a in (repr, hash, eq)):
|
1635
|
+
repr = hash = eq = True # noqa
|
1636
|
+
if repr:
|
1632
1637
|
locals_dct.update(__repr__=self.repr)
|
1633
|
-
if hash
|
1638
|
+
if hash:
|
1634
1639
|
locals_dct.update(__hash__=self.hash)
|
1635
|
-
if eq
|
1640
|
+
if eq:
|
1636
1641
|
locals_dct.update(__eq__=self.eq)
|
1637
1642
|
return self
|
1638
1643
|
|
@@ -2691,19 +2696,16 @@ def format_num_bytes(num_bytes: int) -> str:
|
|
2691
2696
|
##
|
2692
2697
|
|
2693
2698
|
|
2694
|
-
|
2695
|
-
|
2696
|
-
return ()
|
2697
|
-
|
2698
|
-
|
2699
|
-
LoggingContextInfo: type = ta.cast(ta.Any, _LoggingContextInfo())
|
2699
|
+
def logging_context_info(cls):
|
2700
|
+
return cls
|
2700
2701
|
|
2701
2702
|
|
2702
2703
|
##
|
2703
2704
|
|
2704
2705
|
|
2706
|
+
@logging_context_info
|
2705
2707
|
@ta.final
|
2706
|
-
class LoggingSourceFileInfo(
|
2708
|
+
class LoggingSourceFileInfo(ta.NamedTuple):
|
2707
2709
|
file_name: str
|
2708
2710
|
module: str
|
2709
2711
|
|
@@ -2720,16 +2722,17 @@ class LoggingSourceFileInfo(LoggingContextInfo, ta.NamedTuple): # type: ignore[
|
|
2720
2722
|
return None
|
2721
2723
|
|
2722
2724
|
return cls(
|
2723
|
-
file_name,
|
2724
|
-
module,
|
2725
|
+
file_name=file_name,
|
2726
|
+
module=module,
|
2725
2727
|
)
|
2726
2728
|
|
2727
2729
|
|
2728
2730
|
##
|
2729
2731
|
|
2730
2732
|
|
2733
|
+
@logging_context_info
|
2731
2734
|
@ta.final
|
2732
|
-
class LoggingThreadInfo(
|
2735
|
+
class LoggingThreadInfo(ta.NamedTuple):
|
2733
2736
|
ident: int
|
2734
2737
|
native_id: ta.Optional[int]
|
2735
2738
|
name: str
|
@@ -2737,31 +2740,33 @@ class LoggingThreadInfo(LoggingContextInfo, ta.NamedTuple): # type: ignore[misc
|
|
2737
2740
|
@classmethod
|
2738
2741
|
def build(cls) -> 'LoggingThreadInfo':
|
2739
2742
|
return cls(
|
2740
|
-
threading.get_ident(),
|
2741
|
-
threading.get_native_id() if hasattr(threading, 'get_native_id') else None,
|
2742
|
-
threading.current_thread().name,
|
2743
|
+
ident=threading.get_ident(),
|
2744
|
+
native_id=threading.get_native_id() if hasattr(threading, 'get_native_id') else None,
|
2745
|
+
name=threading.current_thread().name,
|
2743
2746
|
)
|
2744
2747
|
|
2745
2748
|
|
2746
2749
|
##
|
2747
2750
|
|
2748
2751
|
|
2752
|
+
@logging_context_info
|
2749
2753
|
@ta.final
|
2750
|
-
class LoggingProcessInfo(
|
2754
|
+
class LoggingProcessInfo(ta.NamedTuple):
|
2751
2755
|
pid: int
|
2752
2756
|
|
2753
2757
|
@classmethod
|
2754
2758
|
def build(cls) -> 'LoggingProcessInfo':
|
2755
2759
|
return cls(
|
2756
|
-
os.getpid(),
|
2760
|
+
pid=os.getpid(),
|
2757
2761
|
)
|
2758
2762
|
|
2759
2763
|
|
2760
2764
|
##
|
2761
2765
|
|
2762
2766
|
|
2767
|
+
@logging_context_info
|
2763
2768
|
@ta.final
|
2764
|
-
class LoggingMultiprocessingInfo(
|
2769
|
+
class LoggingMultiprocessingInfo(ta.NamedTuple):
|
2765
2770
|
process_name: str
|
2766
2771
|
|
2767
2772
|
@classmethod
|
@@ -2771,15 +2776,16 @@ class LoggingMultiprocessingInfo(LoggingContextInfo, ta.NamedTuple): # type: ig
|
|
2771
2776
|
return None
|
2772
2777
|
|
2773
2778
|
return cls(
|
2774
|
-
mp.current_process().name,
|
2779
|
+
process_name=mp.current_process().name,
|
2775
2780
|
)
|
2776
2781
|
|
2777
2782
|
|
2778
2783
|
##
|
2779
2784
|
|
2780
2785
|
|
2786
|
+
@logging_context_info
|
2781
2787
|
@ta.final
|
2782
|
-
class LoggingAsyncioTaskInfo(
|
2788
|
+
class LoggingAsyncioTaskInfo(ta.NamedTuple):
|
2783
2789
|
name: str
|
2784
2790
|
|
2785
2791
|
@classmethod
|
@@ -2797,7 +2803,7 @@ class LoggingAsyncioTaskInfo(LoggingContextInfo, ta.NamedTuple): # type: ignore
|
|
2797
2803
|
return None
|
2798
2804
|
|
2799
2805
|
return cls(
|
2800
|
-
task.get_name(), # Always non-None
|
2806
|
+
name=task.get_name(), # Always non-None
|
2801
2807
|
)
|
2802
2808
|
|
2803
2809
|
|
@@ -2820,36 +2826,66 @@ class NamedLogLevel(int):
|
|
2820
2826
|
|
2821
2827
|
#
|
2822
2828
|
|
2823
|
-
|
2824
|
-
|
2825
|
-
|
2829
|
+
_CACHE: ta.ClassVar[ta.MutableMapping[int, 'NamedLogLevel']] = {}
|
2830
|
+
|
2831
|
+
@ta.overload
|
2832
|
+
def __new__(cls, name: str, offset: int = 0, /) -> 'NamedLogLevel':
|
2833
|
+
...
|
2826
2834
|
|
2827
|
-
|
2835
|
+
@ta.overload
|
2836
|
+
def __new__(cls, i: int, /) -> 'NamedLogLevel':
|
2837
|
+
...
|
2838
|
+
|
2839
|
+
def __new__(cls, x, offset=0, /):
|
2840
|
+
if isinstance(x, str):
|
2841
|
+
return cls(cls._INTS_BY_NAME[x.upper()] + offset)
|
2842
|
+
elif not offset and (c := cls._CACHE.get(x)) is not None:
|
2843
|
+
return c
|
2844
|
+
else:
|
2845
|
+
return super().__new__(cls, x + offset)
|
2846
|
+
|
2847
|
+
#
|
2848
|
+
|
2849
|
+
_name_and_offset: ta.Tuple[str, int]
|
2828
2850
|
|
2829
2851
|
@property
|
2830
|
-
def
|
2852
|
+
def name_and_offset(self) -> ta.Tuple[str, int]:
|
2831
2853
|
try:
|
2832
|
-
return self.
|
2854
|
+
return self._name_and_offset
|
2833
2855
|
except AttributeError:
|
2834
2856
|
pass
|
2835
2857
|
|
2836
|
-
if (n := self.
|
2858
|
+
if (n := self._NAMES_BY_INT.get(self)) is not None:
|
2859
|
+
t = (n, 0)
|
2860
|
+
else:
|
2837
2861
|
for n, i in self._NAME_INT_PAIRS: # noqa
|
2838
2862
|
if self >= i:
|
2863
|
+
t = (n, (self - i))
|
2839
2864
|
break
|
2840
2865
|
else:
|
2841
|
-
|
2866
|
+
t = ('NOTSET', int(self))
|
2867
|
+
|
2868
|
+
self._name_and_offset = t
|
2869
|
+
return t
|
2842
2870
|
|
2843
|
-
|
2871
|
+
@property
|
2872
|
+
def exact_name(self) -> ta.Optional[str]:
|
2873
|
+
n, o = self.name_and_offset
|
2874
|
+
return n if not o else None
|
2875
|
+
|
2876
|
+
@property
|
2877
|
+
def effective_name(self) -> str:
|
2878
|
+
n, _ = self.name_and_offset
|
2844
2879
|
return n
|
2845
2880
|
|
2846
2881
|
#
|
2847
2882
|
|
2848
|
-
def __repr__(self) -> str:
|
2849
|
-
return f'{self.__class__.__name__}({int(self)})'
|
2850
|
-
|
2851
2883
|
def __str__(self) -> str:
|
2852
|
-
return self.exact_name or f'{self.effective_name
|
2884
|
+
return self.exact_name or f'{self.effective_name}{int(self):+}'
|
2885
|
+
|
2886
|
+
def __repr__(self) -> str:
|
2887
|
+
n, o = self.name_and_offset
|
2888
|
+
return f'{self.__class__.__name__}({n!r}{f", {int(o)}" if o else ""})'
|
2853
2889
|
|
2854
2890
|
#
|
2855
2891
|
|
@@ -2869,6 +2905,9 @@ NamedLogLevel.DEBUG = NamedLogLevel(logging.DEBUG)
|
|
2869
2905
|
NamedLogLevel.NOTSET = NamedLogLevel(logging.NOTSET)
|
2870
2906
|
|
2871
2907
|
|
2908
|
+
NamedLogLevel._CACHE.update({i: NamedLogLevel(i) for i in NamedLogLevel._NAMES_BY_INT}) # noqa
|
2909
|
+
|
2910
|
+
|
2872
2911
|
########################################
|
2873
2912
|
# ../../../../../omlish/logs/std/filters.py
|
2874
2913
|
|
@@ -4912,7 +4951,9 @@ def check_lite_runtime_version() -> None:
|
|
4912
4951
|
##
|
4913
4952
|
|
4914
4953
|
|
4915
|
-
|
4954
|
+
@logging_context_info
|
4955
|
+
@ta.final
|
4956
|
+
class LoggingCaller(ta.NamedTuple):
|
4916
4957
|
file_path: str
|
4917
4958
|
line_no: int
|
4918
4959
|
name: str
|
@@ -4965,10 +5006,10 @@ class LoggingCaller(LoggingContextInfo, ta.NamedTuple): # type: ignore[misc]
|
|
4965
5006
|
sinfo = sinfo[:-1]
|
4966
5007
|
|
4967
5008
|
return cls(
|
4968
|
-
f.f_code.co_filename,
|
4969
|
-
f.f_lineno or 0,
|
4970
|
-
f.f_code.co_name,
|
4971
|
-
sinfo,
|
5009
|
+
file_path=f.f_code.co_filename,
|
5010
|
+
line_no=f.f_lineno or 0,
|
5011
|
+
name=f.f_code.co_name,
|
5012
|
+
stack_info=sinfo,
|
4972
5013
|
)
|
4973
5014
|
|
4974
5015
|
|
@@ -5036,7 +5077,9 @@ class JsonLoggingFormatter(logging.Formatter):
|
|
5036
5077
|
##
|
5037
5078
|
|
5038
5079
|
|
5039
|
-
|
5080
|
+
@logging_context_info
|
5081
|
+
@ta.final
|
5082
|
+
class LoggingTimeFields(ta.NamedTuple):
|
5040
5083
|
"""Maps directly to stdlib `logging.LogRecord` fields, and must be kept in sync with it."""
|
5041
5084
|
|
5042
5085
|
created: float
|
@@ -5084,9 +5127,9 @@ class LoggingTimeFields(LoggingContextInfo, ta.NamedTuple): # type: ignore[misc
|
|
5084
5127
|
relative_created = (time_ns - start_time_ns) / 1e6
|
5085
5128
|
|
5086
5129
|
return cls(
|
5087
|
-
created,
|
5088
|
-
msecs,
|
5089
|
-
relative_created,
|
5130
|
+
created=created,
|
5131
|
+
msecs=msecs,
|
5132
|
+
relative_created=relative_created,
|
5090
5133
|
)
|
5091
5134
|
|
5092
5135
|
|
@@ -5730,7 +5773,7 @@ def subprocess_maybe_shell_wrap_exec(*cmd: str) -> ta.Tuple[str, ...]:
|
|
5730
5773
|
|
5731
5774
|
class AnyLogger(Abstract, ta.Generic[T]):
|
5732
5775
|
def is_enabled_for(self, level: LogLevel) -> bool:
|
5733
|
-
return self.get_effective_level()
|
5776
|
+
return level >= self.get_effective_level()
|
5734
5777
|
|
5735
5778
|
@abc.abstractmethod
|
5736
5779
|
def get_effective_level(self) -> LogLevel:
|
@@ -5927,7 +5970,7 @@ class AsyncLogger(AnyLogger[ta.Awaitable[None]], Abstract):
|
|
5927
5970
|
class AnyNopLogger(AnyLogger[T], Abstract):
|
5928
5971
|
@ta.final
|
5929
5972
|
def get_effective_level(self) -> LogLevel:
|
5930
|
-
return 999
|
5973
|
+
return -999
|
5931
5974
|
|
5932
5975
|
|
5933
5976
|
@ta.final
|
@@ -6237,7 +6280,7 @@ class LoggingContextLogRecord(logging.LogRecord):
|
|
6237
6280
|
|
6238
6281
|
|
6239
6282
|
########################################
|
6240
|
-
# ../../../../../omlish/logs/std/
|
6283
|
+
# ../../../../../omlish/logs/std/loggers.py
|
6241
6284
|
|
6242
6285
|
|
6243
6286
|
##
|
@@ -6253,6 +6296,9 @@ class StdLogger(Logger):
|
|
6253
6296
|
def std(self) -> logging.Logger:
|
6254
6297
|
return self._std
|
6255
6298
|
|
6299
|
+
def is_enabled_for(self, level: LogLevel) -> bool:
|
6300
|
+
return self._std.isEnabledFor(level)
|
6301
|
+
|
6256
6302
|
def get_effective_level(self) -> LogLevel:
|
6257
6303
|
return self._std.getEffectiveLevel()
|
6258
6304
|
|
@@ -2779,8 +2779,6 @@ class AttrOps(ta.Generic[T]):
|
|
2779
2779
|
self._eq = _eq
|
2780
2780
|
return _eq
|
2781
2781
|
|
2782
|
-
#
|
2783
|
-
|
2784
2782
|
@property
|
2785
2783
|
def hash_eq(self) -> ta.Tuple[
|
2786
2784
|
ta.Callable[[T], int],
|
@@ -2788,6 +2786,8 @@ class AttrOps(ta.Generic[T]):
|
|
2788
2786
|
]:
|
2789
2787
|
return (self.hash, self.eq)
|
2790
2788
|
|
2789
|
+
#
|
2790
|
+
|
2791
2791
|
@property
|
2792
2792
|
def repr_hash_eq(self) -> ta.Tuple[
|
2793
2793
|
ta.Callable[[T], str],
|
@@ -2798,20 +2798,25 @@ class AttrOps(ta.Generic[T]):
|
|
2798
2798
|
|
2799
2799
|
#
|
2800
2800
|
|
2801
|
+
class NOT_SET: # noqa
|
2802
|
+
def __new__(cls, *args, **kwargs): # noqa
|
2803
|
+
raise TypeError
|
2804
|
+
|
2801
2805
|
def install(
|
2802
2806
|
self,
|
2803
2807
|
locals_dct: ta.MutableMapping[str, ta.Any],
|
2804
2808
|
*,
|
2805
|
-
|
2806
|
-
|
2807
|
-
|
2808
|
-
eq: bool = False,
|
2809
|
+
repr: ta.Union[bool, ta.Type[NOT_SET]] = NOT_SET, # noqa
|
2810
|
+
hash: ta.Union[bool, ta.Type[NOT_SET]] = NOT_SET, # noqa
|
2811
|
+
eq: ta.Union[bool, ta.Type[NOT_SET]] = NOT_SET,
|
2809
2812
|
) -> 'AttrOps[T]':
|
2810
|
-
if repr
|
2813
|
+
if all(a is self.NOT_SET for a in (repr, hash, eq)):
|
2814
|
+
repr = hash = eq = True # noqa
|
2815
|
+
if repr:
|
2811
2816
|
locals_dct.update(__repr__=self.repr)
|
2812
|
-
if hash
|
2817
|
+
if hash:
|
2813
2818
|
locals_dct.update(__hash__=self.hash)
|
2814
|
-
if eq
|
2819
|
+
if eq:
|
2815
2820
|
locals_dct.update(__eq__=self.eq)
|
2816
2821
|
return self
|
2817
2822
|
|
@@ -3993,19 +3998,16 @@ def typing_annotations_attr() -> str:
|
|
3993
3998
|
##
|
3994
3999
|
|
3995
4000
|
|
3996
|
-
|
3997
|
-
|
3998
|
-
return ()
|
3999
|
-
|
4000
|
-
|
4001
|
-
LoggingContextInfo: type = ta.cast(ta.Any, _LoggingContextInfo())
|
4001
|
+
def logging_context_info(cls):
|
4002
|
+
return cls
|
4002
4003
|
|
4003
4004
|
|
4004
4005
|
##
|
4005
4006
|
|
4006
4007
|
|
4008
|
+
@logging_context_info
|
4007
4009
|
@ta.final
|
4008
|
-
class LoggingSourceFileInfo(
|
4010
|
+
class LoggingSourceFileInfo(ta.NamedTuple):
|
4009
4011
|
file_name: str
|
4010
4012
|
module: str
|
4011
4013
|
|
@@ -4022,16 +4024,17 @@ class LoggingSourceFileInfo(LoggingContextInfo, ta.NamedTuple): # type: ignore[
|
|
4022
4024
|
return None
|
4023
4025
|
|
4024
4026
|
return cls(
|
4025
|
-
file_name,
|
4026
|
-
module,
|
4027
|
+
file_name=file_name,
|
4028
|
+
module=module,
|
4027
4029
|
)
|
4028
4030
|
|
4029
4031
|
|
4030
4032
|
##
|
4031
4033
|
|
4032
4034
|
|
4035
|
+
@logging_context_info
|
4033
4036
|
@ta.final
|
4034
|
-
class LoggingThreadInfo(
|
4037
|
+
class LoggingThreadInfo(ta.NamedTuple):
|
4035
4038
|
ident: int
|
4036
4039
|
native_id: ta.Optional[int]
|
4037
4040
|
name: str
|
@@ -4039,31 +4042,33 @@ class LoggingThreadInfo(LoggingContextInfo, ta.NamedTuple): # type: ignore[misc
|
|
4039
4042
|
@classmethod
|
4040
4043
|
def build(cls) -> 'LoggingThreadInfo':
|
4041
4044
|
return cls(
|
4042
|
-
threading.get_ident(),
|
4043
|
-
threading.get_native_id() if hasattr(threading, 'get_native_id') else None,
|
4044
|
-
threading.current_thread().name,
|
4045
|
+
ident=threading.get_ident(),
|
4046
|
+
native_id=threading.get_native_id() if hasattr(threading, 'get_native_id') else None,
|
4047
|
+
name=threading.current_thread().name,
|
4045
4048
|
)
|
4046
4049
|
|
4047
4050
|
|
4048
4051
|
##
|
4049
4052
|
|
4050
4053
|
|
4054
|
+
@logging_context_info
|
4051
4055
|
@ta.final
|
4052
|
-
class LoggingProcessInfo(
|
4056
|
+
class LoggingProcessInfo(ta.NamedTuple):
|
4053
4057
|
pid: int
|
4054
4058
|
|
4055
4059
|
@classmethod
|
4056
4060
|
def build(cls) -> 'LoggingProcessInfo':
|
4057
4061
|
return cls(
|
4058
|
-
os.getpid(),
|
4062
|
+
pid=os.getpid(),
|
4059
4063
|
)
|
4060
4064
|
|
4061
4065
|
|
4062
4066
|
##
|
4063
4067
|
|
4064
4068
|
|
4069
|
+
@logging_context_info
|
4065
4070
|
@ta.final
|
4066
|
-
class LoggingMultiprocessingInfo(
|
4071
|
+
class LoggingMultiprocessingInfo(ta.NamedTuple):
|
4067
4072
|
process_name: str
|
4068
4073
|
|
4069
4074
|
@classmethod
|
@@ -4073,15 +4078,16 @@ class LoggingMultiprocessingInfo(LoggingContextInfo, ta.NamedTuple): # type: ig
|
|
4073
4078
|
return None
|
4074
4079
|
|
4075
4080
|
return cls(
|
4076
|
-
mp.current_process().name,
|
4081
|
+
process_name=mp.current_process().name,
|
4077
4082
|
)
|
4078
4083
|
|
4079
4084
|
|
4080
4085
|
##
|
4081
4086
|
|
4082
4087
|
|
4088
|
+
@logging_context_info
|
4083
4089
|
@ta.final
|
4084
|
-
class LoggingAsyncioTaskInfo(
|
4090
|
+
class LoggingAsyncioTaskInfo(ta.NamedTuple):
|
4085
4091
|
name: str
|
4086
4092
|
|
4087
4093
|
@classmethod
|
@@ -4099,7 +4105,7 @@ class LoggingAsyncioTaskInfo(LoggingContextInfo, ta.NamedTuple): # type: ignore
|
|
4099
4105
|
return None
|
4100
4106
|
|
4101
4107
|
return cls(
|
4102
|
-
task.get_name(), # Always non-None
|
4108
|
+
name=task.get_name(), # Always non-None
|
4103
4109
|
)
|
4104
4110
|
|
4105
4111
|
|
@@ -4122,36 +4128,66 @@ class NamedLogLevel(int):
|
|
4122
4128
|
|
4123
4129
|
#
|
4124
4130
|
|
4125
|
-
|
4126
|
-
|
4127
|
-
|
4131
|
+
_CACHE: ta.ClassVar[ta.MutableMapping[int, 'NamedLogLevel']] = {}
|
4132
|
+
|
4133
|
+
@ta.overload
|
4134
|
+
def __new__(cls, name: str, offset: int = 0, /) -> 'NamedLogLevel':
|
4135
|
+
...
|
4128
4136
|
|
4129
|
-
|
4137
|
+
@ta.overload
|
4138
|
+
def __new__(cls, i: int, /) -> 'NamedLogLevel':
|
4139
|
+
...
|
4140
|
+
|
4141
|
+
def __new__(cls, x, offset=0, /):
|
4142
|
+
if isinstance(x, str):
|
4143
|
+
return cls(cls._INTS_BY_NAME[x.upper()] + offset)
|
4144
|
+
elif not offset and (c := cls._CACHE.get(x)) is not None:
|
4145
|
+
return c
|
4146
|
+
else:
|
4147
|
+
return super().__new__(cls, x + offset)
|
4148
|
+
|
4149
|
+
#
|
4150
|
+
|
4151
|
+
_name_and_offset: ta.Tuple[str, int]
|
4130
4152
|
|
4131
4153
|
@property
|
4132
|
-
def
|
4154
|
+
def name_and_offset(self) -> ta.Tuple[str, int]:
|
4133
4155
|
try:
|
4134
|
-
return self.
|
4156
|
+
return self._name_and_offset
|
4135
4157
|
except AttributeError:
|
4136
4158
|
pass
|
4137
4159
|
|
4138
|
-
if (n := self.
|
4160
|
+
if (n := self._NAMES_BY_INT.get(self)) is not None:
|
4161
|
+
t = (n, 0)
|
4162
|
+
else:
|
4139
4163
|
for n, i in self._NAME_INT_PAIRS: # noqa
|
4140
4164
|
if self >= i:
|
4165
|
+
t = (n, (self - i))
|
4141
4166
|
break
|
4142
4167
|
else:
|
4143
|
-
|
4168
|
+
t = ('NOTSET', int(self))
|
4144
4169
|
|
4145
|
-
self.
|
4170
|
+
self._name_and_offset = t
|
4171
|
+
return t
|
4172
|
+
|
4173
|
+
@property
|
4174
|
+
def exact_name(self) -> ta.Optional[str]:
|
4175
|
+
n, o = self.name_and_offset
|
4176
|
+
return n if not o else None
|
4177
|
+
|
4178
|
+
@property
|
4179
|
+
def effective_name(self) -> str:
|
4180
|
+
n, _ = self.name_and_offset
|
4146
4181
|
return n
|
4147
4182
|
|
4148
4183
|
#
|
4149
4184
|
|
4150
|
-
def __repr__(self) -> str:
|
4151
|
-
return f'{self.__class__.__name__}({int(self)})'
|
4152
|
-
|
4153
4185
|
def __str__(self) -> str:
|
4154
|
-
return self.exact_name or f'{self.effective_name
|
4186
|
+
return self.exact_name or f'{self.effective_name}{int(self):+}'
|
4187
|
+
|
4188
|
+
def __repr__(self) -> str:
|
4189
|
+
n, o = self.name_and_offset
|
4190
|
+
return f'{self.__class__.__name__}({n!r}{f", {int(o)}" if o else ""})'
|
4155
4191
|
|
4156
4192
|
#
|
4157
4193
|
|
@@ -4171,6 +4207,9 @@ NamedLogLevel.DEBUG = NamedLogLevel(logging.DEBUG)
|
|
4171
4207
|
NamedLogLevel.NOTSET = NamedLogLevel(logging.NOTSET)
|
4172
4208
|
|
4173
4209
|
|
4210
|
+
NamedLogLevel._CACHE.update({i: NamedLogLevel(i) for i in NamedLogLevel._NAMES_BY_INT}) # noqa
|
4211
|
+
|
4212
|
+
|
4174
4213
|
########################################
|
4175
4214
|
# ../../../omlish/logs/std/filters.py
|
4176
4215
|
|
@@ -7590,7 +7629,9 @@ class PredicateTimeout(Timeout):
|
|
7590
7629
|
##
|
7591
7630
|
|
7592
7631
|
|
7593
|
-
|
7632
|
+
@logging_context_info
|
7633
|
+
@ta.final
|
7634
|
+
class LoggingCaller(ta.NamedTuple):
|
7594
7635
|
file_path: str
|
7595
7636
|
line_no: int
|
7596
7637
|
name: str
|
@@ -7643,10 +7684,10 @@ class LoggingCaller(LoggingContextInfo, ta.NamedTuple): # type: ignore[misc]
|
|
7643
7684
|
sinfo = sinfo[:-1]
|
7644
7685
|
|
7645
7686
|
return cls(
|
7646
|
-
f.f_code.co_filename,
|
7647
|
-
f.f_lineno or 0,
|
7648
|
-
f.f_code.co_name,
|
7649
|
-
sinfo,
|
7687
|
+
file_path=f.f_code.co_filename,
|
7688
|
+
line_no=f.f_lineno or 0,
|
7689
|
+
name=f.f_code.co_name,
|
7690
|
+
stack_info=sinfo,
|
7650
7691
|
)
|
7651
7692
|
|
7652
7693
|
|
@@ -7657,6 +7698,7 @@ class LoggingCaller(LoggingContextInfo, ta.NamedTuple): # type: ignore[misc]
|
|
7657
7698
|
##
|
7658
7699
|
|
7659
7700
|
|
7701
|
+
@ta.runtime_checkable
|
7660
7702
|
class LoggerLike(ta.Protocol):
|
7661
7703
|
"""Satisfied by both our Logger and stdlib logging.Logger."""
|
7662
7704
|
|
@@ -7745,7 +7787,9 @@ class JsonLoggingFormatter(logging.Formatter):
|
|
7745
7787
|
##
|
7746
7788
|
|
7747
7789
|
|
7748
|
-
|
7790
|
+
@logging_context_info
|
7791
|
+
@ta.final
|
7792
|
+
class LoggingTimeFields(ta.NamedTuple):
|
7749
7793
|
"""Maps directly to stdlib `logging.LogRecord` fields, and must be kept in sync with it."""
|
7750
7794
|
|
7751
7795
|
created: float
|
@@ -7793,9 +7837,9 @@ class LoggingTimeFields(LoggingContextInfo, ta.NamedTuple): # type: ignore[misc
|
|
7793
7837
|
relative_created = (time_ns - start_time_ns) / 1e6
|
7794
7838
|
|
7795
7839
|
return cls(
|
7796
|
-
created,
|
7797
|
-
msecs,
|
7798
|
-
relative_created,
|
7840
|
+
created=created,
|
7841
|
+
msecs=msecs,
|
7842
|
+
relative_created=relative_created,
|
7799
7843
|
)
|
7800
7844
|
|
7801
7845
|
|
@@ -10966,7 +11010,7 @@ class DeploySpec(DeploySpecKeyed[DeployKey]):
|
|
10966
11010
|
|
10967
11011
|
class AnyLogger(Abstract, ta.Generic[T]):
|
10968
11012
|
def is_enabled_for(self, level: LogLevel) -> bool:
|
10969
|
-
return self.get_effective_level()
|
11013
|
+
return level >= self.get_effective_level()
|
10970
11014
|
|
10971
11015
|
@abc.abstractmethod
|
10972
11016
|
def get_effective_level(self) -> LogLevel:
|
@@ -11163,7 +11207,7 @@ class AsyncLogger(AnyLogger[ta.Awaitable[None]], Abstract):
|
|
11163
11207
|
class AnyNopLogger(AnyLogger[T], Abstract):
|
11164
11208
|
@ta.final
|
11165
11209
|
def get_effective_level(self) -> LogLevel:
|
11166
|
-
return 999
|
11210
|
+
return -999
|
11167
11211
|
|
11168
11212
|
|
11169
11213
|
@ta.final
|
@@ -12085,7 +12129,7 @@ class SingleDirDeployPathOwner(DeployPathOwner, Abstract):
|
|
12085
12129
|
|
12086
12130
|
|
12087
12131
|
########################################
|
12088
|
-
# ../../../omlish/logs/std/
|
12132
|
+
# ../../../omlish/logs/std/loggers.py
|
12089
12133
|
|
12090
12134
|
|
12091
12135
|
##
|
@@ -12101,6 +12145,9 @@ class StdLogger(Logger):
|
|
12101
12145
|
def std(self) -> logging.Logger:
|
12102
12146
|
return self._std
|
12103
12147
|
|
12148
|
+
def is_enabled_for(self, level: LogLevel) -> bool:
|
12149
|
+
return self._std.isEnabledFor(level)
|
12150
|
+
|
12104
12151
|
def get_effective_level(self) -> LogLevel:
|
12105
12152
|
return self._std.getEffectiveLevel()
|
12106
12153
|
|