ominfra 0.0.0.dev199__tar.gz → 0.0.0.dev201__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (164) hide show
  1. {ominfra-0.0.0.dev199/ominfra.egg-info → ominfra-0.0.0.dev201}/PKG-INFO +5 -5
  2. ominfra-0.0.0.dev201/ominfra/clouds/aws/models/base.py +101 -0
  3. ominfra-0.0.0.dev201/ominfra/clouds/aws/models/gen/__main__.py +4 -0
  4. ominfra-0.0.0.dev201/ominfra/clouds/aws/models/gen/cli.py +139 -0
  5. ominfra-0.0.0.dev201/ominfra/clouds/aws/models/gen/gen.py +497 -0
  6. ominfra-0.0.0.dev201/ominfra/clouds/aws/models/services/ec2.py +5093 -0
  7. ominfra-0.0.0.dev201/ominfra/clouds/aws/models/services/lambda_.py +864 -0
  8. ominfra-0.0.0.dev201/ominfra/clouds/aws/models/services/rds.py +1898 -0
  9. ominfra-0.0.0.dev201/ominfra/clouds/aws/models/services/s3.py +1387 -0
  10. ominfra-0.0.0.dev201/ominfra/clouds/aws/models/services/services.toml +41 -0
  11. {ominfra-0.0.0.dev199/ominfra → ominfra-0.0.0.dev201/ominfra/commands}/ssh.py +2 -2
  12. ominfra-0.0.0.dev201/ominfra/scripts/__init__.py +0 -0
  13. ominfra-0.0.0.dev201/ominfra/supervisor/utils/__init__.py +0 -0
  14. ominfra-0.0.0.dev201/ominfra/tailscale/__init__.py +0 -0
  15. ominfra-0.0.0.dev201/ominfra/tools/__init__.py +0 -0
  16. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201/ominfra.egg-info}/PKG-INFO +5 -5
  17. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra.egg-info/SOURCES.txt +15 -2
  18. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra.egg-info/requires.txt +3 -3
  19. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/pyproject.toml +5 -4
  20. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/LICENSE +0 -0
  21. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/MANIFEST.in +0 -0
  22. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/README.rst +0 -0
  23. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/.manifests.json +0 -0
  24. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/__about__.py +0 -0
  25. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/__init__.py +0 -0
  26. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/clouds/__init__.py +0 -0
  27. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/clouds/aws/__init__.py +0 -0
  28. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/clouds/aws/__main__.py +0 -0
  29. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/clouds/aws/auth.py +0 -0
  30. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/clouds/aws/cli.py +0 -0
  31. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/clouds/aws/dataclasses.py +0 -0
  32. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/clouds/aws/journald2aws/__init__.py +0 -0
  33. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/clouds/aws/journald2aws/__main__.py +0 -0
  34. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/clouds/aws/journald2aws/cursor.py +0 -0
  35. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/clouds/aws/journald2aws/driver.py +0 -0
  36. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/clouds/aws/journald2aws/main.py +0 -0
  37. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/clouds/aws/journald2aws/poster.py +0 -0
  38. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/clouds/aws/logs.py +0 -0
  39. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/clouds/aws/metadata.py +0 -0
  40. {ominfra-0.0.0.dev199/ominfra/clouds/gcp → ominfra-0.0.0.dev201/ominfra/clouds/aws/models}/__init__.py +0 -0
  41. {ominfra-0.0.0.dev199/ominfra/journald → ominfra-0.0.0.dev201/ominfra/clouds/aws/models/gen}/__init__.py +0 -0
  42. {ominfra-0.0.0.dev199/ominfra/manage/commands → ominfra-0.0.0.dev201/ominfra/clouds/aws/models/services}/__init__.py +0 -0
  43. {ominfra-0.0.0.dev199/ominfra/manage/deploy → ominfra-0.0.0.dev201/ominfra/clouds/gcp}/__init__.py +0 -0
  44. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/clouds/gcp/auth.py +0 -0
  45. {ominfra-0.0.0.dev199/ominfra/manage/deploy/conf → ominfra-0.0.0.dev201/ominfra/commands}/__init__.py +0 -0
  46. /ominfra-0.0.0.dev199/ominfra/cmds.py → /ominfra-0.0.0.dev201/ominfra/commands/runners.py +0 -0
  47. {ominfra-0.0.0.dev199/ominfra/manage/deploy/paths → ominfra-0.0.0.dev201/ominfra/journald}/__init__.py +0 -0
  48. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/journald/fields.py +0 -0
  49. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/journald/genmessages.py +0 -0
  50. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/journald/messages.py +0 -0
  51. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/journald/tailer.py +0 -0
  52. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/__init__.py +0 -0
  53. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/__main__.py +0 -0
  54. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/bootstrap.py +0 -0
  55. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/bootstrap_.py +0 -0
  56. {ominfra-0.0.0.dev199/ominfra/manage/remote → ominfra-0.0.0.dev201/ominfra/manage/commands}/__init__.py +0 -0
  57. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/commands/base.py +0 -0
  58. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/commands/inject.py +0 -0
  59. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/commands/injection.py +0 -0
  60. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/commands/local.py +0 -0
  61. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/commands/marshal.py +0 -0
  62. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/commands/ping.py +0 -0
  63. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/commands/subprocess.py +0 -0
  64. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/commands/types.py +0 -0
  65. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/config.py +0 -0
  66. {ominfra-0.0.0.dev199/ominfra/manage/system → ominfra-0.0.0.dev201/ominfra/manage/deploy}/__init__.py +0 -0
  67. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/apps.py +0 -0
  68. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/commands.py +0 -0
  69. {ominfra-0.0.0.dev199/ominfra/manage/targets → ominfra-0.0.0.dev201/ominfra/manage/deploy/conf}/__init__.py +0 -0
  70. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/conf/inject.py +0 -0
  71. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/conf/manager.py +0 -0
  72. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/conf/specs.py +0 -0
  73. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/config.py +0 -0
  74. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/deploy.py +0 -0
  75. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/git.py +0 -0
  76. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/inject.py +0 -0
  77. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/injection.py +0 -0
  78. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/interp.py +0 -0
  79. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/nginx.py +0 -0
  80. {ominfra-0.0.0.dev199/ominfra/scripts → ominfra-0.0.0.dev201/ominfra/manage/deploy/paths}/__init__.py +0 -0
  81. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/paths/inject.py +0 -0
  82. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/paths/manager.py +0 -0
  83. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/paths/owners.py +0 -0
  84. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/paths/paths.py +0 -0
  85. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/paths/specs.py +0 -0
  86. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/paths/types.py +0 -0
  87. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/specs.py +0 -0
  88. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/systemd.py +0 -0
  89. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/tags.py +0 -0
  90. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/tmp.py +0 -0
  91. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/types.py +0 -0
  92. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/deploy/venvs.py +0 -0
  93. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/inject.py +0 -0
  94. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/main.py +0 -0
  95. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/marshal.py +0 -0
  96. {ominfra-0.0.0.dev199/ominfra/supervisor/utils → ominfra-0.0.0.dev201/ominfra/manage/remote}/__init__.py +0 -0
  97. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/remote/_main.py +0 -0
  98. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/remote/channel.py +0 -0
  99. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/remote/config.py +0 -0
  100. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/remote/connection.py +0 -0
  101. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/remote/execution.py +0 -0
  102. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/remote/inject.py +0 -0
  103. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/remote/payload.py +0 -0
  104. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/remote/spawning.py +0 -0
  105. {ominfra-0.0.0.dev199/ominfra/tailscale → ominfra-0.0.0.dev201/ominfra/manage/system}/__init__.py +0 -0
  106. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/system/commands.py +0 -0
  107. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/system/config.py +0 -0
  108. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/system/inject.py +0 -0
  109. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/system/packages.py +0 -0
  110. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/system/platforms.py +0 -0
  111. {ominfra-0.0.0.dev199/ominfra/tools → ominfra-0.0.0.dev201/ominfra/manage/targets}/__init__.py +0 -0
  112. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/targets/bestpython.py +0 -0
  113. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/targets/bestpython.sh +0 -0
  114. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/targets/connection.py +0 -0
  115. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/targets/inject.py +0 -0
  116. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/manage/targets/targets.py +0 -0
  117. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/pyremote.py +0 -0
  118. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/scripts/journald2aws.py +0 -0
  119. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/scripts/manage.py +0 -0
  120. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/scripts/supervisor.py +0 -0
  121. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/LICENSE.txt +0 -0
  122. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/__init__.py +0 -0
  123. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/__main__.py +0 -0
  124. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/configs.py +0 -0
  125. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/dispatchers.py +0 -0
  126. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/dispatchersimpl.py +0 -0
  127. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/events.py +0 -0
  128. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/exceptions.py +0 -0
  129. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/groups.py +0 -0
  130. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/groupsimpl.py +0 -0
  131. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/http.py +0 -0
  132. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/inject.py +0 -0
  133. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/io.py +0 -0
  134. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/main.py +0 -0
  135. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/pipes.py +0 -0
  136. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/privileges.py +0 -0
  137. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/process.py +0 -0
  138. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/processimpl.py +0 -0
  139. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/setup.py +0 -0
  140. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/setupimpl.py +0 -0
  141. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/signals.py +0 -0
  142. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/spawning.py +0 -0
  143. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/spawningimpl.py +0 -0
  144. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/states.py +0 -0
  145. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/supervisor.py +0 -0
  146. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/types.py +0 -0
  147. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/utils/collections.py +0 -0
  148. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/utils/diag.py +0 -0
  149. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/utils/fds.py +0 -0
  150. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/utils/fs.py +0 -0
  151. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/utils/os.py +0 -0
  152. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/utils/ostypes.py +0 -0
  153. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/utils/signals.py +0 -0
  154. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/utils/strings.py +0 -0
  155. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/supervisor/utils/users.py +0 -0
  156. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/systemd.py +0 -0
  157. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/tailscale/api.py +0 -0
  158. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/tailscale/cli.py +0 -0
  159. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/threadworkers.py +0 -0
  160. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra/tools/listresources.py +0 -0
  161. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra.egg-info/dependency_links.txt +0 -0
  162. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra.egg-info/entry_points.txt +0 -0
  163. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/ominfra.egg-info/top_level.txt +0 -0
  164. {ominfra-0.0.0.dev199 → ominfra-0.0.0.dev201}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: ominfra
3
- Version: 0.0.0.dev199
3
+ Version: 0.0.0.dev201
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.dev199
16
- Requires-Dist: omlish==0.0.0.dev199
17
- Requires-Dist: omserv==0.0.0.dev199
15
+ Requires-Dist: omdev==0.0.0.dev201
16
+ Requires-Dist: omlish==0.0.0.dev201
17
+ Requires-Dist: omserv==0.0.0.dev201
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,101 @@
1
+ import dataclasses as dc
2
+ import typing as ta
3
+
4
+ from omlish import check
5
+ from omlish import lang
6
+
7
+
8
+ DateTime = ta.NewType('DateTime', str)
9
+ MillisecondDateTime = ta.NewType('MillisecondDateTime', str)
10
+
11
+ Timestamp = ta.NewType('Timestamp', str)
12
+
13
+
14
+ ##
15
+
16
+
17
+ class TagList:
18
+ pass
19
+
20
+
21
+ ##
22
+
23
+
24
+ class MEMBER_NAME(lang.Marker): # noqa
25
+ pass
26
+
27
+
28
+ class SHAPE_NAME(lang.Marker): # noqa
29
+ pass
30
+
31
+
32
+ ##
33
+
34
+
35
+ def common_metadata(
36
+ *,
37
+ shape_name: str | None = None,
38
+ ) -> dict[ta.Any, ta.Any]:
39
+ md = {}
40
+
41
+ if shape_name is not None:
42
+ md[SHAPE_NAME] = shape_name
43
+
44
+ return md
45
+
46
+
47
+ ##
48
+
49
+
50
+ def shape_metadata(
51
+ **kwargs: ta.Any,
52
+ ) -> dict[ta.Any, ta.Any]:
53
+ md = {**common_metadata(**kwargs)}
54
+
55
+ return md
56
+
57
+
58
+ @dc.dataclass(frozen=True)
59
+ class Shape:
60
+ __shape_metadata__: ta.ClassVar[ta.Mapping[ta.Any, ta.Any]]
61
+
62
+ def __init_subclass__(
63
+ cls,
64
+ *,
65
+ shape_name: str | None = None,
66
+ **kwargs: ta.Any,
67
+ ) -> None:
68
+ super().__init_subclass__(**kwargs)
69
+
70
+ check.state(not hasattr(cls, '__shape_metadata__'))
71
+
72
+ cls.__shape_metadata__ = shape_metadata(**kwargs)
73
+
74
+
75
+ ##
76
+
77
+
78
+ def field_metadata(
79
+ *,
80
+ member_name: str | None = None,
81
+ **kwargs: ta.Any,
82
+ ) -> dict[ta.Any, ta.Any]:
83
+ md = {**common_metadata(**kwargs)}
84
+
85
+ if member_name is not None:
86
+ md[MEMBER_NAME] = member_name
87
+
88
+ return md
89
+
90
+
91
+ ##
92
+
93
+
94
+ @dc.dataclass(frozen=True, eq=False, kw_only=True)
95
+ class Operation:
96
+ name: str
97
+
98
+ input: type[Shape] | None = None
99
+ output: type[Shape] | None = None
100
+
101
+ errors: ta.Sequence[type[Shape]] | None = None
@@ -0,0 +1,4 @@
1
+ if __name__ == '__main__':
2
+ from .cli import _main # noqa
3
+
4
+ _main()
@@ -0,0 +1,139 @@
1
+ import dataclasses as dc
2
+ import keyword
3
+ import os.path
4
+ import sys
5
+ import typing as ta
6
+
7
+ from omlish import lang
8
+ from omlish import marshal as msh
9
+ from omlish.argparse import all as ap
10
+ from omlish.configs import all as configs
11
+
12
+ from .gen import ModelGen
13
+
14
+
15
+ ##
16
+
17
+
18
+ class Cli(ap.Cli):
19
+ def _arg_list(self, s: ta.Iterable[str] | None) -> list[str]:
20
+ return list(lang.flatten(e.split(',') for e in s or []))
21
+
22
+ #
23
+
24
+ def _gen_module(
25
+ self,
26
+ service_name: str,
27
+ *,
28
+ shape_names: ta.Iterable[str] | None = None,
29
+ operation_names: ta.Iterable[str] | None = None,
30
+ ) -> str:
31
+ service_model = ModelGen.load_service_model(service_name)
32
+
33
+ bmg = ModelGen(
34
+ service_model,
35
+ shape_names=ModelGen.get_referenced_shape_names(
36
+ service_model,
37
+ shape_names=shape_names or (),
38
+ operation_names=operation_names or (),
39
+ ),
40
+ operation_names=operation_names or (),
41
+ )
42
+
43
+ return bmg.gen_module()
44
+
45
+ @ap.cmd(
46
+ ap.arg('service'),
47
+ ap.arg('-s', '--shape', action='append'),
48
+ ap.arg('-o', '--operation', action='append'),
49
+ )
50
+ def gen_module(self) -> None:
51
+ mod = self._gen_module(
52
+ self.args.service,
53
+ shape_names=self._arg_list(self.args.shape),
54
+ operation_names=self._arg_list(self.args.operation),
55
+ )
56
+
57
+ sys.stdout.write(mod)
58
+
59
+ #
60
+
61
+ @dc.dataclass(frozen=True)
62
+ class ServicesConfig:
63
+ @dc.dataclass(frozen=True)
64
+ class Service:
65
+ name: str
66
+ shapes: ta.Sequence[str] | None = None
67
+ operations: ta.Sequence[str] | None = None
68
+
69
+ services: ta.Sequence[Service] | None = None
70
+
71
+ def _gen_service(
72
+ self,
73
+ svc: ServicesConfig.Service,
74
+ output_dir: str,
75
+ ) -> None:
76
+ mod = self._gen_module(
77
+ svc.name,
78
+ shape_names=svc.shapes,
79
+ operation_names=svc.operations,
80
+ )
81
+
82
+ fn = svc.name
83
+ if fn in keyword.kwlist:
84
+ fn += '_'
85
+ output_file = os.path.join(output_dir, f'{fn}.py')
86
+ with open(output_file, 'w') as f:
87
+ f.write(mod)
88
+
89
+ @ap.cmd(
90
+ ap.arg('config-file', nargs='?'),
91
+ )
92
+ def gen_services(self) -> None:
93
+ config_file = self.args.config_file
94
+ if config_file is None:
95
+ config_file = os.path.abspath(os.path.join(os.path.dirname(__file__), '../services/services.toml'))
96
+
97
+ cfg_dct = dict(configs.DEFAULT_FILE_LOADER.load_file(config_file).as_map())
98
+ cfg_dct = configs.processing.matched_rewrite(
99
+ configs.processing.build_named_children,
100
+ cfg_dct,
101
+ ('services',),
102
+ )
103
+ cfg: Cli.ServicesConfig = msh.unmarshal(cfg_dct, Cli.ServicesConfig)
104
+
105
+ output_dir = os.path.dirname(os.path.abspath(config_file))
106
+
107
+ for svc in cfg.services or []:
108
+ self._gen_service(svc, output_dir)
109
+
110
+ #
111
+
112
+ @ap.cmd()
113
+ def list_services(self) -> None:
114
+ for name in sorted(ModelGen.list_available_services()):
115
+ print(name)
116
+
117
+ @ap.cmd(
118
+ ap.arg('service'),
119
+ )
120
+ def list_shapes(self) -> None:
121
+ service_model = ModelGen.load_service_model(self.args.service)
122
+ for name in sorted(service_model.shape_names):
123
+ print(name)
124
+
125
+ @ap.cmd(
126
+ ap.arg('service'),
127
+ )
128
+ def list_operations(self) -> None:
129
+ service_model = ModelGen.load_service_model(self.args.service)
130
+ for name in sorted(service_model.operation_names):
131
+ print(name)
132
+
133
+
134
+ def _main() -> None:
135
+ Cli().cli_run_and_exit()
136
+
137
+
138
+ if __name__ == '__main__':
139
+ _main()