ominfra 0.0.0.dev429__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.
Files changed (170) hide show
  1. {ominfra-0.0.0.dev429/ominfra.egg-info → ominfra-0.0.0.dev430}/PKG-INFO +3 -3
  2. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/scripts/journald2aws.py +80 -40
  3. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/scripts/manage.py +81 -40
  4. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/scripts/supervisor.py +81 -40
  5. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430/ominfra.egg-info}/PKG-INFO +3 -3
  6. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra.egg-info/requires.txt +2 -2
  7. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/pyproject.toml +3 -3
  8. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/LICENSE +0 -0
  9. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/MANIFEST.in +0 -0
  10. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/README.md +0 -0
  11. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/.omlish-manifests.json +0 -0
  12. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/__about__.py +0 -0
  13. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/__init__.py +0 -0
  14. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/__init__.py +0 -0
  15. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/__init__.py +0 -0
  16. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/__main__.py +0 -0
  17. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/auth.py +0 -0
  18. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/cli.py +0 -0
  19. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/dataclasses.py +0 -0
  20. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/instancetypes/__init__.py +0 -0
  21. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/instancetypes/__main__.py +0 -0
  22. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/instancetypes/cache.json.gz +0 -0
  23. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/instancetypes/cache.py +0 -0
  24. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/instancetypes/cli.py +0 -0
  25. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/journald2aws/__init__.py +0 -0
  26. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/journald2aws/__main__.py +0 -0
  27. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/journald2aws/cursor.py +0 -0
  28. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/journald2aws/driver.py +0 -0
  29. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/journald2aws/main.py +0 -0
  30. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/journald2aws/poster.py +0 -0
  31. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/logs.py +0 -0
  32. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/metadata.py +0 -0
  33. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/__init__.py +0 -0
  34. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/base.py +0 -0
  35. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/gen/__init__.py +0 -0
  36. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/gen/__main__.py +0 -0
  37. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/gen/cli.py +0 -0
  38. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/gen/gen.py +0 -0
  39. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/services/__init__.py +0 -0
  40. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/services/ec2.py +0 -0
  41. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/services/lambda_.py +0 -0
  42. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/services/rds.py +0 -0
  43. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/services/s3.py +0 -0
  44. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/aws/models/services/services.toml +0 -0
  45. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/gcp/__init__.py +0 -0
  46. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/gcp/api.py +0 -0
  47. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/clouds/gcp/auth.py +0 -0
  48. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/commands/__init__.py +0 -0
  49. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/commands/runners.py +0 -0
  50. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/commands/ssh.py +0 -0
  51. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/journald/__init__.py +0 -0
  52. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/journald/fields.py +0 -0
  53. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/journald/genmessages.py +0 -0
  54. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/journald/messages.py +0 -0
  55. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/journald/tailer.py +0 -0
  56. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/__init__.py +0 -0
  57. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/__main__.py +0 -0
  58. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/bootstrap.py +0 -0
  59. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/bootstrap_.py +0 -0
  60. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/commands/__init__.py +0 -0
  61. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/commands/base.py +0 -0
  62. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/commands/inject.py +0 -0
  63. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/commands/injection.py +0 -0
  64. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/commands/local.py +0 -0
  65. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/commands/marshal.py +0 -0
  66. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/commands/ping.py +0 -0
  67. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/commands/subprocess.py +0 -0
  68. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/commands/types.py +0 -0
  69. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/config.py +0 -0
  70. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/__init__.py +0 -0
  71. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/apps.py +0 -0
  72. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/commands.py +0 -0
  73. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/conf/__init__.py +0 -0
  74. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/conf/inject.py +0 -0
  75. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/conf/manager.py +0 -0
  76. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/conf/specs.py +0 -0
  77. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/config.py +0 -0
  78. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/deploy.py +0 -0
  79. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/git.py +0 -0
  80. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/inject.py +0 -0
  81. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/injection.py +0 -0
  82. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/interp.py +0 -0
  83. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/nginx.py +0 -0
  84. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/paths/__init__.py +0 -0
  85. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/paths/inject.py +0 -0
  86. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/paths/manager.py +0 -0
  87. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/paths/owners.py +0 -0
  88. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/paths/paths.py +0 -0
  89. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/paths/specs.py +0 -0
  90. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/paths/types.py +0 -0
  91. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/specs.py +0 -0
  92. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/systemd.py +0 -0
  93. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/tags.py +0 -0
  94. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/tmp.py +0 -0
  95. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/types.py +0 -0
  96. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/deploy/venvs.py +0 -0
  97. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/inject.py +0 -0
  98. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/main.py +0 -0
  99. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/marshal.py +0 -0
  100. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/remote/__init__.py +0 -0
  101. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/remote/_main.py +0 -0
  102. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/remote/channel.py +0 -0
  103. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/remote/config.py +0 -0
  104. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/remote/connection.py +0 -0
  105. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/remote/execution.py +0 -0
  106. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/remote/inject.py +0 -0
  107. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/remote/payload.py +0 -0
  108. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/remote/spawning.py +0 -0
  109. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/system/__init__.py +0 -0
  110. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/system/commands.py +0 -0
  111. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/system/config.py +0 -0
  112. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/system/inject.py +0 -0
  113. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/system/packages.py +0 -0
  114. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/system/platforms.py +0 -0
  115. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/targets/__init__.py +0 -0
  116. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/targets/bestpython.py +0 -0
  117. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/targets/bestpython.sh +0 -0
  118. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/targets/connection.py +0 -0
  119. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/targets/inject.py +0 -0
  120. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/manage/targets/targets.py +0 -0
  121. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/pyremote.py +0 -0
  122. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/scripts/__init__.py +0 -0
  123. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/LICENSE.txt +0 -0
  124. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/__init__.py +0 -0
  125. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/__main__.py +0 -0
  126. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/configs.py +0 -0
  127. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/dispatchers.py +0 -0
  128. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/dispatchersimpl.py +0 -0
  129. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/errors.py +0 -0
  130. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/events.py +0 -0
  131. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/groups.py +0 -0
  132. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/groupsimpl.py +0 -0
  133. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/http.py +0 -0
  134. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/inject.py +0 -0
  135. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/io.py +0 -0
  136. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/main.py +0 -0
  137. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/pipes.py +0 -0
  138. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/privileges.py +0 -0
  139. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/process.py +0 -0
  140. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/processimpl.py +0 -0
  141. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/setup.py +0 -0
  142. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/setupimpl.py +0 -0
  143. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/signals.py +0 -0
  144. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/spawning.py +0 -0
  145. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/spawningimpl.py +0 -0
  146. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/states.py +0 -0
  147. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/supervisor.py +0 -0
  148. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/types.py +0 -0
  149. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/__init__.py +0 -0
  150. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/collections.py +0 -0
  151. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/diag.py +0 -0
  152. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/fds.py +0 -0
  153. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/fs.py +0 -0
  154. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/os.py +0 -0
  155. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/ostypes.py +0 -0
  156. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/signals.py +0 -0
  157. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/strings.py +0 -0
  158. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/supervisor/utils/users.py +0 -0
  159. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/systemd.py +0 -0
  160. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/tailscale/__init__.py +0 -0
  161. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/tailscale/api.py +0 -0
  162. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/tailscale/cli.py +0 -0
  163. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/threadworkers.py +0 -0
  164. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/tools/__init__.py +0 -0
  165. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra/tools/listresources.py +0 -0
  166. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra.egg-info/SOURCES.txt +0 -0
  167. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra.egg-info/dependency_links.txt +0 -0
  168. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra.egg-info/entry_points.txt +0 -0
  169. {ominfra-0.0.0.dev429 → ominfra-0.0.0.dev430}/ominfra.egg-info/top_level.txt +0 -0
  170. {ominfra-0.0.0.dev429 → 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.dev429
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.dev429
18
- Requires-Dist: omlish==0.0.0.dev429
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
- all: bool = False, # noqa
1627
- repr: bool = False, # noqa
1628
- hash: bool = False, # noqa
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 or all:
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 or all:
1638
+ if hash:
1634
1639
  locals_dct.update(__hash__=self.hash)
1635
- if eq or all:
1640
+ if eq:
1636
1641
  locals_dct.update(__eq__=self.eq)
1637
1642
  return self
1638
1643
 
@@ -2717,8 +2722,8 @@ class LoggingSourceFileInfo(ta.NamedTuple):
2717
2722
  return None
2718
2723
 
2719
2724
  return cls(
2720
- file_name,
2721
- module,
2725
+ file_name=file_name,
2726
+ module=module,
2722
2727
  )
2723
2728
 
2724
2729
 
@@ -2735,9 +2740,9 @@ class LoggingThreadInfo(ta.NamedTuple):
2735
2740
  @classmethod
2736
2741
  def build(cls) -> 'LoggingThreadInfo':
2737
2742
  return cls(
2738
- threading.get_ident(),
2739
- threading.get_native_id() if hasattr(threading, 'get_native_id') else None,
2740
- 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,
2741
2746
  )
2742
2747
 
2743
2748
 
@@ -2752,7 +2757,7 @@ class LoggingProcessInfo(ta.NamedTuple):
2752
2757
  @classmethod
2753
2758
  def build(cls) -> 'LoggingProcessInfo':
2754
2759
  return cls(
2755
- os.getpid(),
2760
+ pid=os.getpid(),
2756
2761
  )
2757
2762
 
2758
2763
 
@@ -2771,7 +2776,7 @@ class LoggingMultiprocessingInfo(ta.NamedTuple):
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
 
@@ -2798,7 +2803,7 @@ class LoggingAsyncioTaskInfo(ta.NamedTuple):
2798
2803
  return None
2799
2804
 
2800
2805
  return cls(
2801
- task.get_name(), # Always non-None
2806
+ name=task.get_name(), # Always non-None
2802
2807
  )
2803
2808
 
2804
2809
 
@@ -2821,36 +2826,66 @@ class NamedLogLevel(int):
2821
2826
 
2822
2827
  #
2823
2828
 
2824
- @property
2825
- def exact_name(self) -> ta.Optional[str]:
2826
- return self._NAMES_BY_INT.get(self)
2829
+ _CACHE: ta.ClassVar[ta.MutableMapping[int, 'NamedLogLevel']] = {}
2830
+
2831
+ @ta.overload
2832
+ def __new__(cls, name: str, offset: int = 0, /) -> 'NamedLogLevel':
2833
+ ...
2834
+
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)
2827
2846
 
2828
- _effective_name: ta.Optional[str]
2847
+ #
2848
+
2849
+ _name_and_offset: ta.Tuple[str, int]
2829
2850
 
2830
2851
  @property
2831
- def effective_name(self) -> ta.Optional[str]:
2852
+ def name_and_offset(self) -> ta.Tuple[str, int]:
2832
2853
  try:
2833
- return self._effective_name
2854
+ return self._name_and_offset
2834
2855
  except AttributeError:
2835
2856
  pass
2836
2857
 
2837
- if (n := self.exact_name) is None:
2858
+ if (n := self._NAMES_BY_INT.get(self)) is not None:
2859
+ t = (n, 0)
2860
+ else:
2838
2861
  for n, i in self._NAME_INT_PAIRS: # noqa
2839
2862
  if self >= i:
2863
+ t = (n, (self - i))
2840
2864
  break
2841
2865
  else:
2842
- n = None
2866
+ t = ('NOTSET', int(self))
2867
+
2868
+ self._name_and_offset = t
2869
+ return t
2843
2870
 
2844
- self._effective_name = n
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
2845
2879
  return n
2846
2880
 
2847
2881
  #
2848
2882
 
2849
- def __repr__(self) -> str:
2850
- return f'{self.__class__.__name__}({int(self)})'
2851
-
2852
2883
  def __str__(self) -> str:
2853
- return self.exact_name or f'{self.effective_name or "INVALID"}:{int(self)}'
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 ""})'
2854
2889
 
2855
2890
  #
2856
2891
 
@@ -2870,6 +2905,9 @@ NamedLogLevel.DEBUG = NamedLogLevel(logging.DEBUG)
2870
2905
  NamedLogLevel.NOTSET = NamedLogLevel(logging.NOTSET)
2871
2906
 
2872
2907
 
2908
+ NamedLogLevel._CACHE.update({i: NamedLogLevel(i) for i in NamedLogLevel._NAMES_BY_INT}) # noqa
2909
+
2910
+
2873
2911
  ########################################
2874
2912
  # ../../../../../omlish/logs/std/filters.py
2875
2913
 
@@ -4968,10 +5006,10 @@ class LoggingCaller(ta.NamedTuple):
4968
5006
  sinfo = sinfo[:-1]
4969
5007
 
4970
5008
  return cls(
4971
- f.f_code.co_filename,
4972
- f.f_lineno or 0,
4973
- f.f_code.co_name,
4974
- 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,
4975
5013
  )
4976
5014
 
4977
5015
 
@@ -5089,9 +5127,9 @@ class LoggingTimeFields(ta.NamedTuple):
5089
5127
  relative_created = (time_ns - start_time_ns) / 1e6
5090
5128
 
5091
5129
  return cls(
5092
- created,
5093
- msecs,
5094
- relative_created,
5130
+ created=created,
5131
+ msecs=msecs,
5132
+ relative_created=relative_created,
5095
5133
  )
5096
5134
 
5097
5135
 
@@ -5734,7 +5772,6 @@ def subprocess_maybe_shell_wrap_exec(*cmd: str) -> ta.Tuple[str, ...]:
5734
5772
 
5735
5773
 
5736
5774
  class AnyLogger(Abstract, ta.Generic[T]):
5737
- @ta.final
5738
5775
  def is_enabled_for(self, level: LogLevel) -> bool:
5739
5776
  return level >= self.get_effective_level()
5740
5777
 
@@ -5933,7 +5970,7 @@ class AsyncLogger(AnyLogger[ta.Awaitable[None]], Abstract):
5933
5970
  class AnyNopLogger(AnyLogger[T], Abstract):
5934
5971
  @ta.final
5935
5972
  def get_effective_level(self) -> LogLevel:
5936
- return 999
5973
+ return -999
5937
5974
 
5938
5975
 
5939
5976
  @ta.final
@@ -6243,7 +6280,7 @@ class LoggingContextLogRecord(logging.LogRecord):
6243
6280
 
6244
6281
 
6245
6282
  ########################################
6246
- # ../../../../../omlish/logs/std/adapters.py
6283
+ # ../../../../../omlish/logs/std/loggers.py
6247
6284
 
6248
6285
 
6249
6286
  ##
@@ -6259,6 +6296,9 @@ class StdLogger(Logger):
6259
6296
  def std(self) -> logging.Logger:
6260
6297
  return self._std
6261
6298
 
6299
+ def is_enabled_for(self, level: LogLevel) -> bool:
6300
+ return self._std.isEnabledFor(level)
6301
+
6262
6302
  def get_effective_level(self) -> LogLevel:
6263
6303
  return self._std.getEffectiveLevel()
6264
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
- all: bool = False, # noqa
2806
- repr: bool = False, # noqa
2807
- hash: bool = False, # noqa
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 or all:
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 or all:
2817
+ if hash:
2813
2818
  locals_dct.update(__hash__=self.hash)
2814
- if eq or all:
2819
+ if eq:
2815
2820
  locals_dct.update(__eq__=self.eq)
2816
2821
  return self
2817
2822
 
@@ -4019,8 +4024,8 @@ class LoggingSourceFileInfo(ta.NamedTuple):
4019
4024
  return None
4020
4025
 
4021
4026
  return cls(
4022
- file_name,
4023
- module,
4027
+ file_name=file_name,
4028
+ module=module,
4024
4029
  )
4025
4030
 
4026
4031
 
@@ -4037,9 +4042,9 @@ class LoggingThreadInfo(ta.NamedTuple):
4037
4042
  @classmethod
4038
4043
  def build(cls) -> 'LoggingThreadInfo':
4039
4044
  return cls(
4040
- threading.get_ident(),
4041
- threading.get_native_id() if hasattr(threading, 'get_native_id') else None,
4042
- 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,
4043
4048
  )
4044
4049
 
4045
4050
 
@@ -4054,7 +4059,7 @@ class LoggingProcessInfo(ta.NamedTuple):
4054
4059
  @classmethod
4055
4060
  def build(cls) -> 'LoggingProcessInfo':
4056
4061
  return cls(
4057
- os.getpid(),
4062
+ pid=os.getpid(),
4058
4063
  )
4059
4064
 
4060
4065
 
@@ -4073,7 +4078,7 @@ class LoggingMultiprocessingInfo(ta.NamedTuple):
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
 
@@ -4100,7 +4105,7 @@ class LoggingAsyncioTaskInfo(ta.NamedTuple):
4100
4105
  return None
4101
4106
 
4102
4107
  return cls(
4103
- task.get_name(), # Always non-None
4108
+ name=task.get_name(), # Always non-None
4104
4109
  )
4105
4110
 
4106
4111
 
@@ -4123,36 +4128,66 @@ class NamedLogLevel(int):
4123
4128
 
4124
4129
  #
4125
4130
 
4126
- @property
4127
- def exact_name(self) -> ta.Optional[str]:
4128
- return self._NAMES_BY_INT.get(self)
4131
+ _CACHE: ta.ClassVar[ta.MutableMapping[int, 'NamedLogLevel']] = {}
4132
+
4133
+ @ta.overload
4134
+ def __new__(cls, name: str, offset: int = 0, /) -> 'NamedLogLevel':
4135
+ ...
4136
+
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
+ #
4129
4150
 
4130
- _effective_name: ta.Optional[str]
4151
+ _name_and_offset: ta.Tuple[str, int]
4131
4152
 
4132
4153
  @property
4133
- def effective_name(self) -> ta.Optional[str]:
4154
+ def name_and_offset(self) -> ta.Tuple[str, int]:
4134
4155
  try:
4135
- return self._effective_name
4156
+ return self._name_and_offset
4136
4157
  except AttributeError:
4137
4158
  pass
4138
4159
 
4139
- if (n := self.exact_name) is None:
4160
+ if (n := self._NAMES_BY_INT.get(self)) is not None:
4161
+ t = (n, 0)
4162
+ else:
4140
4163
  for n, i in self._NAME_INT_PAIRS: # noqa
4141
4164
  if self >= i:
4165
+ t = (n, (self - i))
4142
4166
  break
4143
4167
  else:
4144
- n = None
4168
+ t = ('NOTSET', int(self))
4169
+
4170
+ self._name_and_offset = t
4171
+ return t
4145
4172
 
4146
- self._effective_name = n
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
4147
4181
  return n
4148
4182
 
4149
4183
  #
4150
4184
 
4151
- def __repr__(self) -> str:
4152
- return f'{self.__class__.__name__}({int(self)})'
4153
-
4154
4185
  def __str__(self) -> str:
4155
- return self.exact_name or f'{self.effective_name or "INVALID"}:{int(self)}'
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 ""})'
4156
4191
 
4157
4192
  #
4158
4193
 
@@ -4172,6 +4207,9 @@ NamedLogLevel.DEBUG = NamedLogLevel(logging.DEBUG)
4172
4207
  NamedLogLevel.NOTSET = NamedLogLevel(logging.NOTSET)
4173
4208
 
4174
4209
 
4210
+ NamedLogLevel._CACHE.update({i: NamedLogLevel(i) for i in NamedLogLevel._NAMES_BY_INT}) # noqa
4211
+
4212
+
4175
4213
  ########################################
4176
4214
  # ../../../omlish/logs/std/filters.py
4177
4215
 
@@ -7646,10 +7684,10 @@ class LoggingCaller(ta.NamedTuple):
7646
7684
  sinfo = sinfo[:-1]
7647
7685
 
7648
7686
  return cls(
7649
- f.f_code.co_filename,
7650
- f.f_lineno or 0,
7651
- f.f_code.co_name,
7652
- 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,
7653
7691
  )
7654
7692
 
7655
7693
 
@@ -7660,6 +7698,7 @@ class LoggingCaller(ta.NamedTuple):
7660
7698
  ##
7661
7699
 
7662
7700
 
7701
+ @ta.runtime_checkable
7663
7702
  class LoggerLike(ta.Protocol):
7664
7703
  """Satisfied by both our Logger and stdlib logging.Logger."""
7665
7704
 
@@ -7798,9 +7837,9 @@ class LoggingTimeFields(ta.NamedTuple):
7798
7837
  relative_created = (time_ns - start_time_ns) / 1e6
7799
7838
 
7800
7839
  return cls(
7801
- created,
7802
- msecs,
7803
- relative_created,
7840
+ created=created,
7841
+ msecs=msecs,
7842
+ relative_created=relative_created,
7804
7843
  )
7805
7844
 
7806
7845
 
@@ -10970,7 +11009,6 @@ class DeploySpec(DeploySpecKeyed[DeployKey]):
10970
11009
 
10971
11010
 
10972
11011
  class AnyLogger(Abstract, ta.Generic[T]):
10973
- @ta.final
10974
11012
  def is_enabled_for(self, level: LogLevel) -> bool:
10975
11013
  return level >= self.get_effective_level()
10976
11014
 
@@ -11169,7 +11207,7 @@ class AsyncLogger(AnyLogger[ta.Awaitable[None]], Abstract):
11169
11207
  class AnyNopLogger(AnyLogger[T], Abstract):
11170
11208
  @ta.final
11171
11209
  def get_effective_level(self) -> LogLevel:
11172
- return 999
11210
+ return -999
11173
11211
 
11174
11212
 
11175
11213
  @ta.final
@@ -12091,7 +12129,7 @@ class SingleDirDeployPathOwner(DeployPathOwner, Abstract):
12091
12129
 
12092
12130
 
12093
12131
  ########################################
12094
- # ../../../omlish/logs/std/adapters.py
12132
+ # ../../../omlish/logs/std/loggers.py
12095
12133
 
12096
12134
 
12097
12135
  ##
@@ -12107,6 +12145,9 @@ class StdLogger(Logger):
12107
12145
  def std(self) -> logging.Logger:
12108
12146
  return self._std
12109
12147
 
12148
+ def is_enabled_for(self, level: LogLevel) -> bool:
12149
+ return self._std.isEnabledFor(level)
12150
+
12110
12151
  def get_effective_level(self) -> LogLevel:
12111
12152
  return self._std.getEffectiveLevel()
12112
12153