ominfra 0.0.0.dev356__tar.gz → 0.0.0.dev357__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.dev356/ominfra.egg-info → ominfra-0.0.0.dev357}/PKG-INFO +3 -3
  2. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/commands/injection.py +3 -0
  3. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/commands/local.py +3 -0
  4. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/commands/marshal.py +3 -0
  5. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/commands/subprocess.py +42 -4
  6. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/apps.py +3 -0
  7. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/conf/inject.py +3 -0
  8. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/injection.py +3 -0
  9. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/nginx.py +3 -0
  10. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/paths/inject.py +3 -0
  11. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/paths/manager.py +3 -0
  12. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/paths/owners.py +3 -0
  13. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/paths/specs.py +3 -0
  14. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/systemd.py +3 -0
  15. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/tmp.py +3 -0
  16. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/venvs.py +3 -0
  17. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/remote/config.py +3 -0
  18. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/remote/connection.py +1 -1
  19. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/remote/payload.py +3 -0
  20. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/remote/spawning.py +1 -1
  21. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/system/config.py +3 -0
  22. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/system/inject.py +3 -0
  23. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/system/packages.py +4 -1
  24. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/targets/connection.py +1 -1
  25. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/pyremote.py +10 -4
  26. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/scripts/journald2aws.py +1 -1
  27. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/scripts/manage.py +247 -18
  28. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/scripts/supervisor.py +1 -1
  29. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357/ominfra.egg-info}/PKG-INFO +3 -3
  30. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra.egg-info/requires.txt +2 -2
  31. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/pyproject.toml +3 -3
  32. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/LICENSE +0 -0
  33. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/MANIFEST.in +0 -0
  34. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/README.md +0 -0
  35. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/.manifests.json +0 -0
  36. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/__about__.py +0 -0
  37. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/__init__.py +0 -0
  38. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/__init__.py +0 -0
  39. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/__init__.py +0 -0
  40. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/__main__.py +0 -0
  41. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/auth.py +0 -0
  42. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/cli.py +0 -0
  43. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/dataclasses.py +0 -0
  44. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/instancetypes/__init__.py +0 -0
  45. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/instancetypes/__main__.py +0 -0
  46. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/instancetypes/cache.json.gz +0 -0
  47. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/instancetypes/cache.py +0 -0
  48. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/instancetypes/cli.py +0 -0
  49. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/journald2aws/__init__.py +0 -0
  50. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/journald2aws/__main__.py +0 -0
  51. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/journald2aws/cursor.py +0 -0
  52. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/journald2aws/driver.py +0 -0
  53. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/journald2aws/main.py +0 -0
  54. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/journald2aws/poster.py +0 -0
  55. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/logs.py +0 -0
  56. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/metadata.py +0 -0
  57. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/models/__init__.py +0 -0
  58. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/models/base.py +0 -0
  59. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/models/gen/__init__.py +0 -0
  60. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/models/gen/__main__.py +0 -0
  61. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/models/gen/cli.py +0 -0
  62. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/models/gen/gen.py +0 -0
  63. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/models/services/__init__.py +0 -0
  64. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/models/services/ec2.py +0 -0
  65. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/models/services/lambda_.py +0 -0
  66. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/models/services/rds.py +0 -0
  67. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/models/services/s3.py +0 -0
  68. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/aws/models/services/services.toml +0 -0
  69. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/gcp/__init__.py +0 -0
  70. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/gcp/api.py +0 -0
  71. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/clouds/gcp/auth.py +0 -0
  72. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/commands/__init__.py +0 -0
  73. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/commands/runners.py +0 -0
  74. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/commands/ssh.py +0 -0
  75. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/journald/__init__.py +0 -0
  76. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/journald/fields.py +0 -0
  77. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/journald/genmessages.py +0 -0
  78. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/journald/messages.py +0 -0
  79. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/journald/tailer.py +0 -0
  80. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/__init__.py +0 -0
  81. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/__main__.py +0 -0
  82. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/bootstrap.py +0 -0
  83. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/bootstrap_.py +0 -0
  84. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/commands/__init__.py +0 -0
  85. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/commands/base.py +0 -0
  86. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/commands/inject.py +0 -0
  87. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/commands/ping.py +0 -0
  88. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/commands/types.py +0 -0
  89. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/config.py +0 -0
  90. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/__init__.py +0 -0
  91. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/commands.py +0 -0
  92. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/conf/__init__.py +0 -0
  93. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/conf/manager.py +0 -0
  94. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/conf/specs.py +0 -0
  95. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/config.py +0 -0
  96. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/deploy.py +0 -0
  97. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/git.py +0 -0
  98. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/inject.py +0 -0
  99. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/interp.py +0 -0
  100. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/paths/__init__.py +0 -0
  101. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/paths/paths.py +0 -0
  102. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/paths/types.py +0 -0
  103. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/specs.py +0 -0
  104. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/tags.py +0 -0
  105. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/deploy/types.py +0 -0
  106. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/inject.py +0 -0
  107. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/main.py +0 -0
  108. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/marshal.py +0 -0
  109. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/remote/__init__.py +0 -0
  110. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/remote/_main.py +0 -0
  111. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/remote/channel.py +0 -0
  112. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/remote/execution.py +0 -0
  113. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/remote/inject.py +0 -0
  114. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/system/__init__.py +0 -0
  115. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/system/commands.py +0 -0
  116. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/system/platforms.py +0 -0
  117. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/targets/__init__.py +0 -0
  118. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/targets/bestpython.py +0 -0
  119. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/targets/bestpython.sh +0 -0
  120. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/targets/inject.py +0 -0
  121. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/manage/targets/targets.py +0 -0
  122. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/scripts/__init__.py +0 -0
  123. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/LICENSE.txt +0 -0
  124. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/__init__.py +0 -0
  125. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/__main__.py +0 -0
  126. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/configs.py +0 -0
  127. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/dispatchers.py +0 -0
  128. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/dispatchersimpl.py +0 -0
  129. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/errors.py +0 -0
  130. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/events.py +0 -0
  131. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/groups.py +0 -0
  132. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/groupsimpl.py +0 -0
  133. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/http.py +0 -0
  134. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/inject.py +0 -0
  135. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/io.py +0 -0
  136. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/main.py +0 -0
  137. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/pipes.py +0 -0
  138. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/privileges.py +0 -0
  139. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/process.py +0 -0
  140. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/processimpl.py +0 -0
  141. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/setup.py +0 -0
  142. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/setupimpl.py +0 -0
  143. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/signals.py +0 -0
  144. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/spawning.py +0 -0
  145. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/spawningimpl.py +0 -0
  146. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/states.py +0 -0
  147. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/supervisor.py +0 -0
  148. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/types.py +0 -0
  149. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/utils/__init__.py +0 -0
  150. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/utils/collections.py +0 -0
  151. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/utils/diag.py +0 -0
  152. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/utils/fds.py +0 -0
  153. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/utils/fs.py +0 -0
  154. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/utils/os.py +0 -0
  155. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/utils/ostypes.py +0 -0
  156. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/utils/signals.py +0 -0
  157. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/utils/strings.py +0 -0
  158. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/supervisor/utils/users.py +0 -0
  159. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/systemd.py +0 -0
  160. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/tailscale/__init__.py +0 -0
  161. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/tailscale/api.py +0 -0
  162. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/tailscale/cli.py +0 -0
  163. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/threadworkers.py +0 -0
  164. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/tools/__init__.py +0 -0
  165. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra/tools/listresources.py +0 -0
  166. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra.egg-info/SOURCES.txt +0 -0
  167. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra.egg-info/dependency_links.txt +0 -0
  168. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra.egg-info/entry_points.txt +0 -0
  169. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/ominfra.egg-info/top_level.txt +0 -0
  170. {ominfra-0.0.0.dev356 → ominfra-0.0.0.dev357}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ominfra
3
- Version: 0.0.0.dev356
3
+ Version: 0.0.0.dev357
4
4
  Summary: ominfra
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,8 +12,8 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.13
14
14
  License-File: LICENSE
15
- Requires-Dist: omdev==0.0.0.dev356
16
- Requires-Dist: omlish==0.0.0.dev356
15
+ Requires-Dist: omdev==0.0.0.dev357
16
+ Requires-Dist: omlish==0.0.0.dev357
17
17
  Provides-Extra: all
18
18
  Requires-Dist: paramiko~=3.5; extra == "all"
19
19
  Requires-Dist: asyncssh~=2.21; extra == "all"
@@ -11,6 +11,9 @@ from .base import CommandExecutorRegistration
11
11
  from .base import CommandRegistration
12
12
 
13
13
 
14
+ ##
15
+
16
+
14
17
  def bind_command(
15
18
  command_cls: ta.Type[Command],
16
19
  executor_cls: ta.Optional[ta.Type[CommandExecutor]],
@@ -4,6 +4,9 @@ from .base import CommandExecutor
4
4
  from .types import CommandExecutorMap
5
5
 
6
6
 
7
+ ##
8
+
9
+
7
10
  class LocalCommandExecutor(CommandExecutor):
8
11
  def __init__(
9
12
  self,
@@ -5,6 +5,9 @@ from .base import Command
5
5
  from .base import CommandNameMap
6
6
 
7
7
 
8
+ ##
9
+
10
+
8
11
  def install_command_marshaling(
9
12
  cmds: CommandNameMap,
10
13
  msh: ObjMarshalerManager,
@@ -28,13 +28,26 @@ class SubprocessCommand(Command['SubprocessCommand.Output']):
28
28
  env: ta.Optional[ta.Mapping[str, str]] = None
29
29
 
30
30
  stdout: str = 'pipe' # SubprocessChannelOption
31
+ decode_stdout: ta.Optional[str] = None
32
+
31
33
  stderr: str = 'pipe' # SubprocessChannelOption
34
+ decode_stderr: ta.Optional[str] = None
32
35
 
33
36
  input: ta.Optional[bytes] = None
37
+ encode_input: ta.Optional[str] = None
38
+ input_str: ta.Optional[str] = None
39
+
34
40
  timeout: ta.Optional[float] = None
35
41
 
36
42
  def __post_init__(self) -> None:
37
43
  check.not_isinstance(self.cmd, str)
44
+ check.state(not (self.input is not None and self.input_str is not None))
45
+ if self.decode_stdout is not None:
46
+ check.non_empty_str(self.decode_stdout)
47
+ if self.decode_stderr is not None:
48
+ check.non_empty_str(self.decode_stderr)
49
+ if self.encode_input is not None:
50
+ check.non_empty_str(self.encode_input)
38
51
 
39
52
  @dc.dataclass(frozen=True)
40
53
  class Output(Command.Output):
@@ -44,11 +57,25 @@ class SubprocessCommand(Command['SubprocessCommand.Output']):
44
57
  elapsed_s: float
45
58
 
46
59
  stdout: ta.Optional[bytes] = None
60
+ stdout_str: ta.Optional[str] = None
61
+
47
62
  stderr: ta.Optional[bytes] = None
63
+ stderr_str: ta.Optional[str] = None
48
64
 
49
65
 
50
66
  class SubprocessCommandExecutor(CommandExecutor[SubprocessCommand, SubprocessCommand.Output]):
67
+ DEFAULT_INPUT_ENCODING: ta.ClassVar[str] = 'utf-8'
68
+
51
69
  async def execute(self, cmd: SubprocessCommand) -> SubprocessCommand.Output:
70
+ input_bytes: ta.Optional[bytes]
71
+ if cmd.input is not None:
72
+ check.none(cmd.input_str)
73
+ input_bytes = cmd.input
74
+ elif cmd.input_str is not None:
75
+ input_bytes = cmd.input_str.encode(cmd.encode_input or self.DEFAULT_INPUT_ENCODING)
76
+ else:
77
+ input_bytes = None
78
+
52
79
  proc: asyncio.subprocess.Process
53
80
  async with asyncio_subprocesses.popen(
54
81
  *subprocess_maybe_shell_wrap_exec(*cmd.cmd),
@@ -57,7 +84,7 @@ class SubprocessCommandExecutor(CommandExecutor[SubprocessCommand, SubprocessCom
57
84
  cwd=cmd.cwd,
58
85
  env={**os.environ, **(cmd.env or {})},
59
86
 
60
- stdin=subprocess.PIPE if cmd.input is not None else None,
87
+ stdin=subprocess.PIPE if input_bytes is not None else None,
61
88
  stdout=SUBPROCESS_CHANNEL_OPTION_VALUES[ta.cast(SubprocessChannelOption, cmd.stdout)],
62
89
  stderr=SUBPROCESS_CHANNEL_OPTION_VALUES[ta.cast(SubprocessChannelOption, cmd.stderr)],
63
90
 
@@ -66,17 +93,28 @@ class SubprocessCommandExecutor(CommandExecutor[SubprocessCommand, SubprocessCom
66
93
  start_time = time.time()
67
94
  stdout, stderr = await asyncio_subprocesses.communicate(
68
95
  proc,
69
- input=cmd.input,
96
+ input=input,
70
97
  timeout=cmd.timeout,
71
98
  )
72
99
  end_time = time.time()
73
100
 
101
+ out_kw: ta.Dict[str, ta.Any] = {}
102
+ if stdout is not None:
103
+ if cmd.decode_stdout is not None:
104
+ out_kw.update(stdout_str=stdout.decode(cmd.decode_stdout))
105
+ else:
106
+ out_kw.update(stdout=stdout)
107
+ if stderr is not None:
108
+ if cmd.decode_stderr is not None:
109
+ out_kw.update(stderr_str=stderr.decode(cmd.decode_stderr))
110
+ else:
111
+ out_kw.update(stderr=stderr)
112
+
74
113
  return SubprocessCommand.Output(
75
114
  rc=check.not_none(proc.returncode),
76
115
  pid=proc.pid,
77
116
 
78
117
  elapsed_s=end_time - start_time,
79
118
 
80
- stdout=stdout, # noqa
81
- stderr=stderr, # noqa
119
+ **out_kw,
82
120
  )
@@ -20,6 +20,9 @@ from .types import DeployHome
20
20
  from .venvs import DeployVenvManager
21
21
 
22
22
 
23
+ ##
24
+
25
+
23
26
  class DeployAppManager(DeployPathOwner):
24
27
  def __init__(
25
28
  self,
@@ -9,6 +9,9 @@ from ..injection import bind_deploy_manager
9
9
  from .manager import DeployConfManager
10
10
 
11
11
 
12
+ ##
13
+
14
+
12
15
  def bind_deploy_conf() -> InjectorBindings:
13
16
  lst: ta.List[InjectorBindingOrBindings] = [
14
17
  bind_deploy_manager(DeployConfManager),
@@ -5,6 +5,9 @@ from omlish.lite.inject import inj
5
5
  from .paths.owners import DeployPathOwner
6
6
 
7
7
 
8
+ ##
9
+
10
+
8
11
  def bind_deploy_manager(cls: type) -> InjectorBindings:
9
12
  return inj.as_bindings(
10
13
  inj.bind(cls, singleton=True),
@@ -4,5 +4,8 @@ verify - nginx -t
4
4
  """
5
5
 
6
6
 
7
+ ##
8
+
9
+
7
10
  class DeployNginxManager:
8
11
  pass
@@ -10,6 +10,9 @@ from .owners import DeployPathOwner
10
10
  from .owners import DeployPathOwners
11
11
 
12
12
 
13
+ ##
14
+
15
+
13
16
  def bind_deploy_paths() -> InjectorBindings:
14
17
  lst: ta.List[InjectorBindingOrBindings] = [
15
18
  inj.bind_array(DeployPathOwner),
@@ -9,6 +9,9 @@ from .paths import DeployPath
9
9
  from .paths import DeployPathError
10
10
 
11
11
 
12
+ ##
13
+
14
+
12
15
  class DeployPathsManager:
13
16
  def __init__(
14
17
  self,
@@ -9,6 +9,9 @@ from ..types import DeployHome
9
9
  from .paths import DeployPath
10
10
 
11
11
 
12
+ ##
13
+
14
+
12
15
  class DeployPathOwner(abc.ABC):
13
16
  @abc.abstractmethod
14
17
  def get_owned_deploy_paths(self) -> ta.AbstractSet[DeployPath]:
@@ -2,6 +2,9 @@
2
2
  from omlish.lite.check import check
3
3
 
4
4
 
5
+ ##
6
+
7
+
5
8
  def check_valid_deploy_spec_path(s: str) -> str:
6
9
  check.non_empty_str(s)
7
10
  for c in ['..', '//']:
@@ -22,6 +22,9 @@ from .tmp import DeployHomeAtomics
22
22
  from .types import DeployHome
23
23
 
24
24
 
25
+ ##
26
+
27
+
25
28
  class DeploySystemdManager:
26
29
  def __init__(
27
30
  self,
@@ -8,6 +8,9 @@ from .paths.owners import SingleDirDeployPathOwner
8
8
  from .types import DeployHome
9
9
 
10
10
 
11
+ ##
12
+
13
+
11
14
  class DeployHomeAtomics(Func1[DeployHome, AtomicPathSwapping]):
12
15
  pass
13
16
 
@@ -15,6 +15,9 @@ from omlish.lite.check import check
15
15
  from .specs import DeployVenvSpec
16
16
 
17
17
 
18
+ ##
19
+
20
+
18
21
  class DeployVenvManager:
19
22
  async def setup_venv(
20
23
  self,
@@ -5,6 +5,9 @@ import typing as ta
5
5
  from omlish.lite.pycharm import PycharmRemoteDebug
6
6
 
7
7
 
8
+ ##
9
+
10
+
8
11
  @dc.dataclass(frozen=True)
9
12
  class RemoteConfig:
10
13
  payload_file: ta.Optional[str] = None
@@ -1,4 +1,4 @@
1
- # ruff: noqa: UP006 UP007 UP045
1
+ # ruff: noqa: UP006 UP007 UP043 UP045
2
2
  import asyncio
3
3
  import contextlib
4
4
  import typing as ta
@@ -9,6 +9,9 @@ from omlish.lite.cached import cached_nullary
9
9
  RemoteExecutionPayloadFile = ta.NewType('RemoteExecutionPayloadFile', str)
10
10
 
11
11
 
12
+ ##
13
+
14
+
12
15
  @cached_nullary
13
16
  def _get_self_src() -> str:
14
17
  return inspect.getsource(sys.modules[__name__])
@@ -1,4 +1,4 @@
1
- # ruff: noqa: UP006 UP007 UP045
1
+ # ruff: noqa: UP006 UP007 UP043 UP045
2
2
  import abc
3
3
  import asyncio
4
4
  import contextlib
@@ -5,6 +5,9 @@ import typing as ta
5
5
  from .platforms import Platform
6
6
 
7
7
 
8
+ ##
9
+
10
+
8
11
  @dc.dataclass(frozen=True)
9
12
  class SystemConfig:
10
13
  platform: ta.Optional[Platform] = None
@@ -20,6 +20,9 @@ from .platforms import Platform
20
20
  from .platforms import detect_system_platform
21
21
 
22
22
 
23
+ ##
24
+
25
+
23
26
  def bind_system(
24
27
  *,
25
28
  system_config: SystemConfig,
@@ -13,7 +13,10 @@ from omlish.asyncs.asyncio.subprocesses import asyncio_subprocesses
13
13
  from omlish.lite.check import check
14
14
 
15
15
 
16
- SystemPackageOrStr = ta.Union['SystemPackage', str]
16
+ SystemPackageOrStr = ta.Union['SystemPackage', str] # ta.TypeAlias
17
+
18
+
19
+ ##
17
20
 
18
21
 
19
22
  @dc.dataclass(frozen=True)
@@ -1,4 +1,4 @@
1
- # ruff: noqa: UP006 UP007 UP045
1
+ # ruff: noqa: UP006 UP007 UP043 UP045
2
2
  import abc
3
3
  import contextlib
4
4
  import dataclasses as dc
@@ -1,4 +1,4 @@
1
- # ruff: noqa: UP006 UP007 UP045
1
+ # ruff: noqa: UP006 UP007 UP043 UP045
2
2
  # @omlish-lite
3
3
  """
4
4
  Basically this: https://mitogen.networkgenomics.com/howitworks.html
@@ -438,15 +438,21 @@ class PyremoteBootstrapDriver:
438
438
  if isinstance(payload_src, str):
439
439
  parts = [payload_src]
440
440
  else:
441
- parts = list(payload_src)
441
+ parts = []
442
+ for i, p in enumerate(payload_src):
443
+ if i:
444
+ parts.append('\n\n')
445
+ parts.append(p)
442
446
 
443
447
  if (mn := options.main_name_override) is not None:
444
- parts.insert(0, f'__name__ = {mn!r}')
448
+ # Must go on same single line as first line of user payload to preserve '<stdin>' line numbers. If more
449
+ # things wind up having to be done here, it can still be crammed on one line into a single `exec()`.
450
+ parts.insert(0, f'__name__ = {mn!r}; ')
445
451
 
446
452
  if len(parts) == 1:
447
453
  return parts[0]
448
454
  else:
449
- return '\n\n'.join(parts)
455
+ return ''.join(parts)
450
456
 
451
457
  #
452
458
 
@@ -5,7 +5,7 @@
5
5
  # @omlish-generated
6
6
  # @omlish-amalg-output ../clouds/aws/journald2aws/main.py
7
7
  # @omlish-git-diff-omit
8
- # ruff: noqa: N802 UP006 UP007 UP036 UP045
8
+ # ruff: noqa: N802 UP006 UP007 UP036 UP043 UP045
9
9
  import abc
10
10
  import argparse
11
11
  import base64