ominfra 0.0.0.dev205__tar.gz → 0.0.0.dev206__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.dev205/ominfra.egg-info → ominfra-0.0.0.dev206}/PKG-INFO +4 -4
  2. ominfra-0.0.0.dev206/ominfra/clouds/aws/instancetypes/cache.json.gz +0 -0
  3. ominfra-0.0.0.dev206/ominfra/clouds/aws/instancetypes/cache.py +12 -0
  4. ominfra-0.0.0.dev206/ominfra/clouds/aws/instancetypes/cli.py +80 -0
  5. ominfra-0.0.0.dev206/ominfra/clouds/aws/models/base.py +161 -0
  6. ominfra-0.0.0.dev206/ominfra/clouds/aws/models/gen/__main__.py +4 -0
  7. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/models/gen/gen.py +7 -1
  8. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/models/services/ec2.py +570 -7
  9. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/models/services/lambda_.py +5 -0
  10. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/models/services/s3.py +139 -0
  11. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/models/services/services.toml +0 -1
  12. ominfra-0.0.0.dev206/ominfra/tools/__init__.py +0 -0
  13. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206/ominfra.egg-info}/PKG-INFO +4 -4
  14. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra.egg-info/SOURCES.txt +5 -0
  15. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra.egg-info/requires.txt +3 -3
  16. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/pyproject.toml +5 -4
  17. ominfra-0.0.0.dev205/ominfra/clouds/aws/models/base.py +0 -101
  18. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/LICENSE +0 -0
  19. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/MANIFEST.in +0 -0
  20. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/README.rst +0 -0
  21. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/.manifests.json +0 -0
  22. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/__about__.py +0 -0
  23. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/__init__.py +0 -0
  24. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/__init__.py +0 -0
  25. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/__init__.py +0 -0
  26. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/__main__.py +0 -0
  27. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/auth.py +0 -0
  28. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/cli.py +0 -0
  29. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/dataclasses.py +0 -0
  30. {ominfra-0.0.0.dev205/ominfra/clouds/aws/models → ominfra-0.0.0.dev206/ominfra/clouds/aws/instancetypes}/__init__.py +0 -0
  31. {ominfra-0.0.0.dev205/ominfra/clouds/aws/models/gen → ominfra-0.0.0.dev206/ominfra/clouds/aws/instancetypes}/__main__.py +0 -0
  32. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/journald2aws/__init__.py +0 -0
  33. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/journald2aws/__main__.py +0 -0
  34. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/journald2aws/cursor.py +0 -0
  35. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/journald2aws/driver.py +0 -0
  36. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/journald2aws/main.py +0 -0
  37. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/journald2aws/poster.py +0 -0
  38. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/logs.py +0 -0
  39. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/metadata.py +0 -0
  40. {ominfra-0.0.0.dev205/ominfra/clouds/aws/models/gen → ominfra-0.0.0.dev206/ominfra/clouds/aws/models}/__init__.py +0 -0
  41. {ominfra-0.0.0.dev205/ominfra/clouds/aws/models/services → ominfra-0.0.0.dev206/ominfra/clouds/aws/models/gen}/__init__.py +0 -0
  42. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/models/gen/cli.py +0 -0
  43. {ominfra-0.0.0.dev205/ominfra/clouds/gcp → ominfra-0.0.0.dev206/ominfra/clouds/aws/models/services}/__init__.py +0 -0
  44. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/aws/models/services/rds.py +0 -0
  45. {ominfra-0.0.0.dev205/ominfra/commands → ominfra-0.0.0.dev206/ominfra/clouds/gcp}/__init__.py +0 -0
  46. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/clouds/gcp/auth.py +0 -0
  47. {ominfra-0.0.0.dev205/ominfra/journald → ominfra-0.0.0.dev206/ominfra/commands}/__init__.py +0 -0
  48. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/commands/runners.py +0 -0
  49. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/commands/ssh.py +0 -0
  50. {ominfra-0.0.0.dev205/ominfra/manage/commands → ominfra-0.0.0.dev206/ominfra/journald}/__init__.py +0 -0
  51. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/journald/fields.py +0 -0
  52. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/journald/genmessages.py +0 -0
  53. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/journald/messages.py +0 -0
  54. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/journald/tailer.py +0 -0
  55. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/__init__.py +0 -0
  56. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/__main__.py +0 -0
  57. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/bootstrap.py +0 -0
  58. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/bootstrap_.py +0 -0
  59. {ominfra-0.0.0.dev205/ominfra/manage/deploy → ominfra-0.0.0.dev206/ominfra/manage/commands}/__init__.py +0 -0
  60. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/commands/base.py +0 -0
  61. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/commands/inject.py +0 -0
  62. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/commands/injection.py +0 -0
  63. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/commands/local.py +0 -0
  64. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/commands/marshal.py +0 -0
  65. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/commands/ping.py +0 -0
  66. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/commands/subprocess.py +0 -0
  67. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/commands/types.py +0 -0
  68. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/config.py +0 -0
  69. {ominfra-0.0.0.dev205/ominfra/manage/deploy/conf → ominfra-0.0.0.dev206/ominfra/manage/deploy}/__init__.py +0 -0
  70. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/apps.py +0 -0
  71. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/commands.py +0 -0
  72. {ominfra-0.0.0.dev205/ominfra/manage/deploy/paths → ominfra-0.0.0.dev206/ominfra/manage/deploy/conf}/__init__.py +0 -0
  73. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/conf/inject.py +0 -0
  74. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/conf/manager.py +0 -0
  75. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/conf/specs.py +0 -0
  76. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/config.py +0 -0
  77. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/deploy.py +0 -0
  78. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/git.py +0 -0
  79. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/inject.py +0 -0
  80. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/injection.py +0 -0
  81. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/interp.py +0 -0
  82. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/nginx.py +0 -0
  83. {ominfra-0.0.0.dev205/ominfra/manage/remote → ominfra-0.0.0.dev206/ominfra/manage/deploy/paths}/__init__.py +0 -0
  84. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/paths/inject.py +0 -0
  85. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/paths/manager.py +0 -0
  86. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/paths/owners.py +0 -0
  87. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/paths/paths.py +0 -0
  88. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/paths/specs.py +0 -0
  89. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/paths/types.py +0 -0
  90. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/specs.py +0 -0
  91. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/systemd.py +0 -0
  92. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/tags.py +0 -0
  93. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/tmp.py +0 -0
  94. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/types.py +0 -0
  95. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/deploy/venvs.py +0 -0
  96. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/inject.py +0 -0
  97. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/main.py +0 -0
  98. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/marshal.py +0 -0
  99. {ominfra-0.0.0.dev205/ominfra/manage/system → ominfra-0.0.0.dev206/ominfra/manage/remote}/__init__.py +0 -0
  100. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/remote/_main.py +0 -0
  101. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/remote/channel.py +0 -0
  102. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/remote/config.py +0 -0
  103. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/remote/connection.py +0 -0
  104. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/remote/execution.py +0 -0
  105. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/remote/inject.py +0 -0
  106. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/remote/payload.py +0 -0
  107. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/remote/spawning.py +0 -0
  108. {ominfra-0.0.0.dev205/ominfra/manage/targets → ominfra-0.0.0.dev206/ominfra/manage/system}/__init__.py +0 -0
  109. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/system/commands.py +0 -0
  110. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/system/config.py +0 -0
  111. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/system/inject.py +0 -0
  112. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/system/packages.py +0 -0
  113. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/system/platforms.py +0 -0
  114. {ominfra-0.0.0.dev205/ominfra/scripts → ominfra-0.0.0.dev206/ominfra/manage/targets}/__init__.py +0 -0
  115. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/targets/bestpython.py +0 -0
  116. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/targets/bestpython.sh +0 -0
  117. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/targets/connection.py +0 -0
  118. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/targets/inject.py +0 -0
  119. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/manage/targets/targets.py +0 -0
  120. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/pyremote.py +0 -0
  121. {ominfra-0.0.0.dev205/ominfra/supervisor/utils → ominfra-0.0.0.dev206/ominfra/scripts}/__init__.py +0 -0
  122. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/scripts/journald2aws.py +0 -0
  123. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/scripts/manage.py +0 -0
  124. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/scripts/supervisor.py +0 -0
  125. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/LICENSE.txt +0 -0
  126. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/__init__.py +0 -0
  127. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/__main__.py +0 -0
  128. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/configs.py +0 -0
  129. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/dispatchers.py +0 -0
  130. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/dispatchersimpl.py +0 -0
  131. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/events.py +0 -0
  132. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/exceptions.py +0 -0
  133. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/groups.py +0 -0
  134. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/groupsimpl.py +0 -0
  135. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/http.py +0 -0
  136. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/inject.py +0 -0
  137. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/io.py +0 -0
  138. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/main.py +0 -0
  139. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/pipes.py +0 -0
  140. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/privileges.py +0 -0
  141. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/process.py +0 -0
  142. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/processimpl.py +0 -0
  143. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/setup.py +0 -0
  144. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/setupimpl.py +0 -0
  145. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/signals.py +0 -0
  146. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/spawning.py +0 -0
  147. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/spawningimpl.py +0 -0
  148. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/states.py +0 -0
  149. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/supervisor.py +0 -0
  150. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/types.py +0 -0
  151. {ominfra-0.0.0.dev205/ominfra/tailscale → ominfra-0.0.0.dev206/ominfra/supervisor/utils}/__init__.py +0 -0
  152. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/utils/collections.py +0 -0
  153. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/utils/diag.py +0 -0
  154. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/utils/fds.py +0 -0
  155. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/utils/fs.py +0 -0
  156. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/utils/os.py +0 -0
  157. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/utils/ostypes.py +0 -0
  158. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/utils/signals.py +0 -0
  159. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/utils/strings.py +0 -0
  160. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/supervisor/utils/users.py +0 -0
  161. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/systemd.py +0 -0
  162. {ominfra-0.0.0.dev205/ominfra/tools → ominfra-0.0.0.dev206/ominfra/tailscale}/__init__.py +0 -0
  163. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/tailscale/api.py +0 -0
  164. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/tailscale/cli.py +0 -0
  165. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/threadworkers.py +0 -0
  166. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra/tools/listresources.py +0 -0
  167. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra.egg-info/dependency_links.txt +0 -0
  168. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra.egg-info/entry_points.txt +0 -0
  169. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/ominfra.egg-info/top_level.txt +0 -0
  170. {ominfra-0.0.0.dev205 → ominfra-0.0.0.dev206}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: ominfra
3
- Version: 0.0.0.dev205
3
+ Version: 0.0.0.dev206
4
4
  Summary: ominfra
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,9 +12,9 @@ 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: omdev==0.0.0.dev205
16
- Requires-Dist: omlish==0.0.0.dev205
17
- Requires-Dist: omserv==0.0.0.dev205
15
+ Requires-Dist: omdev==0.0.0.dev206
16
+ Requires-Dist: omlish==0.0.0.dev206
17
+ Requires-Dist: omserv==0.0.0.dev206
18
18
  Provides-Extra: all
19
19
  Requires-Dist: paramiko~=3.5; extra == "all"
20
20
  Requires-Dist: asyncssh~=2.18; extra == "all"
@@ -0,0 +1,12 @@
1
+ import gzip
2
+ import typing as ta
3
+
4
+ from omlish import lang
5
+ from omlish.formats import json
6
+
7
+
8
+ @lang.cached_function()
9
+ def load_instance_types() -> ta.Mapping[str, ta.Mapping[str, ta.Any]]:
10
+ raw = lang.get_relative_resources(globals=globals())['cache.json.gz'].read_bytes()
11
+ data = gzip.decompress(raw)
12
+ return json.loads(data)
@@ -0,0 +1,80 @@
1
+ import datetime
2
+ import gzip
3
+ import os.path
4
+ import typing as ta
5
+
6
+ from omdev.secrets import load_secrets
7
+ from omlish import lang
8
+ from omlish import secrets as sec
9
+ from omlish.argparse import all as ap
10
+ from omlish.formats import json
11
+
12
+ from .cache import load_instance_types
13
+
14
+
15
+ if ta.TYPE_CHECKING:
16
+ import boto3
17
+ else:
18
+ boto3 = lang.proxy_import('boto3')
19
+
20
+
21
+ # Use a hardcoded gz mtime to prevent the gz file from changing when the contents don't. We still have the git metadata
22
+ # to track modifications.
23
+ FIXED_CACHE_TIMESTAMP = datetime.datetime(2025, 1, 1, tzinfo=datetime.UTC).timestamp()
24
+
25
+
26
+ @lang.cached_function
27
+ def _get_secrets() -> sec.Secrets:
28
+ return load_secrets()
29
+
30
+
31
+ def get_ec2_instance_types(session: boto3.Session) -> dict[str, dict[str, ta.Any]]:
32
+ ec2 = session.client('ec2')
33
+ next_token = None
34
+ dct = {}
35
+ while True:
36
+ resp = ec2.describe_instance_types(**(dict(NextToken=next_token) if next_token else {}))
37
+ for instance_type in resp['InstanceTypes']:
38
+ name = instance_type['InstanceType']
39
+ dct[name] = instance_type
40
+ next_token = resp.get('NextToken')
41
+ if not next_token:
42
+ break
43
+ dct = dict(sorted(dct.items(), key=lambda t: t[0]))
44
+ return dct
45
+
46
+
47
+ class Cli(ap.Cli):
48
+ @ap.cmd()
49
+ def fetch(self) -> None:
50
+ cfg = _get_secrets()
51
+
52
+ session = boto3.Session(
53
+ aws_access_key_id=cfg.get('aws_access_key_id').reveal(),
54
+ aws_secret_access_key=cfg.get('aws_secret_access_key').reveal(),
55
+ region_name=cfg.get('aws_region').reveal(),
56
+ )
57
+
58
+ instance_types = get_ec2_instance_types(session)
59
+
60
+ cache_file = os.path.join(os.path.dirname(__file__), 'cache.json.gz')
61
+ with open(cache_file, 'wb') as f:
62
+ with gzip.GzipFile(
63
+ fileobj=f,
64
+ mode='w',
65
+ mtime=FIXED_CACHE_TIMESTAMP,
66
+ ) as gf:
67
+ gf.write(json.dumps_compact(instance_types).encode('utf-8'))
68
+
69
+ @ap.cmd()
70
+ def dump(self) -> None:
71
+ dct = load_instance_types()
72
+ print(json.dumps_pretty(dct))
73
+
74
+
75
+ def _main() -> None:
76
+ Cli()()
77
+
78
+
79
+ if __name__ == '__main__':
80
+ _main()
@@ -0,0 +1,161 @@
1
+ import typing as ta
2
+
3
+ from omlish import cached
4
+ from omlish import check
5
+ from omlish import collections as col
6
+ from omlish import dataclasses as dc
7
+ from omlish import lang
8
+
9
+
10
+ DateTime = ta.NewType('DateTime', str)
11
+ MillisecondDateTime = ta.NewType('MillisecondDateTime', str)
12
+
13
+ Timestamp = ta.NewType('Timestamp', str)
14
+
15
+
16
+ ##
17
+
18
+
19
+ class TagList:
20
+ pass
21
+
22
+
23
+ ##
24
+
25
+
26
+ class SHAPE_NAME(lang.Marker): # noqa
27
+ pass
28
+
29
+
30
+ def common_metadata(
31
+ *,
32
+ shape_name: str | None = None,
33
+ ) -> dict[ta.Any, ta.Any]:
34
+ md = {}
35
+
36
+ if shape_name is not None:
37
+ md[SHAPE_NAME] = shape_name
38
+
39
+ return md
40
+
41
+
42
+ ##
43
+
44
+
45
+ def shape_metadata(
46
+ **kwargs: ta.Any,
47
+ ) -> dict[ta.Any, ta.Any]:
48
+ md = {**common_metadata(**kwargs)}
49
+
50
+ return md
51
+
52
+
53
+ class ShapeInfo:
54
+ def __init__(
55
+ self,
56
+ cls: type['Shape'],
57
+ metadata: ta.Mapping[ta.Any, ta.Any],
58
+ ) -> None:
59
+ super().__init__()
60
+
61
+ self._cls = check.issubclass(cls, Shape)
62
+ self._metadata = metadata
63
+
64
+ @property
65
+ def cls(self) -> type['Shape']:
66
+ return self._cls
67
+
68
+ @property
69
+ def metadata(self) -> ta.Mapping[ta.Any, ta.Any]:
70
+ return self._metadata
71
+
72
+ #
73
+
74
+ @cached.function
75
+ def fields(self) -> ta.Sequence[dc.Field]:
76
+ check.state(dc.is_immediate_dataclass(self._cls))
77
+ fls = dc.fields(self._cls)
78
+ return fls # noqa
79
+
80
+ @cached.function
81
+ def fields_by_name(self) -> ta.Mapping[str, dc.Field]:
82
+ return col.make_map_by(lambda fl: fl.name, self.fields(), strict=True)
83
+
84
+ @cached.function
85
+ def fields_by_member_name(self) -> ta.Mapping[str, dc.Field]:
86
+ return col.make_map(
87
+ [(n, f) for f in self.fields() if (n := f.metadata.get(MEMBER_NAME)) is not None],
88
+ strict=True,
89
+ )
90
+
91
+ @cached.function
92
+ def fields_by_serialization_name(self) -> ta.Mapping[str, dc.Field]:
93
+ l = []
94
+ for f in self.fields():
95
+ if sn := f.metadata.get(SERIALIZATION_NAME):
96
+ l.append((sn, f))
97
+ elif mn := f.metadata.get(MEMBER_NAME):
98
+ l.append((mn, f))
99
+ return col.make_map(l, strict=True)
100
+
101
+
102
+ @dc.dataclass(frozen=True)
103
+ class Shape:
104
+ __shape__: ShapeInfo
105
+
106
+ def __init_subclass__(
107
+ cls,
108
+ *,
109
+ shape_name: str | None = None,
110
+ **kwargs: ta.Any,
111
+ ) -> None:
112
+ super().__init_subclass__(**kwargs)
113
+
114
+ check.state(not hasattr(cls, '__shape__'))
115
+
116
+ info = ShapeInfo(
117
+ cls,
118
+ shape_metadata(**kwargs),
119
+ )
120
+
121
+ cls.__shape__ = info
122
+
123
+
124
+ ##
125
+
126
+
127
+ class MEMBER_NAME(lang.Marker): # noqa
128
+ pass
129
+
130
+
131
+ class SERIALIZATION_NAME(lang.Marker): # noqa
132
+ pass
133
+
134
+
135
+ def field_metadata(
136
+ *,
137
+ member_name: str | None = None,
138
+ serialization_name: str | None = None,
139
+ **kwargs: ta.Any,
140
+ ) -> dict[ta.Any, ta.Any]:
141
+ md = {**common_metadata(**kwargs)}
142
+
143
+ if member_name is not None:
144
+ md[MEMBER_NAME] = member_name
145
+ if serialization_name is not None:
146
+ md[SERIALIZATION_NAME] = serialization_name
147
+
148
+ return md
149
+
150
+
151
+ ##
152
+
153
+
154
+ @dc.dataclass(frozen=True, eq=False, kw_only=True)
155
+ class Operation:
156
+ name: str
157
+
158
+ input: type[Shape] | None = None
159
+ output: type[Shape] | None = None
160
+
161
+ errors: ta.Sequence[type[Shape]] | None = None
@@ -0,0 +1,4 @@
1
+ if __name__ == '__main__':
2
+ from .cli import _main # noqa
3
+
4
+ _main()
@@ -317,8 +317,10 @@ class ModelGen:
317
317
  fn = self.demangle_name(mn)
318
318
  mds = [
319
319
  f'member_name={mn!r}',
320
- f'shape_name={ms.name!r}',
321
320
  ]
321
+ if msn := ms.serialization.get('name'):
322
+ mds.append(f'serialization_name={msn!r}')
323
+ mds.append(f'shape_name={ms.name!r}')
322
324
  ma = self.get_type_ann(
323
325
  ms.name,
324
326
  unquoted_names=unquoted_names,
@@ -508,3 +510,7 @@ class ModelGen:
508
510
  self.gen_all_operations(out)
509
511
 
510
512
  return out.getvalue()
513
+
514
+
515
+ if __name__ == '__main__':
516
+ raise RuntimeError('Use cli')