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.
Files changed (55) hide show
  1. {ominfra-0.0.0.dev25/ominfra.egg-info → ominfra-0.0.0.dev27}/PKG-INFO +4 -4
  2. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/__about__.py +1 -11
  3. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/clouds/aws/auth.py +2 -1
  4. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/_executor.py +48 -32
  5. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/_main.py +42 -30
  6. ominfra-0.0.0.dev27/ominfra/manage/manage.py +12 -0
  7. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/pyremote/_runcommands.py +48 -31
  8. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27/ominfra.egg-info}/PKG-INFO +4 -4
  9. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra.egg-info/SOURCES.txt +1 -1
  10. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra.egg-info/requires.txt +3 -3
  11. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/pyproject.toml +6 -7
  12. ominfra-0.0.0.dev25/ominfra/manage/manage.py +0 -8
  13. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/LICENSE +0 -0
  14. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/MANIFEST.in +0 -0
  15. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/README.rst +0 -0
  16. /ominfra-0.0.0.dev25/ominfra/_manifests.json → /ominfra-0.0.0.dev27/ominfra/.manifests.json +0 -0
  17. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/__init__.py +0 -0
  18. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/clouds/__init__.py +0 -0
  19. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/clouds/aws/__init__.py +0 -0
  20. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/cmds.py +0 -0
  21. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/__init__.py +0 -0
  22. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/configs.py +0 -0
  23. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/__init__.py +0 -0
  24. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/base.py +0 -0
  25. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/concerns/__init__.py +0 -0
  26. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/concerns/dirs.py +0 -0
  27. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/concerns/nginx.py +0 -0
  28. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/concerns/repo.py +0 -0
  29. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/concerns/supervisor.py +0 -0
  30. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/concerns/systemd.py +0 -0
  31. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/concerns/user.py +0 -0
  32. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/concerns/venv.py +0 -0
  33. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/executor/main.py +0 -0
  34. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/__init__.py +0 -0
  35. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/base.py +0 -0
  36. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/configs.py +0 -0
  37. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/deploy.py +0 -0
  38. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/main.py +0 -0
  39. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/nginx.py +0 -0
  40. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/repo.py +0 -0
  41. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/runtime.py +0 -0
  42. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/site.py +0 -0
  43. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/supervisor.py +0 -0
  44. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/poly/venv.py +0 -0
  45. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/deploy/remote.py +0 -0
  46. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/manage/__init__.py +0 -0
  47. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/pyremote/__init__.py +0 -0
  48. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/pyremote/bootstrap.py +0 -0
  49. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/pyremote/runcommands.py +0 -0
  50. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/ssh.py +0 -0
  51. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/tools/__init__.py +0 -0
  52. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra/tools/listresources.py +0 -0
  53. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra.egg-info/dependency_links.txt +0 -0
  54. {ominfra-0.0.0.dev25 → ominfra-0.0.0.dev27}/ominfra.egg-info/top_level.txt +0 -0
  55. {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.dev25
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.dev25
15
+ Requires-Dist: omlish==0.0.0.dev27
16
16
  Provides-Extra: all
17
- Requires-Dist: paramiko~=3.4; extra == "all"
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.4; extra == "ssh"
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.4', # !! LGPL
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 = datetime.datetime.utcnow() # noqa
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
- no_check: bool = False,
448
+ force: bool = False,
435
449
  ) -> ta.Optional[StandardLogHandler]:
436
- if target is None:
437
- target = logging.root
450
+ logging._acquireLock() # type: ignore # noqa
451
+ try:
452
+ if target is None:
453
+ target = logging.root
438
454
 
439
- #
455
+ #
440
456
 
441
- if not no_check:
442
- if any(isinstance(h, StandardLogHandler) for h in list(target.handlers)):
443
- return None
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
- handler = logging.StreamHandler()
463
+ handler = logging.StreamHandler()
448
464
 
449
- #
465
+ #
450
466
 
451
- formatter: logging.Formatter
452
- if json:
453
- formatter = JsonLogFormatter()
454
- else:
455
- formatter = StandardLogFormatter(StandardLogFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS))
456
- handler.setFormatter(formatter)
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
- handler.addFilter(TidLogFilter())
478
+ #
461
479
 
462
- #
480
+ target.addHandler(handler)
463
481
 
464
- target.addHandler(handler)
482
+ #
465
483
 
466
- #
484
+ if level is not None:
485
+ target.setLevel(level)
467
486
 
468
- if level is not None:
469
- target.setLevel(level)
487
+ #
470
488
 
471
- #
489
+ return StandardLogHandler(handler)
472
490
 
473
- return StandardLogHandler(handler)
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
- no_check: bool = False,
506
+ force: bool = False,
498
507
  ) -> ta.Optional[StandardLogHandler]:
499
- if target is None:
500
- target = logging.root
508
+ logging._acquireLock() # type: ignore # noqa
509
+ try:
510
+ if target is None:
511
+ target = logging.root
501
512
 
502
- #
513
+ #
503
514
 
504
- if not no_check:
505
- if any(isinstance(h, StandardLogHandler) for h in list(target.handlers)):
506
- return None
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
- handler = logging.StreamHandler()
521
+ handler = logging.StreamHandler()
511
522
 
512
- #
523
+ #
513
524
 
514
- formatter: logging.Formatter
515
- if json:
516
- formatter = JsonLogFormatter()
517
- else:
518
- formatter = StandardLogFormatter(StandardLogFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS))
519
- handler.setFormatter(formatter)
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
- handler.addFilter(TidLogFilter())
536
+ #
524
537
 
525
- #
538
+ target.addHandler(handler)
526
539
 
527
- target.addHandler(handler)
540
+ #
528
541
 
529
- #
542
+ if level is not None:
543
+ target.setLevel(level)
530
544
 
531
- if level is not None:
532
- target.setLevel(level)
545
+ #
533
546
 
534
- #
547
+ return StandardLogHandler(handler)
535
548
 
536
- return StandardLogHandler(handler)
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):
@@ -0,0 +1,12 @@
1
+ """
2
+ Jobs:
3
+ - globals
4
+ - pkgs
5
+ - pyenv
6
+ - tailscale
7
+ - docker
8
+ - system nginx
9
+ - system service manager - systemd / supervisor
10
+ - users
11
+ - firewall
12
+ """
@@ -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
- no_check: bool = False,
531
+ force: bool = False,
518
532
  ) -> ta.Optional[StandardLogHandler]:
519
- if target is None:
520
- target = logging.root
533
+ logging._acquireLock() # type: ignore # noqa
534
+ try:
535
+ if target is None:
536
+ target = logging.root
521
537
 
522
- #
538
+ #
523
539
 
524
- if not no_check:
525
- if any(isinstance(h, StandardLogHandler) for h in list(target.handlers)):
526
- return None
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
- handler = logging.StreamHandler()
546
+ handler = logging.StreamHandler()
531
547
 
532
- #
548
+ #
533
549
 
534
- formatter: logging.Formatter
535
- if json:
536
- formatter = JsonLogFormatter()
537
- else:
538
- formatter = StandardLogFormatter(StandardLogFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS))
539
- handler.setFormatter(formatter)
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
- handler.addFilter(TidLogFilter())
561
+ #
544
562
 
545
- #
563
+ target.addHandler(handler)
546
564
 
547
- target.addHandler(handler)
565
+ #
548
566
 
549
- #
567
+ if level is not None:
568
+ target.setLevel(level)
550
569
 
551
- if level is not None:
552
- target.setLevel(level)
570
+ #
553
571
 
554
- #
572
+ return StandardLogHandler(handler)
555
573
 
556
- return StandardLogHandler(handler)
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.dev25
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.dev25
15
+ Requires-Dist: omlish==0.0.0.dev27
16
16
  Provides-Extra: all
17
- Requires-Dist: paramiko~=3.4; extra == "all"
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.4; extra == "ssh"
20
+ Requires-Dist: paramiko~=3.5; extra == "ssh"
21
21
  Requires-Dist: asyncssh~=2.17; python_version < "3.13" and extra == "ssh"
@@ -2,9 +2,9 @@ LICENSE
2
2
  MANIFEST.in
3
3
  README.rst
4
4
  pyproject.toml
5
+ ominfra/.manifests.json
5
6
  ominfra/__about__.py
6
7
  ominfra/__init__.py
7
- ominfra/_manifests.json
8
8
  ominfra/cmds.py
9
9
  ominfra/ssh.py
10
10
  ominfra.egg-info/PKG-INFO
@@ -1,13 +1,13 @@
1
- omlish==0.0.0.dev25
1
+ omlish==0.0.0.dev27
2
2
 
3
3
  [all]
4
- paramiko~=3.4
4
+ paramiko~=3.5
5
5
 
6
6
  [all:python_version < "3.13"]
7
7
  asyncssh~=2.17
8
8
 
9
9
  [ssh]
10
- paramiko~=3.4
10
+ paramiko~=3.5
11
11
 
12
12
  [ssh:python_version < "3.13"]
13
13
  asyncssh~=2.17
@@ -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.dev25'
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.dev25',
25
+ 'omlish == 0.0.0.dev27',
26
26
  ]
27
27
 
28
28
  [project.optional-dependencies]
29
29
  all = [
30
- 'paramiko ~= 3.4',
30
+ 'paramiko ~= 3.5',
31
31
  'asyncssh ~= 2.17; python_version < "3.13"',
32
32
  ]
33
33
  ssh = [
34
- 'paramiko ~= 3.4',
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
- '*.json',
56
- '*.sql',
56
+ '.manifests.json',
57
57
  'LICENSE',
58
- 'Dockerfile',
59
58
  ]
@@ -1,8 +0,0 @@
1
- """
2
- Jobs:
3
- - globals
4
- - pkgs
5
- - pyenv
6
- - tailscale
7
- - docker
8
- """
File without changes
File without changes
File without changes
File without changes