amsdal_cli 0.5.3__tar.gz → 0.5.4__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 (239) hide show
  1. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/PKG-INFO +1 -1
  2. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/change-logs.md +6 -0
  3. amsdal_cli-0.5.4/latest-changelogs.md +5 -0
  4. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/pyproject.toml +3 -3
  5. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/__about__.py +1 -1
  6. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/callbacks.py +1 -1
  7. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/migrations/sub_commands/__init__.py +2 -0
  8. amsdal_cli-0.5.4/src/amsdal_cli/commands/migrations/sub_commands/make_contrib.py +179 -0
  9. amsdal_cli-0.5.4/src/amsdal_cli/commands/plugin/command.py +149 -0
  10. amsdal_cli-0.5.4/src/amsdal_cli/commands/plugin/templates/.amsdal-cli +10 -0
  11. amsdal_cli-0.5.4/src/amsdal_cli/commands/plugin/templates/README.md +49 -0
  12. amsdal_cli-0.5.4/src/amsdal_cli/commands/plugin/templates/plugin.yml +20 -0
  13. amsdal_cli-0.5.4/src/amsdal_cli/commands/plugin/templates/requirements.txt +1 -0
  14. amsdal_cli-0.5.4/src/amsdal_cli/commands/plugin/templates/src/models/__init__.py +1 -0
  15. amsdal_cli-0.5.4/src/amsdal_cli/commands/plugin/templates/src/transactions/__init__.py +1 -0
  16. amsdal_cli-0.5.4/src/amsdal_cli/commands/plugin/templates/src/transactions/example_transaction.py +47 -0
  17. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/config/main.py +1 -0
  18. amsdal_cli-0.5.4/src/amsdal_cli/utils/__init__.py +0 -0
  19. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/uv.lock +193 -193
  20. amsdal_cli-0.5.3/latest-changelogs.md +0 -5
  21. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/.editorconfig +0 -0
  22. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/.gitignore +0 -0
  23. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/.junie/guidelines.md +0 -0
  24. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/CONTRIBUTING.md +0 -0
  25. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/LICENSE.txt +0 -0
  26. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/README.md +0 -0
  27. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/license_check.py +0 -0
  28. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/release_notes/.gitkeep +0 -0
  29. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/scripts/release.sh +0 -0
  30. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/scripts/tag_check.sh +0 -0
  31. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/Third-Party Materials - AMSDAL Dependencies - License Notices.md +0 -0
  32. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/__init__.py +0 -0
  33. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/app.py +0 -0
  34. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/__init__.py +0 -0
  35. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/api_check/__init__.py +0 -0
  36. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/api_check/command.py +0 -0
  37. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/api_check/config.py +0 -0
  38. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/api_check/data_classes.py +0 -0
  39. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/api_check/operation_log.py +0 -0
  40. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/api_check/services/__init__.py +0 -0
  41. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/api_check/services/comparison.py +0 -0
  42. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/api_check/services/data_factory.py +0 -0
  43. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/api_check/services/loader.py +0 -0
  44. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/api_check/services/runner.py +0 -0
  45. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/api_check/services/storage.py +0 -0
  46. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/__init__.py +0 -0
  47. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/command.py +0 -0
  48. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/constants.py +0 -0
  49. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/__init__.py +0 -0
  50. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/data_models/__init__.py +0 -0
  51. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/data_models/custom_code.py +0 -0
  52. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/data_models/options.py +0 -0
  53. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/data_models/schemas_directory.py +0 -0
  54. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/extenders/__init__.py +0 -0
  55. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/extenders/custom_code_extender.py +0 -0
  56. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/extenders/options_extender.py +0 -0
  57. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/loaders/__init__.py +0 -0
  58. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/loaders/base.py +0 -0
  59. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/loaders/cli_custom_code_loader.py +0 -0
  60. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/loaders/cli_loader.py +0 -0
  61. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/loaders/cli_options_loader.py +0 -0
  62. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/loaders/cli_statics_loader.py +0 -0
  63. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/loaders/cli_transactions_loader.py +0 -0
  64. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/loaders/utils.py +0 -0
  65. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/mixins/__init__.py +0 -0
  66. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/mixins/enrich_schemas_mixin.py +0 -0
  67. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/schema_json_loader.py +0 -0
  68. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/utils/__init__.py +0 -0
  69. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/schemas/utils/merger.py +0 -0
  70. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/services/__init__.py +0 -0
  71. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/services/builder.py +0 -0
  72. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/services/mixin.py +0 -0
  73. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/utils/__init__.py +0 -0
  74. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/build/utils/build_config_file.py +0 -0
  75. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/ci_cd/__init__.py +0 -0
  76. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/ci_cd/command.py +0 -0
  77. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/ci_cd/constants.py +0 -0
  78. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/ci_cd/templates/github.yml +0 -0
  79. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/clean/__init__.py +0 -0
  80. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/clean/command.py +0 -0
  81. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/__init__.py +0 -0
  82. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/app.py +0 -0
  83. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/command.py +0 -0
  84. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/dependency/__init__.py +0 -0
  85. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/dependency/app.py +0 -0
  86. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/dependency/command.py +0 -0
  87. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/dependency/sub_commands/__init__.py +0 -0
  88. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/dependency/sub_commands/dependency_delete.py +0 -0
  89. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/dependency/sub_commands/dependency_list.py +0 -0
  90. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/dependency/sub_commands/dependency_new.py +0 -0
  91. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/deploy/__init__.py +0 -0
  92. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/deploy/app.py +0 -0
  93. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/deploy/command.py +0 -0
  94. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/deploy/sub_commands/__init__.py +0 -0
  95. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/deploy/sub_commands/deploy_delete.py +0 -0
  96. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/deploy/sub_commands/deploy_list.py +0 -0
  97. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/deploy/sub_commands/deploy_new.py +0 -0
  98. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/enums.py +0 -0
  99. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/environments/__init__.py +0 -0
  100. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/environments/app.py +0 -0
  101. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/environments/command.py +0 -0
  102. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/environments/constants.py +0 -0
  103. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/environments/sub_commands/__init__.py +0 -0
  104. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/environments/sub_commands/env_checkout.py +0 -0
  105. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/environments/sub_commands/env_delete.py +0 -0
  106. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/environments/sub_commands/env_list.py +0 -0
  107. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/environments/sub_commands/env_new.py +0 -0
  108. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/environments/utils.py +0 -0
  109. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/secret/__init__.py +0 -0
  110. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/secret/app.py +0 -0
  111. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/secret/command.py +0 -0
  112. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/secret/constants.py +0 -0
  113. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/secret/sub_commands/__init__.py +0 -0
  114. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/secret/sub_commands/secret_delete.py +0 -0
  115. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/secret/sub_commands/secret_list.py +0 -0
  116. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/secret/sub_commands/secret_new.py +0 -0
  117. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/security/__init__.py +0 -0
  118. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/security/allowlist/__init__.py +0 -0
  119. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/security/allowlist/app.py +0 -0
  120. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/security/allowlist/command.py +0 -0
  121. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/security/allowlist/sub_commands/__init__.py +0 -0
  122. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/security/allowlist/sub_commands/allowlist_delete.py +0 -0
  123. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/security/allowlist/sub_commands/allowlist_new.py +0 -0
  124. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/security/app.py +0 -0
  125. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/security/basic_auth/__init__.py +0 -0
  126. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/security/basic_auth/app.py +0 -0
  127. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/security/basic_auth/command.py +0 -0
  128. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/security/basic_auth/sub_commands/__init__.py +0 -0
  129. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/security/basic_auth/sub_commands/basic_auth_delete.py +0 -0
  130. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/security/basic_auth/sub_commands/basic_auth_new.py +0 -0
  131. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/security/basic_auth/sub_commands/basic_auth_retrieve.py +0 -0
  132. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/security/command.py +0 -0
  133. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/sub_commands/__init__.py +0 -0
  134. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/sub_commands/expose_db.py +0 -0
  135. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/sub_commands/get_monitoring_info.py +0 -0
  136. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/cloud/sub_commands/sync_db.py +0 -0
  137. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/__init__.py +0 -0
  138. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/app.py +0 -0
  139. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/command.py +0 -0
  140. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/enums.py +0 -0
  141. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/sub_commands/__init__.py +0 -0
  142. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/sub_commands/generate_frontend_config.py +0 -0
  143. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/sub_commands/generate_hook.py +0 -0
  144. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/sub_commands/generate_model.py +0 -0
  145. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/sub_commands/generate_modifier.py +0 -0
  146. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/sub_commands/generate_permission.py +0 -0
  147. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/sub_commands/generate_property.py +0 -0
  148. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/sub_commands/generate_tests.py +0 -0
  149. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/sub_commands/generate_transaction.py +0 -0
  150. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/templates/async_transaction.pyt +0 -0
  151. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/templates/hook.pyt +0 -0
  152. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/templates/modifier/constructor.pyt +0 -0
  153. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/templates/modifier/display_name.pyt +0 -0
  154. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/templates/modifier/version_name.pyt +0 -0
  155. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/templates/property.pyt +0 -0
  156. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/templates/transaction.pyt +0 -0
  157. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/utils/__init__.py +0 -0
  158. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/utils/build_base_path.py +0 -0
  159. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/utils/cast_to_attribute_type.py +0 -0
  160. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/utils/model_attributes.py +0 -0
  161. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/utils/tests/__init__.py +0 -0
  162. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/utils/tests/async_mode_utils.py +0 -0
  163. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/utils/tests/conftest_utils.py +0 -0
  164. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/utils/tests/function_utils.py +0 -0
  165. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/utils/tests/model_utils.py +0 -0
  166. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/utils/tests/templates/async/conftest.py +0 -0
  167. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/utils/tests/templates/sync/conftest.py +0 -0
  168. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/utils/tests/type_utils.py +0 -0
  169. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/generate/utils/tests/unit.py +0 -0
  170. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/migrations/__init__.py +0 -0
  171. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/migrations/app.py +0 -0
  172. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/migrations/command.py +0 -0
  173. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/migrations/constants.py +0 -0
  174. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/migrations/sub_commands/apply.py +0 -0
  175. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/migrations/sub_commands/list.py +0 -0
  176. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/migrations/sub_commands/make.py +0 -0
  177. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/migrations/utils.py +0 -0
  178. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/new/__init__.py +0 -0
  179. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/new/command.py +0 -0
  180. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/new/templates/.amsdal/.dependencies +0 -0
  181. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/new/templates/.amsdal/.environment +0 -0
  182. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/new/templates/.amsdal/.secrets +0 -0
  183. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/new/templates/.amsdal-cli +0 -0
  184. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/new/templates/.gitignore +0 -0
  185. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/new/templates/README.md +0 -0
  186. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/new/templates/config.yml +0 -0
  187. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/new/templates/requirements.txt +0 -0
  188. {amsdal_cli-0.5.3/src/amsdal_cli/commands/register_connection → amsdal_cli-0.5.4/src/amsdal_cli/commands/plugin}/__init__.py +0 -0
  189. {amsdal_cli-0.5.3/src/amsdal_cli/commands/register_connection/utils → amsdal_cli-0.5.4/src/amsdal_cli/commands/register_connection}/__init__.py +0 -0
  190. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/register_connection/command.py +0 -0
  191. {amsdal_cli-0.5.3/src/amsdal_cli/commands/restore → amsdal_cli-0.5.4/src/amsdal_cli/commands/register_connection/utils}/__init__.py +0 -0
  192. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/register_connection/utils/build.py +0 -0
  193. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/register_connection/utils/config_updater.py +0 -0
  194. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/register_connection/utils/credentials.py +0 -0
  195. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/register_connection/utils/initialize.py +0 -0
  196. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/register_connection/utils/meta.py +0 -0
  197. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/register_connection/utils/migrate_models.py +0 -0
  198. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/register_connection/utils/model_generator.py +0 -0
  199. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/register_connection/utils/tables.py +0 -0
  200. {amsdal_cli-0.5.3/src/amsdal_cli/commands/serve → amsdal_cli-0.5.4/src/amsdal_cli/commands/restore}/__init__.py +0 -0
  201. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/restore/command.py +0 -0
  202. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/restore/enums.py +0 -0
  203. {amsdal_cli-0.5.3/src/amsdal_cli/commands/serve/filters → amsdal_cli-0.5.4/src/amsdal_cli/commands/serve}/__init__.py +0 -0
  204. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/serve/command.py +0 -0
  205. {amsdal_cli-0.5.3/src/amsdal_cli/commands/serve/services → amsdal_cli-0.5.4/src/amsdal_cli/commands/serve/filters}/__init__.py +0 -0
  206. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/serve/filters/models_watch_filter.py +0 -0
  207. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/serve/filters/static_files_watch_filter.py +0 -0
  208. {amsdal_cli-0.5.3/src/amsdal_cli/commands/tests → amsdal_cli-0.5.4/src/amsdal_cli/commands/serve/services}/__init__.py +0 -0
  209. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/serve/services/supervisor.py +0 -0
  210. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/serve/utils.py +0 -0
  211. {amsdal_cli-0.5.3/src/amsdal_cli/commands/verify → amsdal_cli-0.5.4/src/amsdal_cli/commands/tests}/__init__.py +0 -0
  212. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/tests/command.py +0 -0
  213. {amsdal_cli-0.5.3/src/amsdal_cli/commands/verify/utils → amsdal_cli-0.5.4/src/amsdal_cli/commands/verify}/__init__.py +0 -0
  214. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/verify/command.py +0 -0
  215. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/verify/models.py +0 -0
  216. {amsdal_cli-0.5.3/src/amsdal_cli/commands/worker → amsdal_cli-0.5.4/src/amsdal_cli/commands/verify/utils}/__init__.py +0 -0
  217. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/verify/utils/verify_json_model.py +0 -0
  218. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/verify/utils/verify_python_file.py +0 -0
  219. {amsdal_cli-0.5.3/src/amsdal_cli/config → amsdal_cli-0.5.4/src/amsdal_cli/commands/worker}/__init__.py +0 -0
  220. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/worker/app.py +0 -0
  221. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/worker/command.py +0 -0
  222. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/worker/sub_commands/__init__.py +0 -0
  223. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/commands/worker/sub_commands/run.py +0 -0
  224. {amsdal_cli-0.5.3/src/amsdal_cli/utils → amsdal_cli-0.5.4/src/amsdal_cli/config}/__init__.py +0 -0
  225. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/main.py +0 -0
  226. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/py.typed +0 -0
  227. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/utils/alias_group.py +0 -0
  228. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/utils/check_versions.py +0 -0
  229. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/utils/cli_config.py +0 -0
  230. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/utils/copier.py +0 -0
  231. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/utils/markdown_patch.py +0 -0
  232. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/utils/render_template.py +0 -0
  233. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/utils/schema_repository.py +0 -0
  234. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/utils/text.py +0 -0
  235. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/utils/vcs/__init__.py +0 -0
  236. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/utils/vcs/base.py +0 -0
  237. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/utils/vcs/dummy.py +0 -0
  238. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/src/amsdal_cli/utils/vcs/enums.py +0 -0
  239. {amsdal_cli-0.5.3 → amsdal_cli-0.5.4}/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.4
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,9 @@
1
+ ## [v0.5.4](https://pypi.org/project/amsdal_cli/0.5.4/) - 2025-08-14
2
+
3
+ ### Added
4
+
5
+ - Plugin commands
6
+
1
7
  ## [v0.5.3](https://pypi.org/project/amsdal_cli/0.5.3/) - 2025-08-01
2
8
 
3
9
  ### Changed
@@ -0,0 +1,5 @@
1
+ ## [v0.5.4](https://pypi.org/project/amsdal_cli/0.5.4/) - 2025-08-14
2
+
3
+ ### Added
4
+
5
+ - Plugin commands
@@ -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.4'
@@ -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(
@@ -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,149 @@
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
+
141
+
142
+ class ExampleModel(BaseModel):
143
+ \"\"\"Example model for {context['plugin_name']} plugin.\"\"\"
144
+
145
+ name: str = Field(..., index=True)
146
+ description: str = Field(default="")
147
+ is_active: bool = Field(default=True)
148
+ """
149
+ write_file(py_content, models_dir / 'example_model.py', confirm_overwriting=False)
@@ -0,0 +1,10 @@
1
+ {
2
+ "config_path": "./plugin.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,49 @@
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
+ - `plugin.yml` - Plugin configuration file
10
+
11
+ ## Installing this Plugin
12
+
13
+ To use this plugin in an AMSDAL application:
14
+
15
+ 1. Copy the plugin directory to your AMSDAL application
16
+ 2. Import the models and transactions as needed
17
+ 3. Register the plugin in your application configuration
18
+
19
+ ## Development
20
+
21
+ This plugin uses {% if ctx.is_async_mode %}async{% else %}sync{% endif %} mode.
22
+
23
+ ### Adding Models
24
+
25
+ ```bash
26
+ amsdal generate model ModelName --format {{ ctx.models_format }}
27
+ ```
28
+
29
+ ### Adding Properties
30
+
31
+ ```bash
32
+ amsdal generate property --model ModelName property_name
33
+ ```
34
+
35
+ ### Adding Transactions
36
+
37
+ ```bash
38
+ amsdal generate transaction TransactionName
39
+ ```
40
+
41
+ ### Adding Hooks
42
+
43
+ ```bash
44
+ amsdal generate hook --model ModelName on_create
45
+ ```
46
+
47
+ ## Testing
48
+
49
+ Test your plugin by integrating it with an AMSDAL application and running the application's test suite.
@@ -0,0 +1,20 @@
1
+ plugin_name: {{ ctx.plugin_name_slugify }}
2
+ plugin_type: amsdal_plugin
3
+ version: "1.0.0"
4
+ async_mode: {{ 'true' if ctx.is_async_mode else 'false' }}
5
+ models_format: {{ ctx.models_format }}
6
+
7
+ description: "{{ ctx.plugin_name }} plugin for AMSDAL Framework"
8
+
9
+ # Plugin metadata
10
+ author: ""
11
+ license: ""
12
+ homepage: ""
13
+
14
+ # Dependencies (if any)
15
+ dependencies: []
16
+
17
+ # Plugin configuration
18
+ config:
19
+ models_directory: "src/models"
20
+ transactions_directory: "src/transactions"
@@ -0,0 +1 @@
1
+ amsdal[cli]=={{ ctx.amsdal_version }}
@@ -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