amsdal_cli 0.5.3__tar.gz → 0.5.5__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 (241) hide show
  1. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/PKG-INFO +1 -1
  2. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/change-logs.md +12 -0
  3. amsdal_cli-0.5.5/latest-changelogs.md +5 -0
  4. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/pyproject.toml +3 -3
  5. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/__about__.py +1 -1
  6. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/callbacks.py +2 -2
  7. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/dependency/sub_commands/dependency_list.py +1 -1
  8. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/dependency/sub_commands/dependency_new.py +1 -1
  9. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/deploy/sub_commands/deploy_list.py +1 -1
  10. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/sub_commands/generate_model.py +1 -1
  11. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/migrations/sub_commands/__init__.py +2 -0
  12. amsdal_cli-0.5.5/src/amsdal_cli/commands/migrations/sub_commands/make_contrib.py +179 -0
  13. amsdal_cli-0.5.5/src/amsdal_cli/commands/plugin/command.py +152 -0
  14. amsdal_cli-0.5.5/src/amsdal_cli/commands/plugin/templates/.amsdal-cli +10 -0
  15. amsdal_cli-0.5.5/src/amsdal_cli/commands/plugin/templates/README.md +50 -0
  16. amsdal_cli-0.5.5/src/amsdal_cli/commands/plugin/templates/config.yml +20 -0
  17. amsdal_cli-0.5.5/src/amsdal_cli/commands/plugin/templates/pyproject.toml +16 -0
  18. amsdal_cli-0.5.5/src/amsdal_cli/commands/plugin/templates/src/__about__.py +1 -0
  19. amsdal_cli-0.5.5/src/amsdal_cli/commands/plugin/templates/src/models/__init__.py +1 -0
  20. amsdal_cli-0.5.5/src/amsdal_cli/commands/plugin/templates/src/transactions/__init__.py +1 -0
  21. amsdal_cli-0.5.5/src/amsdal_cli/commands/plugin/templates/src/transactions/example_transaction.py +47 -0
  22. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/config/main.py +1 -0
  23. amsdal_cli-0.5.5/src/amsdal_cli/py.typed +0 -0
  24. amsdal_cli-0.5.5/src/amsdal_cli/utils/__init__.py +0 -0
  25. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/utils/cli_config.py +1 -0
  26. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/uv.lock +193 -193
  27. amsdal_cli-0.5.3/latest-changelogs.md +0 -5
  28. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/.editorconfig +0 -0
  29. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/.gitignore +0 -0
  30. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/.junie/guidelines.md +0 -0
  31. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/CONTRIBUTING.md +0 -0
  32. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/LICENSE.txt +0 -0
  33. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/README.md +0 -0
  34. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/license_check.py +0 -0
  35. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/release_notes/.gitkeep +0 -0
  36. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/scripts/release.sh +0 -0
  37. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/scripts/tag_check.sh +0 -0
  38. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/Third-Party Materials - AMSDAL Dependencies - License Notices.md +0 -0
  39. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/__init__.py +0 -0
  40. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/app.py +0 -0
  41. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/__init__.py +0 -0
  42. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/api_check/__init__.py +0 -0
  43. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/api_check/command.py +0 -0
  44. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/api_check/config.py +0 -0
  45. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/api_check/data_classes.py +0 -0
  46. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/api_check/operation_log.py +0 -0
  47. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/api_check/services/__init__.py +0 -0
  48. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/api_check/services/comparison.py +0 -0
  49. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/api_check/services/data_factory.py +0 -0
  50. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/api_check/services/loader.py +0 -0
  51. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/api_check/services/runner.py +0 -0
  52. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/api_check/services/storage.py +0 -0
  53. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/__init__.py +0 -0
  54. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/command.py +0 -0
  55. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/constants.py +0 -0
  56. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/__init__.py +0 -0
  57. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/data_models/__init__.py +0 -0
  58. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/data_models/custom_code.py +0 -0
  59. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/data_models/options.py +0 -0
  60. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/data_models/schemas_directory.py +0 -0
  61. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/extenders/__init__.py +0 -0
  62. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/extenders/custom_code_extender.py +0 -0
  63. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/extenders/options_extender.py +0 -0
  64. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/loaders/__init__.py +0 -0
  65. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/loaders/base.py +0 -0
  66. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/loaders/cli_custom_code_loader.py +0 -0
  67. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/loaders/cli_loader.py +0 -0
  68. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/loaders/cli_options_loader.py +0 -0
  69. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/loaders/cli_statics_loader.py +0 -0
  70. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/loaders/cli_transactions_loader.py +0 -0
  71. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/loaders/utils.py +0 -0
  72. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/mixins/__init__.py +0 -0
  73. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/mixins/enrich_schemas_mixin.py +0 -0
  74. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/schema_json_loader.py +0 -0
  75. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/utils/__init__.py +0 -0
  76. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/schemas/utils/merger.py +0 -0
  77. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/services/__init__.py +0 -0
  78. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/services/builder.py +0 -0
  79. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/services/mixin.py +0 -0
  80. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/utils/__init__.py +0 -0
  81. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/build/utils/build_config_file.py +0 -0
  82. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/ci_cd/__init__.py +0 -0
  83. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/ci_cd/command.py +0 -0
  84. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/ci_cd/constants.py +0 -0
  85. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/ci_cd/templates/github.yml +0 -0
  86. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/clean/__init__.py +0 -0
  87. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/clean/command.py +0 -0
  88. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/__init__.py +0 -0
  89. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/app.py +0 -0
  90. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/command.py +0 -0
  91. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/dependency/__init__.py +0 -0
  92. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/dependency/app.py +0 -0
  93. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/dependency/command.py +0 -0
  94. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/dependency/sub_commands/__init__.py +0 -0
  95. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/dependency/sub_commands/dependency_delete.py +0 -0
  96. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/deploy/__init__.py +0 -0
  97. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/deploy/app.py +0 -0
  98. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/deploy/command.py +0 -0
  99. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/deploy/sub_commands/__init__.py +0 -0
  100. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/deploy/sub_commands/deploy_delete.py +0 -0
  101. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/deploy/sub_commands/deploy_new.py +0 -0
  102. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/enums.py +0 -0
  103. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/environments/__init__.py +0 -0
  104. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/environments/app.py +0 -0
  105. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/environments/command.py +0 -0
  106. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/environments/constants.py +0 -0
  107. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/environments/sub_commands/__init__.py +0 -0
  108. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/environments/sub_commands/env_checkout.py +0 -0
  109. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/environments/sub_commands/env_delete.py +0 -0
  110. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/environments/sub_commands/env_list.py +0 -0
  111. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/environments/sub_commands/env_new.py +0 -0
  112. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/environments/utils.py +0 -0
  113. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/secret/__init__.py +0 -0
  114. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/secret/app.py +0 -0
  115. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/secret/command.py +0 -0
  116. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/secret/constants.py +0 -0
  117. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/secret/sub_commands/__init__.py +0 -0
  118. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/secret/sub_commands/secret_delete.py +0 -0
  119. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/secret/sub_commands/secret_list.py +0 -0
  120. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/secret/sub_commands/secret_new.py +0 -0
  121. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/security/__init__.py +0 -0
  122. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/security/allowlist/__init__.py +0 -0
  123. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/security/allowlist/app.py +0 -0
  124. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/security/allowlist/command.py +0 -0
  125. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/security/allowlist/sub_commands/__init__.py +0 -0
  126. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/security/allowlist/sub_commands/allowlist_delete.py +0 -0
  127. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/security/allowlist/sub_commands/allowlist_new.py +0 -0
  128. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/security/app.py +0 -0
  129. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/security/basic_auth/__init__.py +0 -0
  130. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/security/basic_auth/app.py +0 -0
  131. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/security/basic_auth/command.py +0 -0
  132. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/security/basic_auth/sub_commands/__init__.py +0 -0
  133. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/security/basic_auth/sub_commands/basic_auth_delete.py +0 -0
  134. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/security/basic_auth/sub_commands/basic_auth_new.py +0 -0
  135. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/security/basic_auth/sub_commands/basic_auth_retrieve.py +0 -0
  136. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/security/command.py +0 -0
  137. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/sub_commands/__init__.py +0 -0
  138. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/sub_commands/expose_db.py +0 -0
  139. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/sub_commands/get_monitoring_info.py +0 -0
  140. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/cloud/sub_commands/sync_db.py +0 -0
  141. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/__init__.py +0 -0
  142. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/app.py +0 -0
  143. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/command.py +0 -0
  144. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/enums.py +0 -0
  145. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/sub_commands/__init__.py +0 -0
  146. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/sub_commands/generate_frontend_config.py +0 -0
  147. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/sub_commands/generate_hook.py +0 -0
  148. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/sub_commands/generate_modifier.py +0 -0
  149. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/sub_commands/generate_permission.py +0 -0
  150. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/sub_commands/generate_property.py +0 -0
  151. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/sub_commands/generate_tests.py +0 -0
  152. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/sub_commands/generate_transaction.py +0 -0
  153. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/templates/async_transaction.pyt +0 -0
  154. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/templates/hook.pyt +0 -0
  155. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/templates/modifier/constructor.pyt +0 -0
  156. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/templates/modifier/display_name.pyt +0 -0
  157. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/templates/modifier/version_name.pyt +0 -0
  158. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/templates/property.pyt +0 -0
  159. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/templates/transaction.pyt +0 -0
  160. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/utils/__init__.py +0 -0
  161. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/utils/build_base_path.py +0 -0
  162. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/utils/cast_to_attribute_type.py +0 -0
  163. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/utils/model_attributes.py +0 -0
  164. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/utils/tests/__init__.py +0 -0
  165. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/utils/tests/async_mode_utils.py +0 -0
  166. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/utils/tests/conftest_utils.py +0 -0
  167. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/utils/tests/function_utils.py +0 -0
  168. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/utils/tests/model_utils.py +0 -0
  169. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/utils/tests/templates/async/conftest.py +0 -0
  170. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/utils/tests/templates/sync/conftest.py +0 -0
  171. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/utils/tests/type_utils.py +0 -0
  172. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/generate/utils/tests/unit.py +0 -0
  173. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/migrations/__init__.py +0 -0
  174. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/migrations/app.py +0 -0
  175. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/migrations/command.py +0 -0
  176. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/migrations/constants.py +0 -0
  177. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/migrations/sub_commands/apply.py +0 -0
  178. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/migrations/sub_commands/list.py +0 -0
  179. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/migrations/sub_commands/make.py +0 -0
  180. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/migrations/utils.py +0 -0
  181. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/new/__init__.py +0 -0
  182. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/new/command.py +0 -0
  183. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/new/templates/.amsdal/.dependencies +0 -0
  184. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/new/templates/.amsdal/.environment +0 -0
  185. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/new/templates/.amsdal/.secrets +0 -0
  186. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/new/templates/.amsdal-cli +0 -0
  187. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/new/templates/.gitignore +0 -0
  188. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/new/templates/README.md +0 -0
  189. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/new/templates/config.yml +0 -0
  190. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/new/templates/requirements.txt +0 -0
  191. {amsdal_cli-0.5.3/src/amsdal_cli/commands/register_connection → amsdal_cli-0.5.5/src/amsdal_cli/commands/plugin}/__init__.py +0 -0
  192. {amsdal_cli-0.5.3/src/amsdal_cli/commands/register_connection/utils → amsdal_cli-0.5.5/src/amsdal_cli/commands/plugin/templates/src}/__init__.py +0 -0
  193. {amsdal_cli-0.5.3/src/amsdal_cli/commands/restore → amsdal_cli-0.5.5/src/amsdal_cli/commands/register_connection}/__init__.py +0 -0
  194. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/register_connection/command.py +0 -0
  195. {amsdal_cli-0.5.3/src/amsdal_cli/commands/serve → amsdal_cli-0.5.5/src/amsdal_cli/commands/register_connection/utils}/__init__.py +0 -0
  196. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/register_connection/utils/build.py +0 -0
  197. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/register_connection/utils/config_updater.py +0 -0
  198. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/register_connection/utils/credentials.py +0 -0
  199. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/register_connection/utils/initialize.py +0 -0
  200. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/register_connection/utils/meta.py +0 -0
  201. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/register_connection/utils/migrate_models.py +0 -0
  202. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/register_connection/utils/model_generator.py +0 -0
  203. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/register_connection/utils/tables.py +0 -0
  204. {amsdal_cli-0.5.3/src/amsdal_cli/commands/serve/filters → amsdal_cli-0.5.5/src/amsdal_cli/commands/restore}/__init__.py +0 -0
  205. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/restore/command.py +0 -0
  206. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/restore/enums.py +0 -0
  207. {amsdal_cli-0.5.3/src/amsdal_cli/commands/serve/services → amsdal_cli-0.5.5/src/amsdal_cli/commands/serve}/__init__.py +0 -0
  208. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/serve/command.py +0 -0
  209. {amsdal_cli-0.5.3/src/amsdal_cli/commands/tests → amsdal_cli-0.5.5/src/amsdal_cli/commands/serve/filters}/__init__.py +0 -0
  210. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/serve/filters/models_watch_filter.py +0 -0
  211. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/serve/filters/static_files_watch_filter.py +0 -0
  212. {amsdal_cli-0.5.3/src/amsdal_cli/commands/verify → amsdal_cli-0.5.5/src/amsdal_cli/commands/serve/services}/__init__.py +0 -0
  213. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/serve/services/supervisor.py +0 -0
  214. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/serve/utils.py +0 -0
  215. {amsdal_cli-0.5.3/src/amsdal_cli/commands/verify/utils → amsdal_cli-0.5.5/src/amsdal_cli/commands/tests}/__init__.py +0 -0
  216. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/tests/command.py +0 -0
  217. {amsdal_cli-0.5.3/src/amsdal_cli/commands/worker → amsdal_cli-0.5.5/src/amsdal_cli/commands/verify}/__init__.py +0 -0
  218. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/verify/command.py +0 -0
  219. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/verify/models.py +0 -0
  220. {amsdal_cli-0.5.3/src/amsdal_cli/config → amsdal_cli-0.5.5/src/amsdal_cli/commands/verify/utils}/__init__.py +0 -0
  221. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/verify/utils/verify_json_model.py +0 -0
  222. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/verify/utils/verify_python_file.py +0 -0
  223. {amsdal_cli-0.5.3/src/amsdal_cli/utils → amsdal_cli-0.5.5/src/amsdal_cli/commands/worker}/__init__.py +0 -0
  224. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/worker/app.py +0 -0
  225. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/worker/command.py +0 -0
  226. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/worker/sub_commands/__init__.py +0 -0
  227. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/commands/worker/sub_commands/run.py +0 -0
  228. /amsdal_cli-0.5.3/src/amsdal_cli/py.typed → /amsdal_cli-0.5.5/src/amsdal_cli/config/__init__.py +0 -0
  229. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/main.py +0 -0
  230. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/utils/alias_group.py +0 -0
  231. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/utils/check_versions.py +0 -0
  232. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/utils/copier.py +0 -0
  233. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/utils/markdown_patch.py +0 -0
  234. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/utils/render_template.py +0 -0
  235. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/utils/schema_repository.py +0 -0
  236. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/utils/text.py +0 -0
  237. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/utils/vcs/__init__.py +0 -0
  238. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/utils/vcs/base.py +0 -0
  239. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/utils/vcs/dummy.py +0 -0
  240. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/utils/vcs/enums.py +0 -0
  241. {amsdal_cli-0.5.3 → amsdal_cli-0.5.5}/src/amsdal_cli/utils/vcs/git.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: amsdal_cli
3
- Version: 0.5.3
3
+ Version: 0.5.5
4
4
  Summary: CLI for AMSDAL framework
5
5
  Project-URL: Documentation, https://pypi.org/project/amsdal_cli/#readme
6
6
  Project-URL: Issues, https://pypi.org/project/amsdal_cli/
@@ -1,3 +1,15 @@
1
+ ## [v0.5.5](https://pypi.org/project/amsdal_cli/0.5.5/) - 2025-08-14
2
+
3
+ ### Changed
4
+
5
+ - Changed the files of contrib plugin structure
6
+
7
+ ## [v0.5.4](https://pypi.org/project/amsdal_cli/0.5.4/) - 2025-08-14
8
+
9
+ ### Added
10
+
11
+ - Plugin commands
12
+
1
13
  ## [v0.5.3](https://pypi.org/project/amsdal_cli/0.5.3/) - 2025-08-01
2
14
 
3
15
  ### Changed
@@ -0,0 +1,5 @@
1
+ ## [v0.5.5](https://pypi.org/project/amsdal_cli/0.5.5/) - 2025-08-14
2
+
3
+ ### Changed
4
+
5
+ - Changed the files of contrib plugin structure
@@ -167,7 +167,7 @@ all = [
167
167
  target-version = ["py311"]
168
168
  line-length = 120
169
169
  skip-string-normalization = true
170
- exclude = "tests/fixtures/*|.venv"
170
+ exclude = "tests/fixtures/*|.venv|src/amsdal_cli/commands/plugin/templates/*"
171
171
 
172
172
  [tool.mypy]
173
173
  plugins = ["pydantic.mypy"]
@@ -177,7 +177,7 @@ warn_unused_ignores = true
177
177
  disallow_any_generics = true
178
178
  check_untyped_defs = true
179
179
  no_implicit_reexport = true
180
- exclude = "tests/fixtures/*"
180
+ exclude = "tests/fixtures/*|src/amsdal_cli/commands/plugin/templates/*"
181
181
 
182
182
  # for strict mypy: (this is the tricky one :-))
183
183
  disallow_untyped_defs = true
@@ -199,7 +199,7 @@ warn_required_dynamic_aliases = true
199
199
  [tool.ruff]
200
200
  target-version = "py310"
201
201
  line-length = 120
202
- exclude = ["tests/fixtures/"]
202
+ exclude = ["tests/fixtures/", "src/amsdal_cli/commands/plugin/templates/"]
203
203
 
204
204
  [tool.ruff.lint]
205
205
  select = [
@@ -1,4 +1,4 @@
1
1
  # SPDX-FileCopyrightText: 2023-present
2
2
  #
3
3
  # SPDX-License-Identifier: AMSDAL End User License Agreement
4
- __version__ = '0.5.3'
4
+ __version__ = '0.5.5'
@@ -8,7 +8,7 @@ from amsdal_utils.config.manager import AmsdalConfigManager
8
8
  from rich import print as rprint
9
9
  from typer import Option
10
10
 
11
- COMMANDS_DO_NOT_REQUIRE_APP_PATH = ('new', 'n', 'api-check')
11
+ COMMANDS_DO_NOT_REQUIRE_APP_PATH = ('new', 'n', 'plugin', 'api-check')
12
12
 
13
13
 
14
14
  def init_app_context(
@@ -94,7 +94,7 @@ def init_app_context(
94
94
  try:
95
95
  amsdal_config = AmsdalConfigManager().get_config()
96
96
  except Exception:
97
- AmsdalConfigManager().load_config(Path('./config.yml'))
97
+ AmsdalConfigManager().load_config(config.config_path)
98
98
 
99
99
  amsdal_config = AmsdalConfigManager().get_config()
100
100
 
@@ -79,7 +79,7 @@ def dependency_list_command(
79
79
 
80
80
  manager.authenticate()
81
81
 
82
- AmsdalConfigManager().load_config(Path('./config.yml'))
82
+ AmsdalConfigManager().load_config(cli_config.config_path)
83
83
 
84
84
  try:
85
85
  list_response = manager.cloud_actions_manager.list_dependencies(
@@ -64,7 +64,7 @@ def dependency_new_command(
64
64
 
65
65
  manager.authenticate()
66
66
 
67
- AmsdalConfigManager().load_config(Path('./config.yml'))
67
+ AmsdalConfigManager().load_config(cli_config.config_path)
68
68
 
69
69
  try:
70
70
  manager.cloud_actions_manager.add_dependency(
@@ -47,7 +47,7 @@ async def list_command(
47
47
 
48
48
  manager.authenticate()
49
49
 
50
- AmsdalConfigManager().load_config(Path('./config.yml'))
50
+ AmsdalConfigManager().load_config(cli_config.config_path)
51
51
 
52
52
  try:
53
53
  list_response = manager.cloud_actions_manager.list_deploys(list_all=list_all)
@@ -151,7 +151,7 @@ def generate_model(
151
151
  models_package_path=output_path,
152
152
  models_module_path=settings.USER_MODELS_MODULE,
153
153
  object_schema=ObjectSchema(**json_schema),
154
- module_type=ModuleType.USER,
154
+ module_type=ModuleType.CONTRIB if cli_config.is_plugin else ModuleType.USER,
155
155
  dependencies=schema_repository.model_module_info, # type: ignore[arg-type]
156
156
  indent_width=' ' * cli_config.indent,
157
157
  )
@@ -7,10 +7,12 @@ from amsdal_cli.commands.migrations.app import sub_app
7
7
  from amsdal_cli.commands.migrations.sub_commands.apply import apply_migrations
8
8
  from amsdal_cli.commands.migrations.sub_commands.list import list_migrations
9
9
  from amsdal_cli.commands.migrations.sub_commands.make import make_migrations
10
+ from amsdal_cli.commands.migrations.sub_commands.make_contrib import make_contrib_migrations
10
11
 
11
12
  __all__ = [
12
13
  'apply_migrations',
13
14
  'list_migrations',
15
+ 'make_contrib_migrations',
14
16
  'make_migrations',
15
17
  ]
16
18
 
@@ -0,0 +1,179 @@
1
+ import asyncio
2
+ from pathlib import Path
3
+ from typing import TYPE_CHECKING
4
+ from typing import Annotated
5
+
6
+ import typer
7
+ from rich import print as rprint
8
+
9
+ from amsdal_cli.commands.migrations.app import sub_app
10
+ from amsdal_cli.utils.cli_config import ModelsFormat
11
+
12
+ if TYPE_CHECKING:
13
+ from amsdal_cli.utils.cli_config import CliConfig
14
+
15
+
16
+ def _sync_make_contrib_migrations(
17
+ name: str | None,
18
+ *,
19
+ is_data: bool,
20
+ cli_config: 'CliConfig',
21
+ ) -> None:
22
+ from amsdal.configs.constants import CORE_MIGRATIONS_PATH
23
+ from amsdal.configs.main import settings
24
+ from amsdal.manager import AmsdalManager
25
+ from amsdal_models.migration.data_classes import MigrationFile
26
+ from amsdal_models.migration.file_migration_generator import FileMigrationGenerator
27
+ from amsdal_utils.utils.text import to_snake_case
28
+
29
+ from amsdal_cli.commands.generate.enums import SOURCES_DIR
30
+ from amsdal_cli.commands.migrations.constants import MIGRATIONS_DIR_NAME
31
+ from amsdal_cli.utils.schema_repository import build_schema_repository
32
+ from amsdal_cli.utils.text import rich_info
33
+ from amsdal_cli.utils.text import rich_success
34
+
35
+ amsdal_manager = AmsdalManager()
36
+ if not amsdal_manager._is_setup:
37
+ amsdal_manager.setup()
38
+ amsdal_manager.authenticate()
39
+ amsdal_manager.post_setup() # type: ignore[call-arg]
40
+
41
+ schema_repository = build_schema_repository(cli_config=cli_config)
42
+ migrations_dir: Path = cli_config.app_directory / SOURCES_DIR / MIGRATIONS_DIR_NAME
43
+
44
+ generator = FileMigrationGenerator(
45
+ core_migrations_path=CORE_MIGRATIONS_PATH,
46
+ app_migrations_path=migrations_dir,
47
+ contrib_migrations_directory_name=settings.CONTRIB_MIGRATIONS_DIRECTORY_NAME,
48
+ )
49
+
50
+ try:
51
+ name = to_snake_case(name) if name else None
52
+ migration: MigrationFile = generator.make_migrations(
53
+ schemas=schema_repository.contrib_schemas,
54
+ name=name,
55
+ is_data=is_data,
56
+ )
57
+ except UserWarning as warn:
58
+ rprint(rich_info(str(warn)))
59
+ else:
60
+ rprint(rich_success(f'Contrib migration created: {migration.path.name}'))
61
+
62
+ try:
63
+ amsdal_manager.teardown()
64
+ AmsdalManager.invalidate()
65
+ except Exception: # noqa: S110
66
+ pass
67
+
68
+
69
+ async def _async_make_contrib_migrations(
70
+ name: str | None,
71
+ *,
72
+ is_data: bool,
73
+ cli_config: 'CliConfig',
74
+ ) -> None:
75
+ from amsdal.configs.constants import CORE_MIGRATIONS_PATH
76
+ from amsdal.configs.main import settings
77
+ from amsdal.manager import AsyncAmsdalManager
78
+ from amsdal_models.migration.data_classes import MigrationFile
79
+ from amsdal_models.migration.file_migration_generator import AsyncFileMigrationGenerator
80
+ from amsdal_utils.utils.text import to_snake_case
81
+
82
+ from amsdal_cli.commands.generate.enums import SOURCES_DIR
83
+ from amsdal_cli.commands.migrations.constants import MIGRATIONS_DIR_NAME
84
+ from amsdal_cli.utils.schema_repository import build_schema_repository
85
+ from amsdal_cli.utils.text import rich_info
86
+ from amsdal_cli.utils.text import rich_success
87
+
88
+ amsdal_manager = AsyncAmsdalManager()
89
+ if not amsdal_manager.is_setup:
90
+ await amsdal_manager.setup()
91
+ amsdal_manager.authenticate()
92
+ await amsdal_manager.post_setup() # type: ignore[call-arg, misc]
93
+
94
+ schema_repository = build_schema_repository(cli_config=cli_config)
95
+ migrations_dir: Path = cli_config.app_directory / SOURCES_DIR / MIGRATIONS_DIR_NAME
96
+
97
+ generator = AsyncFileMigrationGenerator(
98
+ core_migrations_path=CORE_MIGRATIONS_PATH,
99
+ app_migrations_path=migrations_dir,
100
+ contrib_migrations_directory_name=settings.CONTRIB_MODELS_PACKAGE_NAME,
101
+ )
102
+
103
+ try:
104
+ name = to_snake_case(name) if name else None
105
+ migration: MigrationFile = await generator.make_migrations(
106
+ schemas=schema_repository.contrib_schemas,
107
+ name=name,
108
+ is_data=is_data,
109
+ )
110
+ except UserWarning as warn:
111
+ rprint(rich_info(str(warn)))
112
+ else:
113
+ rprint(rich_success(f'Contrib migration created: {migration.path.name}'))
114
+
115
+ await amsdal_manager.teardown()
116
+ AsyncAmsdalManager.invalidate()
117
+
118
+
119
+ @sub_app.command(name='new-contrib, nc')
120
+ def make_contrib_migrations(
121
+ ctx: typer.Context,
122
+ build_dir: Annotated[Path, typer.Option('--build-dir', '-b')] = Path('.'),
123
+ *,
124
+ name: Annotated[str, typer.Option('--name', '-n', help='Migration name')] = None, # type: ignore # noqa: RUF013
125
+ is_data: Annotated[bool, typer.Option('--data', '-d', help='Create data migration')] = False,
126
+ config: Annotated[Path, typer.Option('--config', '-c')] = None, # type: ignore # noqa: RUF013
127
+ ) -> None:
128
+ """
129
+ Creates schema migration based on the changes in the contrib models' schemas or
130
+ creates an empty data migration using --data flag.
131
+
132
+ Example usage:
133
+
134
+ 1. Automatically creates a schema migrations based on the changes in the contrib models' schemas:
135
+ ```bash
136
+ amsdal migrations new-contrib
137
+ ```
138
+
139
+ 2. Creates a schema migration with a custom name:
140
+ ```bash
141
+ amsdal migrations new-contrib --name my_custom_contrib_migration
142
+ ```
143
+
144
+ 3. Creates a data migration:
145
+ ```bash
146
+ amsdal migrations new-contrib --data --name my_contrib_data_migration
147
+ ```
148
+ The data migrations allow you to write a python script to migrate your data. Useful for example when you have added
149
+ a new column to the table and you want to populate it with some data. So you first generate a schema migration that
150
+ adds the column and then you create a data migration that populates the column with the data.
151
+ """
152
+ from amsdal_utils.config.manager import AmsdalConfigManager
153
+
154
+ from amsdal_cli.commands.build.services.builder import AppBuilder
155
+ from amsdal_cli.utils.cli_config import CliConfig
156
+
157
+ cli_config: CliConfig = ctx.meta['config']
158
+
159
+ app_builder = AppBuilder(
160
+ cli_config=cli_config,
161
+ config_path=config or cli_config.config_path,
162
+ )
163
+ app_builder.build(build_dir, is_silent=True)
164
+ cli_config.models_format = ModelsFormat.PY
165
+
166
+ if AmsdalConfigManager().get_config().async_mode:
167
+ asyncio.run(
168
+ _async_make_contrib_migrations(
169
+ name=name,
170
+ is_data=is_data,
171
+ cli_config=cli_config,
172
+ )
173
+ )
174
+ else:
175
+ _sync_make_contrib_migrations(
176
+ name=name,
177
+ is_data=is_data,
178
+ cli_config=cli_config,
179
+ )
@@ -0,0 +1,152 @@
1
+ import random
2
+ import string
3
+ import uuid
4
+ from pathlib import Path
5
+ from typing import Annotated
6
+ from typing import Any
7
+
8
+ import typer
9
+ from rich import print as rprint
10
+
11
+ from amsdal_cli.app import app
12
+ from amsdal_cli.utils.cli_config import ModelsFormat
13
+
14
+
15
+ @app.command(name='plugin')
16
+ def plugin_command(
17
+ plugin_name: str = typer.Argument(
18
+ ...,
19
+ help='The Plugin name. For example: MyPlugin',
20
+ ),
21
+ output_path: Path = typer.Argument( # noqa: B008
22
+ ...,
23
+ help='Output path, where the plugin will be created.',
24
+ ),
25
+ *,
26
+ models_format: Annotated[
27
+ ModelsFormat,
28
+ typer.Option(help='The format of models used in this plugin.'),
29
+ ] = ModelsFormat.PY,
30
+ is_async_mode: Annotated[
31
+ bool,
32
+ typer.Option('--async', help='Whether to run the plugin in async mode.'),
33
+ ] = False,
34
+ ) -> None:
35
+ """
36
+ Generates a new AMSDAL plugin.
37
+
38
+ Example:
39
+
40
+ ```bash
41
+ amsdal plugin MyPlugin .
42
+ ```
43
+
44
+ It will create `my_plugin` directory in the current directory with AMSDAL plugin structure.
45
+ """
46
+ from amsdal.__about__ import __version__ as amsdal_version
47
+ from amsdal_utils.utils.text import slugify
48
+ from amsdal_utils.utils.text import to_snake_case
49
+
50
+ from amsdal_cli.commands.generate.enums import SOURCES_DIR
51
+ from amsdal_cli.utils.copier import copy_blueprints_from_directory
52
+ from amsdal_cli.utils.text import rich_error
53
+ from amsdal_cli.utils.text import rich_success
54
+
55
+ if not output_path.exists():
56
+ rprint(rich_error(f'The output path "{output_path.resolve()}" does not exist.'))
57
+ raise typer.Exit
58
+
59
+ if output_path.is_file():
60
+ rprint(rich_error(f'The output path "{output_path.resolve()}" is not a directory.'))
61
+ raise typer.Exit
62
+
63
+ output_path /= to_snake_case(plugin_name)
64
+
65
+ if output_path.exists():
66
+ if output_path.is_file():
67
+ rprint(rich_error(f'The path "{output_path.resolve()}" is not a directory.'))
68
+ raise typer.Exit
69
+
70
+ if any(output_path.iterdir()):
71
+ rprint(rich_error(f'The directory "{output_path.resolve()}" is not empty.'))
72
+ raise typer.Exit
73
+
74
+ application_uuid = (random.choice(string.ascii_lowercase) + uuid.uuid4().hex[:31]).lower() # noqa: S311
75
+
76
+ context = {
77
+ 'application_uuid': application_uuid,
78
+ 'plugin_name': plugin_name,
79
+ 'plugin_name_slugify': slugify(plugin_name),
80
+ 'plugin_name_snake': to_snake_case(plugin_name),
81
+ 'amsdal_version': amsdal_version,
82
+ 'models_format': models_format.value,
83
+ 'is_async_mode': is_async_mode,
84
+ }
85
+
86
+ copy_blueprints_from_directory(
87
+ source_path=Path(__file__).parent / 'templates',
88
+ destination_path=output_path,
89
+ context=context,
90
+ )
91
+ (output_path / SOURCES_DIR).mkdir(exist_ok=True)
92
+
93
+ # Create example model based on format
94
+ _create_example_model(output_path, models_format, context)
95
+
96
+ rprint(rich_success(f'The plugin is successfully created in {output_path.resolve()}'))
97
+
98
+
99
+ def _create_example_model(output_path: Path, models_format: ModelsFormat, context: dict[str, Any]) -> None:
100
+ """Create an example model based on the specified format."""
101
+ from amsdal_cli.utils.copier import write_file
102
+
103
+ models_dir = output_path / 'src' / 'models'
104
+
105
+ if models_format == ModelsFormat.JSON:
106
+ # Create JSON model
107
+ model_dir = models_dir / 'example_model'
108
+ model_dir.mkdir(exist_ok=True)
109
+
110
+ json_content = """{
111
+ "title": "ExampleModel",
112
+ "type": "object",
113
+ "properties": {
114
+ "name": {
115
+ "title": "name",
116
+ "type": "string"
117
+ },
118
+ "description": {
119
+ "title": "description",
120
+ "type": "string"
121
+ },
122
+ "is_active": {
123
+ "title": "is_active",
124
+ "type": "boolean",
125
+ "default": true
126
+ }
127
+ },
128
+ "required": [
129
+ "name"
130
+ ],
131
+ "indexed": [
132
+ "name"
133
+ ]
134
+ }"""
135
+ write_file(json_content, model_dir / 'model.json', confirm_overwriting=False)
136
+ else:
137
+ # Create Python model
138
+ py_content = f"""from amsdal.types import BaseModel
139
+ from amsdal.types import Field
140
+ from amsdal_utils.models.enums import ModuleType
141
+
142
+
143
+ class ExampleModel(BaseModel):
144
+ \"\"\"Example model for {context['plugin_name']} plugin.\"\"\"
145
+
146
+ __module_type__ = ModuleType.CONTRIB
147
+
148
+ name: str = Field(..., index=True)
149
+ description: str = Field(default="")
150
+ is_active: bool = Field(default=True)
151
+ """
152
+ write_file(py_content, models_dir / 'example_model.py', confirm_overwriting=False)
@@ -0,0 +1,10 @@
1
+ {
2
+ "config_path": "./config.yml",
3
+ "http_port": 8080,
4
+ "check_model_exists": true,
5
+ "json_indent": 4,
6
+ "application_uuid": "{{ ctx.application_uuid }}",
7
+ "application_name": "{{ ctx.plugin_name }}",
8
+ "models_format": "{{ ctx.models_format }}",
9
+ "is_plugin": true
10
+ }
@@ -0,0 +1,50 @@
1
+ # {{ ctx.plugin_name }}
2
+
3
+ This plugin provides custom models, properties, transactions, and hooks for the AMSDAL Framework.
4
+
5
+ ## Plugin Structure
6
+
7
+ - `src/models/` - Contains model definitions{% if ctx.models_format == 'json' %} in JSON format{% else %} in Python format{% endif %}
8
+ - `src/transactions/` - Contains transaction definitions
9
+ - `pyproject.toml` - Plugin configuration file
10
+ - `config.yml` - Configuration for connections
11
+
12
+ ## Installing this Plugin
13
+
14
+ To use this plugin in an AMSDAL application:
15
+
16
+ 1. Copy the plugin directory to your AMSDAL application
17
+ 2. Import the models and transactions as needed
18
+ 3. Register the plugin in your application configuration
19
+
20
+ ## Development
21
+
22
+ This plugin uses {% if ctx.is_async_mode %}async{% else %}sync{% endif %} mode.
23
+
24
+ ### Adding Models
25
+
26
+ ```bash
27
+ amsdal generate model ModelName --format {{ ctx.models_format }}
28
+ ```
29
+
30
+ ### Adding Properties
31
+
32
+ ```bash
33
+ amsdal generate property --model ModelName property_name
34
+ ```
35
+
36
+ ### Adding Transactions
37
+
38
+ ```bash
39
+ amsdal generate transaction TransactionName
40
+ ```
41
+
42
+ ### Adding Hooks
43
+
44
+ ```bash
45
+ amsdal generate hook --model ModelName on_create
46
+ ```
47
+
48
+ ## Testing
49
+
50
+ Test your plugin by integrating it with an AMSDAL application and running the application's test suite.
@@ -0,0 +1,20 @@
1
+ application_name: {{ ctx.plugin_name_slugify }}
2
+ async_mode: {{ 'true' if ctx.is_async_mode else 'false' }}
3
+ connections:
4
+ - name: sqlite_history
5
+ backend: {{ ctx.historical_backend }}
6
+ credentials:
7
+ - db_path: ./warehouse/amsdal_historical.sqlite3
8
+ - check_same_thread: false
9
+ - name: sqlite_state
10
+ backend: {{ ctx.state_backend }}
11
+ credentials:
12
+ - db_path: ./warehouse/amsdal_state.sqlite3
13
+ - check_same_thread: false
14
+ - name: lock
15
+ backend: amsdal_data.lock.implementations.thread_lock.ThreadLock
16
+ resources_config:
17
+ lakehouse: sqlite_history
18
+ lock: lock
19
+ repository:
20
+ default: sqlite_state
@@ -0,0 +1,16 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [tool.hatch.build.targets.wheel]
6
+ packages = ["src/"]
7
+
8
+ [project]
9
+ name = "{{ ctx.plugin_name_slugify }}_amsdal_plugin"
10
+ version = "0.1.0"
11
+ description = "{{ ctx.plugin_name }} plugin for AMSDAL Framework"
12
+ readme = "README.md"
13
+ requires-python = ">=3.11"
14
+ dependencies = [
15
+ "amsdal[cli]=={{ ctx.amsdal_version }}"
16
+ ]
@@ -0,0 +1 @@
1
+ __version__ = '0.1.0'
@@ -0,0 +1 @@
1
+ # Models module for {{ ctx.plugin_name }} plugin
@@ -0,0 +1 @@
1
+ # Transactions module for {{ ctx.plugin_name }} plugin
@@ -0,0 +1,47 @@
1
+ {% if ctx.is_async_mode %}from amsdal.core.classes.base import transaction
2
+
3
+
4
+ @transaction(name='ExampleTransaction')
5
+ async def example_transaction(name: str, description: str = "") -> None:
6
+ """
7
+ Example transaction for {{ ctx.plugin_name }} plugin.
8
+
9
+ Args:
10
+ name: Name for the example model
11
+ description: Description for the example model
12
+ """
13
+ # TODO: Add your transaction logic here
14
+ # Example:
15
+ # from models.example_model import ExampleModel
16
+ #
17
+ # new_model = ExampleModel(
18
+ # name=name,
19
+ # description=description,
20
+ # is_active=True
21
+ # )
22
+ # await new_model.async_save()
23
+ pass
24
+ {% else %}from amsdal.core.classes.base import transaction
25
+
26
+
27
+ @transaction(name='ExampleTransaction')
28
+ def example_transaction(name: str, description: str = "") -> None:
29
+ """
30
+ Example transaction for {{ ctx.plugin_name }} plugin.
31
+
32
+ Args:
33
+ name: Name for the example model
34
+ description: Description for the example model
35
+ """
36
+ # TODO: Add your transaction logic here
37
+ # Example:
38
+ # from models.example_model import ExampleModel
39
+ #
40
+ # new_model = ExampleModel(
41
+ # name=name,
42
+ # description=description,
43
+ # is_active=True
44
+ # )
45
+ # new_model.save()
46
+ pass
47
+ {% endif %}
@@ -22,6 +22,7 @@ class Settings(BaseSettings):
22
22
  default=[
23
23
  'amsdal_cli.commands.api_check',
24
24
  'amsdal_cli.commands.new',
25
+ 'amsdal_cli.commands.plugin',
25
26
  'amsdal_cli.commands.generate',
26
27
  'amsdal_cli.commands.verify',
27
28
  'amsdal_cli.commands.build',
File without changes
File without changes
@@ -43,6 +43,7 @@ class CliConfig(BaseModel):
43
43
  indent: int = 4
44
44
  app_directory: Path = Path('/dev/null')
45
45
  verbose: bool = True
46
+ is_plugin: bool = False
46
47
  vcs: VCSOptions | None = None
47
48
 
48
49
  @model_validator(mode='after')