ominfra 0.0.0.dev25__tar.gz → 0.0.0.dev27__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.dev25/ominfra.egg-info → ominfra-0.0.0.dev27}/PKG-INFO +4 -4
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/__about__.py +1 -11
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/clouds/aws/auth.py +2 -1
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/_executor.py +48 -32
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/_main.py +42 -30
- ominfra-0.0.0.dev27/ominfra/manage/manage.py +12 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/pyremote/_runcommands.py +48 -31
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27/ominfra.egg-info}/PKG-INFO +4 -4
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra.egg-info/SOURCES.txt +1 -1
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra.egg-info/requires.txt +3 -3
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/pyproject.toml +6 -7
- ominfra-0.0.0.dev25/ominfra/manage/manage.py +0 -8
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/LICENSE +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/MANIFEST.in +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/README.rst +0 -0
- /ominfra-0.0.0.dev25/ominfra/_manifests.json → /ominfra-0.0.0.dev27/ominfra/.manifests.json +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/__init__.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/clouds/__init__.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/clouds/aws/__init__.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/cmds.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/__init__.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/configs.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/__init__.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/base.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/concerns/__init__.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/concerns/dirs.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/concerns/nginx.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/concerns/repo.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/concerns/supervisor.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/concerns/systemd.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/concerns/user.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/concerns/venv.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/main.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/__init__.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/base.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/configs.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/deploy.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/main.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/nginx.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/repo.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/runtime.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/site.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/supervisor.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/venv.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/remote.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/manage/__init__.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/pyremote/__init__.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/pyremote/bootstrap.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/pyremote/runcommands.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/ssh.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/tools/__init__.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/tools/listresources.py +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra.egg-info/dependency_links.txt +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra.egg-info/top_level.txt +0 -0
- {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/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.dev27
|
4
4
|
Summary: ominfra
|
5
5
|
Author: wrmsr
|
6
6
|
License: BSD-3-Clause
|
@@ -12,10 +12,10 @@ 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: omlish==0.0.0.
|
15
|
+
Requires-Dist: omlish==0.0.0.dev27
|
16
16
|
Provides-Extra: all
|
17
|
-
Requires-Dist: paramiko~=3.
|
17
|
+
Requires-Dist: paramiko~=3.5; extra == "all"
|
18
18
|
Requires-Dist: asyncssh~=2.17; python_version < "3.13" and extra == "all"
|
19
19
|
Provides-Extra: ssh
|
20
|
-
Requires-Dist: paramiko~=3.
|
20
|
+
Requires-Dist: paramiko~=3.5; extra == "ssh"
|
21
21
|
Requires-Dist: asyncssh~=2.17; python_version < "3.13" and extra == "ssh"
|
@@ -13,7 +13,7 @@ class Project(ProjectBase):
|
|
13
13
|
|
14
14
|
optional_dependencies = {
|
15
15
|
'ssh': [
|
16
|
-
'paramiko ~= 3.
|
16
|
+
'paramiko ~= 3.5', # !! LGPL
|
17
17
|
|
18
18
|
'asyncssh ~= 2.17; python_version < "3.13"', # cffi
|
19
19
|
],
|
@@ -25,13 +25,3 @@ class Setuptools(SetuptoolsBase):
|
|
25
25
|
'include': [Project.name, f'{Project.name}.*'],
|
26
26
|
'exclude': [*SetuptoolsBase.find_packages['exclude']],
|
27
27
|
}
|
28
|
-
|
29
|
-
package_data = {
|
30
|
-
**SetuptoolsBase.package_data,
|
31
|
-
|
32
|
-
'*': [
|
33
|
-
*SetuptoolsBase.package_data['*'],
|
34
|
-
|
35
|
-
'Dockerfile',
|
36
|
-
],
|
37
|
-
}
|
@@ -15,6 +15,7 @@ import typing as ta
|
|
15
15
|
import urllib.parse
|
16
16
|
|
17
17
|
from omlish import check
|
18
|
+
from omlish import lang
|
18
19
|
|
19
20
|
|
20
21
|
##
|
@@ -128,7 +129,7 @@ class V4AwsSigner:
|
|
128
129
|
#
|
129
130
|
|
130
131
|
if utcnow is None:
|
131
|
-
utcnow =
|
132
|
+
utcnow = lang.utcnow()
|
132
133
|
req_dt = utcnow.strftime(_ISO8601)
|
133
134
|
|
134
135
|
#
|
@@ -3,6 +3,7 @@
|
|
3
3
|
# @omlish-lite
|
4
4
|
# @omlish-script
|
5
5
|
# @omdev-amalg-output executor/main.py
|
6
|
+
# ruff: noqa: N802 UP006 UP007 UP036
|
6
7
|
r"""
|
7
8
|
TODO:
|
8
9
|
- flock
|
@@ -43,7 +44,6 @@ spec = <name>--<rev>--<when>
|
|
43
44
|
https://docs.docker.com/config/containers/multi-service_container/#use-a-process-manager
|
44
45
|
https://serverfault.com/questions/211525/supervisor-not-loading-new-configuration-files
|
45
46
|
""" # noqa
|
46
|
-
# ruff: noqa: UP007
|
47
47
|
import abc
|
48
48
|
import argparse
|
49
49
|
import base64
|
@@ -70,6 +70,17 @@ import uuid
|
|
70
70
|
import weakref # noqa
|
71
71
|
|
72
72
|
|
73
|
+
########################################
|
74
|
+
|
75
|
+
|
76
|
+
if sys.version_info < (3, 8):
|
77
|
+
raise OSError(
|
78
|
+
f'Requires python (3, 8), got {sys.version_info} from {sys.executable}') # noqa
|
79
|
+
|
80
|
+
|
81
|
+
########################################
|
82
|
+
|
83
|
+
|
73
84
|
# ../../../../omlish/lite/check.py
|
74
85
|
T = ta.TypeVar('T')
|
75
86
|
|
@@ -119,7 +130,6 @@ class cached_nullary: # noqa
|
|
119
130
|
|
120
131
|
########################################
|
121
132
|
# ../../../../omlish/lite/check.py
|
122
|
-
# ruff: noqa: UP006 UP007
|
123
133
|
|
124
134
|
|
125
135
|
def check_isinstance(v: T, spec: ta.Union[ta.Type[T], tuple]) -> T:
|
@@ -146,6 +156,12 @@ def check_not(v: ta.Any) -> None:
|
|
146
156
|
return v
|
147
157
|
|
148
158
|
|
159
|
+
def check_non_empty_str(v: ta.Optional[str]) -> str:
|
160
|
+
if not v:
|
161
|
+
raise ValueError
|
162
|
+
return v
|
163
|
+
|
164
|
+
|
149
165
|
########################################
|
150
166
|
# ../../../../omlish/lite/json.py
|
151
167
|
|
@@ -179,7 +195,6 @@ json_dumps_compact: ta.Callable[..., str] = functools.partial(json.dumps, **JSON
|
|
179
195
|
|
180
196
|
########################################
|
181
197
|
# ../../../../omlish/lite/reflect.py
|
182
|
-
# ruff: noqa: UP006
|
183
198
|
|
184
199
|
|
185
200
|
_GENERIC_ALIAS_TYPES = (
|
@@ -232,7 +247,6 @@ TODO:
|
|
232
247
|
- translate json keys
|
233
248
|
- debug
|
234
249
|
"""
|
235
|
-
# ruff: noqa: UP006 UP007 N802
|
236
250
|
|
237
251
|
|
238
252
|
log = logging.getLogger(__name__)
|
@@ -431,46 +445,51 @@ def configure_standard_logging(
|
|
431
445
|
*,
|
432
446
|
json: bool = False,
|
433
447
|
target: ta.Optional[logging.Logger] = None,
|
434
|
-
|
448
|
+
force: bool = False,
|
435
449
|
) -> ta.Optional[StandardLogHandler]:
|
436
|
-
|
437
|
-
|
450
|
+
logging._acquireLock() # type: ignore # noqa
|
451
|
+
try:
|
452
|
+
if target is None:
|
453
|
+
target = logging.root
|
438
454
|
|
439
|
-
|
455
|
+
#
|
440
456
|
|
441
|
-
|
442
|
-
|
443
|
-
|
457
|
+
if not force:
|
458
|
+
if any(isinstance(h, StandardLogHandler) for h in list(target.handlers)):
|
459
|
+
return None
|
444
460
|
|
445
|
-
|
461
|
+
#
|
446
462
|
|
447
|
-
|
463
|
+
handler = logging.StreamHandler()
|
448
464
|
|
449
|
-
|
465
|
+
#
|
450
466
|
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
467
|
+
formatter: logging.Formatter
|
468
|
+
if json:
|
469
|
+
formatter = JsonLogFormatter()
|
470
|
+
else:
|
471
|
+
formatter = StandardLogFormatter(StandardLogFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS))
|
472
|
+
handler.setFormatter(formatter)
|
473
|
+
|
474
|
+
#
|
457
475
|
|
458
|
-
|
476
|
+
handler.addFilter(TidLogFilter())
|
459
477
|
|
460
|
-
|
478
|
+
#
|
461
479
|
|
462
|
-
|
480
|
+
target.addHandler(handler)
|
463
481
|
|
464
|
-
|
482
|
+
#
|
465
483
|
|
466
|
-
|
484
|
+
if level is not None:
|
485
|
+
target.setLevel(level)
|
467
486
|
|
468
|
-
|
469
|
-
target.setLevel(level)
|
487
|
+
#
|
470
488
|
|
471
|
-
|
489
|
+
return StandardLogHandler(handler)
|
472
490
|
|
473
|
-
|
491
|
+
finally:
|
492
|
+
logging._releaseLock() # type: ignore # noqa
|
474
493
|
|
475
494
|
|
476
495
|
########################################
|
@@ -480,7 +499,6 @@ TODO:
|
|
480
499
|
- pickle stdlib objs? have to pin to 3.8 pickle protocol, will be cross-version
|
481
500
|
- nonstrict toggle
|
482
501
|
"""
|
483
|
-
# ruff: noqa: UP006 UP007
|
484
502
|
|
485
503
|
|
486
504
|
##
|
@@ -796,7 +814,6 @@ def check_runtime_version() -> None:
|
|
796
814
|
|
797
815
|
########################################
|
798
816
|
# ../../../../omlish/lite/subprocesses.py
|
799
|
-
# ruff: noqa: UP006 UP007
|
800
817
|
|
801
818
|
|
802
819
|
##
|
@@ -903,7 +920,6 @@ def subprocess_try_output_str(*args: str, **kwargs: ta.Any) -> ta.Optional[str]:
|
|
903
920
|
|
904
921
|
########################################
|
905
922
|
# ../base.py
|
906
|
-
# ruff: noqa: UP006
|
907
923
|
|
908
924
|
|
909
925
|
##
|
@@ -3,6 +3,7 @@
|
|
3
3
|
# @omlish-lite
|
4
4
|
# @omlish-script
|
5
5
|
# @omdev-amalg-output main.py
|
6
|
+
# ruff: noqa: N802 UP006 UP007 UP036
|
6
7
|
import abc
|
7
8
|
import dataclasses as dc
|
8
9
|
import datetime
|
@@ -21,6 +22,17 @@ import threading
|
|
21
22
|
import typing as ta
|
22
23
|
|
23
24
|
|
25
|
+
########################################
|
26
|
+
|
27
|
+
|
28
|
+
if sys.version_info < (3, 8):
|
29
|
+
raise OSError(
|
30
|
+
f'Requires python (3, 8), got {sys.version_info} from {sys.executable}') # noqa
|
31
|
+
|
32
|
+
|
33
|
+
########################################
|
34
|
+
|
35
|
+
|
24
36
|
# ../base.py
|
25
37
|
T = ta.TypeVar('T')
|
26
38
|
ConcernT = ta.TypeVar('ConcernT')
|
@@ -31,7 +43,6 @@ DeployConcernConfigT = ta.TypeVar('DeployConcernConfigT', bound='DeployConcernCo
|
|
31
43
|
|
32
44
|
########################################
|
33
45
|
# ../configs.py
|
34
|
-
# ruff: noqa: UP006
|
35
46
|
|
36
47
|
|
37
48
|
##
|
@@ -122,7 +133,6 @@ json_dumps_compact: ta.Callable[..., str] = functools.partial(json.dumps, **JSON
|
|
122
133
|
|
123
134
|
########################################
|
124
135
|
# ../base.py
|
125
|
-
# ruff: noqa: UP006 UP007
|
126
136
|
|
127
137
|
|
128
138
|
##
|
@@ -295,7 +305,6 @@ TODO:
|
|
295
305
|
- translate json keys
|
296
306
|
- debug
|
297
307
|
"""
|
298
|
-
# ruff: noqa: UP006 UP007 N802
|
299
308
|
|
300
309
|
|
301
310
|
log = logging.getLogger(__name__)
|
@@ -494,46 +503,51 @@ def configure_standard_logging(
|
|
494
503
|
*,
|
495
504
|
json: bool = False,
|
496
505
|
target: ta.Optional[logging.Logger] = None,
|
497
|
-
|
506
|
+
force: bool = False,
|
498
507
|
) -> ta.Optional[StandardLogHandler]:
|
499
|
-
|
500
|
-
|
508
|
+
logging._acquireLock() # type: ignore # noqa
|
509
|
+
try:
|
510
|
+
if target is None:
|
511
|
+
target = logging.root
|
501
512
|
|
502
|
-
|
513
|
+
#
|
503
514
|
|
504
|
-
|
505
|
-
|
506
|
-
|
515
|
+
if not force:
|
516
|
+
if any(isinstance(h, StandardLogHandler) for h in list(target.handlers)):
|
517
|
+
return None
|
507
518
|
|
508
|
-
|
519
|
+
#
|
509
520
|
|
510
|
-
|
521
|
+
handler = logging.StreamHandler()
|
511
522
|
|
512
|
-
|
523
|
+
#
|
513
524
|
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
525
|
+
formatter: logging.Formatter
|
526
|
+
if json:
|
527
|
+
formatter = JsonLogFormatter()
|
528
|
+
else:
|
529
|
+
formatter = StandardLogFormatter(StandardLogFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS))
|
530
|
+
handler.setFormatter(formatter)
|
531
|
+
|
532
|
+
#
|
520
533
|
|
521
|
-
|
534
|
+
handler.addFilter(TidLogFilter())
|
522
535
|
|
523
|
-
|
536
|
+
#
|
524
537
|
|
525
|
-
|
538
|
+
target.addHandler(handler)
|
526
539
|
|
527
|
-
|
540
|
+
#
|
528
541
|
|
529
|
-
|
542
|
+
if level is not None:
|
543
|
+
target.setLevel(level)
|
530
544
|
|
531
|
-
|
532
|
-
target.setLevel(level)
|
545
|
+
#
|
533
546
|
|
534
|
-
|
547
|
+
return StandardLogHandler(handler)
|
535
548
|
|
536
|
-
|
549
|
+
finally:
|
550
|
+
logging._releaseLock() # type: ignore # noqa
|
537
551
|
|
538
552
|
|
539
553
|
########################################
|
@@ -676,7 +690,6 @@ class SiteImpl(Site):
|
|
676
690
|
|
677
691
|
########################################
|
678
692
|
# ../../../../omlish/lite/subprocesses.py
|
679
|
-
# ruff: noqa: UP006 UP007
|
680
693
|
|
681
694
|
|
682
695
|
##
|
@@ -783,7 +796,6 @@ def subprocess_try_output_str(*args: str, **kwargs: ta.Any) -> ta.Optional[str]:
|
|
783
796
|
|
784
797
|
########################################
|
785
798
|
# ../runtime.py
|
786
|
-
# ruff: noqa: UP007
|
787
799
|
|
788
800
|
|
789
801
|
class RuntimeImpl(Runtime):
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# @omlish-lite
|
4
4
|
# @omlish-script
|
5
5
|
# @omdev-amalg-output runcommands.py
|
6
|
-
# ruff: noqa: UP006 UP007
|
6
|
+
# ruff: noqa: N802 UP006 UP007 UP036
|
7
7
|
import abc
|
8
8
|
import base64
|
9
9
|
import collections.abc
|
@@ -29,6 +29,17 @@ import weakref # noqa
|
|
29
29
|
import zlib
|
30
30
|
|
31
31
|
|
32
|
+
########################################
|
33
|
+
|
34
|
+
|
35
|
+
if sys.version_info < (3, 8):
|
36
|
+
raise OSError(
|
37
|
+
f'Requires python (3, 8), got {sys.version_info} from {sys.executable}') # noqa
|
38
|
+
|
39
|
+
|
40
|
+
########################################
|
41
|
+
|
42
|
+
|
32
43
|
# ../../../omlish/lite/check.py
|
33
44
|
T = ta.TypeVar('T')
|
34
45
|
|
@@ -202,7 +213,6 @@ class cached_nullary: # noqa
|
|
202
213
|
|
203
214
|
########################################
|
204
215
|
# ../../../omlish/lite/check.py
|
205
|
-
# ruff: noqa: UP006 UP007
|
206
216
|
|
207
217
|
|
208
218
|
def check_isinstance(v: T, spec: ta.Union[ta.Type[T], tuple]) -> T:
|
@@ -229,6 +239,12 @@ def check_not(v: ta.Any) -> None:
|
|
229
239
|
return v
|
230
240
|
|
231
241
|
|
242
|
+
def check_non_empty_str(v: ta.Optional[str]) -> str:
|
243
|
+
if not v:
|
244
|
+
raise ValueError
|
245
|
+
return v
|
246
|
+
|
247
|
+
|
232
248
|
########################################
|
233
249
|
# ../../../omlish/lite/json.py
|
234
250
|
|
@@ -262,7 +278,6 @@ json_dumps_compact: ta.Callable[..., str] = functools.partial(json.dumps, **JSON
|
|
262
278
|
|
263
279
|
########################################
|
264
280
|
# ../../../omlish/lite/reflect.py
|
265
|
-
# ruff: noqa: UP006
|
266
281
|
|
267
282
|
|
268
283
|
_GENERIC_ALIAS_TYPES = (
|
@@ -315,7 +330,6 @@ TODO:
|
|
315
330
|
- translate json keys
|
316
331
|
- debug
|
317
332
|
"""
|
318
|
-
# ruff: noqa: UP006 UP007 N802
|
319
333
|
|
320
334
|
|
321
335
|
log = logging.getLogger(__name__)
|
@@ -514,46 +528,51 @@ def configure_standard_logging(
|
|
514
528
|
*,
|
515
529
|
json: bool = False,
|
516
530
|
target: ta.Optional[logging.Logger] = None,
|
517
|
-
|
531
|
+
force: bool = False,
|
518
532
|
) -> ta.Optional[StandardLogHandler]:
|
519
|
-
|
520
|
-
|
533
|
+
logging._acquireLock() # type: ignore # noqa
|
534
|
+
try:
|
535
|
+
if target is None:
|
536
|
+
target = logging.root
|
521
537
|
|
522
|
-
|
538
|
+
#
|
523
539
|
|
524
|
-
|
525
|
-
|
526
|
-
|
540
|
+
if not force:
|
541
|
+
if any(isinstance(h, StandardLogHandler) for h in list(target.handlers)):
|
542
|
+
return None
|
527
543
|
|
528
|
-
|
544
|
+
#
|
529
545
|
|
530
|
-
|
546
|
+
handler = logging.StreamHandler()
|
531
547
|
|
532
|
-
|
548
|
+
#
|
533
549
|
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
550
|
+
formatter: logging.Formatter
|
551
|
+
if json:
|
552
|
+
formatter = JsonLogFormatter()
|
553
|
+
else:
|
554
|
+
formatter = StandardLogFormatter(StandardLogFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS))
|
555
|
+
handler.setFormatter(formatter)
|
556
|
+
|
557
|
+
#
|
540
558
|
|
541
|
-
|
559
|
+
handler.addFilter(TidLogFilter())
|
542
560
|
|
543
|
-
|
561
|
+
#
|
544
562
|
|
545
|
-
|
563
|
+
target.addHandler(handler)
|
546
564
|
|
547
|
-
|
565
|
+
#
|
548
566
|
|
549
|
-
|
567
|
+
if level is not None:
|
568
|
+
target.setLevel(level)
|
550
569
|
|
551
|
-
|
552
|
-
target.setLevel(level)
|
570
|
+
#
|
553
571
|
|
554
|
-
|
572
|
+
return StandardLogHandler(handler)
|
555
573
|
|
556
|
-
|
574
|
+
finally:
|
575
|
+
logging._releaseLock() # type: ignore # noqa
|
557
576
|
|
558
577
|
|
559
578
|
########################################
|
@@ -563,7 +582,6 @@ TODO:
|
|
563
582
|
- pickle stdlib objs? have to pin to 3.8 pickle protocol, will be cross-version
|
564
583
|
- nonstrict toggle
|
565
584
|
"""
|
566
|
-
# ruff: noqa: UP006 UP007
|
567
585
|
|
568
586
|
|
569
587
|
##
|
@@ -879,7 +897,6 @@ def check_runtime_version() -> None:
|
|
879
897
|
|
880
898
|
########################################
|
881
899
|
# ../../../omlish/lite/subprocesses.py
|
882
|
-
# ruff: noqa: UP006 UP007
|
883
900
|
|
884
901
|
|
885
902
|
##
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ominfra
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev27
|
4
4
|
Summary: ominfra
|
5
5
|
Author: wrmsr
|
6
6
|
License: BSD-3-Clause
|
@@ -12,10 +12,10 @@ 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: omlish==0.0.0.
|
15
|
+
Requires-Dist: omlish==0.0.0.dev27
|
16
16
|
Provides-Extra: all
|
17
|
-
Requires-Dist: paramiko~=3.
|
17
|
+
Requires-Dist: paramiko~=3.5; extra == "all"
|
18
18
|
Requires-Dist: asyncssh~=2.17; python_version < "3.13" and extra == "all"
|
19
19
|
Provides-Extra: ssh
|
20
|
-
Requires-Dist: paramiko~=3.
|
20
|
+
Requires-Dist: paramiko~=3.5; extra == "ssh"
|
21
21
|
Requires-Dist: asyncssh~=2.17; python_version < "3.13" and extra == "ssh"
|
@@ -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.dev27'
|
16
16
|
classifiers = [
|
17
17
|
'License :: OSI Approved :: BSD License',
|
18
18
|
'Development Status :: 2 - Pre-Alpha',
|
@@ -22,16 +22,16 @@ classifiers = [
|
|
22
22
|
]
|
23
23
|
description = 'ominfra'
|
24
24
|
dependencies = [
|
25
|
-
'omlish == 0.0.0.
|
25
|
+
'omlish == 0.0.0.dev27',
|
26
26
|
]
|
27
27
|
|
28
28
|
[project.optional-dependencies]
|
29
29
|
all = [
|
30
|
-
'paramiko ~= 3.
|
30
|
+
'paramiko ~= 3.5',
|
31
31
|
'asyncssh ~= 2.17; python_version < "3.13"',
|
32
32
|
]
|
33
33
|
ssh = [
|
34
|
-
'paramiko ~= 3.
|
34
|
+
'paramiko ~= 3.5',
|
35
35
|
'asyncssh ~= 2.17; python_version < "3.13"',
|
36
36
|
]
|
37
37
|
|
@@ -51,9 +51,8 @@ exclude = [
|
|
51
51
|
'*' = [
|
52
52
|
'*.c',
|
53
53
|
'*.cc',
|
54
|
+
'*.cu',
|
54
55
|
'*.h',
|
55
|
-
'
|
56
|
-
'*.sql',
|
56
|
+
'.manifests.json',
|
57
57
|
'LICENSE',
|
58
|
-
'Dockerfile',
|
59
58
|
]
|
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
|