amsdal 0.5.23__cp311-cp311-macosx_10_9_universal2.whl

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.

Potentially problematic release.


This version of amsdal might be problematic. Click here for more details.

Files changed (252) hide show
  1. amsdal/Third-Party Materials - AMSDAL Dependencies - License Notices.md +1334 -0
  2. amsdal/__about__.py +4 -0
  3. amsdal/__about__.pyi +1 -0
  4. amsdal/__init__.py +23 -0
  5. amsdal/__init__.pyi +9 -0
  6. amsdal/__migrations__/0000_initial.py +36 -0
  7. amsdal/__migrations__/0001_create_class_file.py +61 -0
  8. amsdal/__migrations__/0002_create_class_file.py +109 -0
  9. amsdal/__migrations__/0003_update_class_file.py +91 -0
  10. amsdal/__migrations__/0004_update_class_file.py +45 -0
  11. amsdal/cloud/__init__.cpython-311-darwin.so +0 -0
  12. amsdal/cloud/__init__.pyi +0 -0
  13. amsdal/cloud/client.cpython-311-darwin.so +0 -0
  14. amsdal/cloud/client.pyi +57 -0
  15. amsdal/cloud/constants.cpython-311-darwin.so +0 -0
  16. amsdal/cloud/constants.pyi +13 -0
  17. amsdal/cloud/enums.cpython-311-darwin.so +0 -0
  18. amsdal/cloud/enums.pyi +68 -0
  19. amsdal/cloud/models/__init__.cpython-311-darwin.so +0 -0
  20. amsdal/cloud/models/__init__.pyi +0 -0
  21. amsdal/cloud/models/base.cpython-311-darwin.so +0 -0
  22. amsdal/cloud/models/base.pyi +247 -0
  23. amsdal/cloud/services/__init__.cpython-311-darwin.so +0 -0
  24. amsdal/cloud/services/__init__.pyi +0 -0
  25. amsdal/cloud/services/actions/__init__.cpython-311-darwin.so +0 -0
  26. amsdal/cloud/services/actions/__init__.pyi +0 -0
  27. amsdal/cloud/services/actions/add_allowlist_ip.cpython-311-darwin.so +0 -0
  28. amsdal/cloud/services/actions/add_allowlist_ip.pyi +19 -0
  29. amsdal/cloud/services/actions/add_basic_auth.cpython-311-darwin.so +0 -0
  30. amsdal/cloud/services/actions/add_basic_auth.pyi +21 -0
  31. amsdal/cloud/services/actions/add_dependency.cpython-311-darwin.so +0 -0
  32. amsdal/cloud/services/actions/add_dependency.pyi +19 -0
  33. amsdal/cloud/services/actions/add_secret.cpython-311-darwin.so +0 -0
  34. amsdal/cloud/services/actions/add_secret.pyi +20 -0
  35. amsdal/cloud/services/actions/base.cpython-311-darwin.so +0 -0
  36. amsdal/cloud/services/actions/base.pyi +122 -0
  37. amsdal/cloud/services/actions/create_deploy.cpython-311-darwin.so +0 -0
  38. amsdal/cloud/services/actions/create_deploy.pyi +41 -0
  39. amsdal/cloud/services/actions/create_env.cpython-311-darwin.so +0 -0
  40. amsdal/cloud/services/actions/create_env.pyi +19 -0
  41. amsdal/cloud/services/actions/create_session.cpython-311-darwin.so +0 -0
  42. amsdal/cloud/services/actions/create_session.pyi +17 -0
  43. amsdal/cloud/services/actions/delete_allowlist_ip.cpython-311-darwin.so +0 -0
  44. amsdal/cloud/services/actions/delete_allowlist_ip.pyi +19 -0
  45. amsdal/cloud/services/actions/delete_basic_auth.cpython-311-darwin.so +0 -0
  46. amsdal/cloud/services/actions/delete_basic_auth.pyi +20 -0
  47. amsdal/cloud/services/actions/delete_dependency.cpython-311-darwin.so +0 -0
  48. amsdal/cloud/services/actions/delete_dependency.pyi +21 -0
  49. amsdal/cloud/services/actions/delete_env.cpython-311-darwin.so +0 -0
  50. amsdal/cloud/services/actions/delete_env.pyi +21 -0
  51. amsdal/cloud/services/actions/delete_secret.cpython-311-darwin.so +0 -0
  52. amsdal/cloud/services/actions/delete_secret.pyi +21 -0
  53. amsdal/cloud/services/actions/destroy_deploy.cpython-311-darwin.so +0 -0
  54. amsdal/cloud/services/actions/destroy_deploy.pyi +18 -0
  55. amsdal/cloud/services/actions/expose_db.cpython-311-darwin.so +0 -0
  56. amsdal/cloud/services/actions/expose_db.pyi +22 -0
  57. amsdal/cloud/services/actions/get_basic_auth_credentials.cpython-311-darwin.so +0 -0
  58. amsdal/cloud/services/actions/get_basic_auth_credentials.pyi +21 -0
  59. amsdal/cloud/services/actions/get_monitoring_info.cpython-311-darwin.so +0 -0
  60. amsdal/cloud/services/actions/get_monitoring_info.pyi +21 -0
  61. amsdal/cloud/services/actions/list_dependencies.cpython-311-darwin.so +0 -0
  62. amsdal/cloud/services/actions/list_dependencies.pyi +21 -0
  63. amsdal/cloud/services/actions/list_deploys.cpython-311-darwin.so +0 -0
  64. amsdal/cloud/services/actions/list_deploys.pyi +19 -0
  65. amsdal/cloud/services/actions/list_envs.cpython-311-darwin.so +0 -0
  66. amsdal/cloud/services/actions/list_envs.pyi +20 -0
  67. amsdal/cloud/services/actions/list_secrets.cpython-311-darwin.so +0 -0
  68. amsdal/cloud/services/actions/list_secrets.pyi +22 -0
  69. amsdal/cloud/services/actions/manager.cpython-311-darwin.so +0 -0
  70. amsdal/cloud/services/actions/manager.pyi +278 -0
  71. amsdal/cloud/services/actions/signup_action.cpython-311-darwin.so +0 -0
  72. amsdal/cloud/services/actions/signup_action.pyi +20 -0
  73. amsdal/cloud/services/actions/update_deploy.cpython-311-darwin.so +0 -0
  74. amsdal/cloud/services/actions/update_deploy.pyi +19 -0
  75. amsdal/cloud/services/auth/__init__.cpython-311-darwin.so +0 -0
  76. amsdal/cloud/services/auth/__init__.pyi +0 -0
  77. amsdal/cloud/services/auth/base.cpython-311-darwin.so +0 -0
  78. amsdal/cloud/services/auth/base.pyi +6 -0
  79. amsdal/cloud/services/auth/credentials.cpython-311-darwin.so +0 -0
  80. amsdal/cloud/services/auth/credentials.pyi +30 -0
  81. amsdal/cloud/services/auth/manager.cpython-311-darwin.so +0 -0
  82. amsdal/cloud/services/auth/manager.pyi +26 -0
  83. amsdal/cloud/services/auth/signup_service.cpython-311-darwin.so +0 -0
  84. amsdal/cloud/services/auth/signup_service.pyi +32 -0
  85. amsdal/cloud/services/auth/token.cpython-311-darwin.so +0 -0
  86. amsdal/cloud/services/auth/token.pyi +27 -0
  87. amsdal/configs/__init__.py +0 -0
  88. amsdal/configs/__init__.pyi +0 -0
  89. amsdal/configs/constants.py +33 -0
  90. amsdal/configs/constants.pyi +22 -0
  91. amsdal/configs/main.py +274 -0
  92. amsdal/configs/main.pyi +178 -0
  93. amsdal/context/__init__.py +0 -0
  94. amsdal/context/__init__.pyi +0 -0
  95. amsdal/context/manager.py +69 -0
  96. amsdal/context/manager.pyi +50 -0
  97. amsdal/contrib/__init__.cpython-311-darwin.so +0 -0
  98. amsdal/contrib/__init__.pyi +0 -0
  99. amsdal/contrib/app_config.py +7 -0
  100. amsdal/contrib/app_config.pyi +6 -0
  101. amsdal/contrib/auth/__init__.py +0 -0
  102. amsdal/contrib/auth/__init__.pyi +0 -0
  103. amsdal/contrib/auth/app.py +27 -0
  104. amsdal/contrib/auth/app.pyi +15 -0
  105. amsdal/contrib/auth/decorators/__init__.py +35 -0
  106. amsdal/contrib/auth/decorators/__init__.pyi +6 -0
  107. amsdal/contrib/auth/errors.py +7 -0
  108. amsdal/contrib/auth/errors.pyi +4 -0
  109. amsdal/contrib/auth/fixtures/basic_permissions.json +64 -0
  110. amsdal/contrib/auth/lifecycle/__init__.py +0 -0
  111. amsdal/contrib/auth/lifecycle/__init__.pyi +0 -0
  112. amsdal/contrib/auth/lifecycle/consumer.py +394 -0
  113. amsdal/contrib/auth/lifecycle/consumer.pyi +108 -0
  114. amsdal/contrib/auth/migrations/0000_initial.py +87 -0
  115. amsdal/contrib/auth/models/__init__.py +0 -0
  116. amsdal/contrib/auth/models/login_session.py +118 -0
  117. amsdal/contrib/auth/models/permission.py +23 -0
  118. amsdal/contrib/auth/models/user.py +106 -0
  119. amsdal/contrib/auth/settings.py +36 -0
  120. amsdal/contrib/auth/settings.pyi +26 -0
  121. amsdal/contrib/frontend_configs/__init__.py +0 -0
  122. amsdal/contrib/frontend_configs/__init__.pyi +0 -0
  123. amsdal/contrib/frontend_configs/app.py +24 -0
  124. amsdal/contrib/frontend_configs/app.pyi +19 -0
  125. amsdal/contrib/frontend_configs/constants.py +1 -0
  126. amsdal/contrib/frontend_configs/constants.pyi +1 -0
  127. amsdal/contrib/frontend_configs/conversion/__init__.py +5 -0
  128. amsdal/contrib/frontend_configs/conversion/__init__.pyi +3 -0
  129. amsdal/contrib/frontend_configs/conversion/convert.py +310 -0
  130. amsdal/contrib/frontend_configs/conversion/convert.pyi +22 -0
  131. amsdal/contrib/frontend_configs/lifecycle/__init__.py +0 -0
  132. amsdal/contrib/frontend_configs/lifecycle/__init__.pyi +0 -0
  133. amsdal/contrib/frontend_configs/lifecycle/consumer.py +306 -0
  134. amsdal/contrib/frontend_configs/lifecycle/consumer.pyi +98 -0
  135. amsdal/contrib/frontend_configs/migrations/0000_initial.py +227 -0
  136. amsdal/contrib/frontend_configs/migrations/0001_update_frontend_control_config.py +245 -0
  137. amsdal/contrib/frontend_configs/migrations/0002_add_button_and_invoke_actions.py +352 -0
  138. amsdal/contrib/frontend_configs/models/__init__.py +0 -0
  139. amsdal/contrib/frontend_configs/models/frontend_activator_config.py +22 -0
  140. amsdal/contrib/frontend_configs/models/frontend_config_async_validator.py +11 -0
  141. amsdal/contrib/frontend_configs/models/frontend_config_control_action.py +110 -0
  142. amsdal/contrib/frontend_configs/models/frontend_config_group_validator.py +21 -0
  143. amsdal/contrib/frontend_configs/models/frontend_config_option.py +12 -0
  144. amsdal/contrib/frontend_configs/models/frontend_config_skip_none_base.py +17 -0
  145. amsdal/contrib/frontend_configs/models/frontend_config_slider_option.py +13 -0
  146. amsdal/contrib/frontend_configs/models/frontend_config_text_mask.py +14 -0
  147. amsdal/contrib/frontend_configs/models/frontend_config_validator.py +28 -0
  148. amsdal/contrib/frontend_configs/models/frontend_control_config.py +108 -0
  149. amsdal/contrib/frontend_configs/models/frontend_model_config.py +14 -0
  150. amsdal/contrib/frontend_configs/utils.py +29 -0
  151. amsdal/contrib/frontend_configs/utils.pyi +17 -0
  152. amsdal/errors.py +31 -0
  153. amsdal/errors.pyi +12 -0
  154. amsdal/fixtures/__init__.cpython-311-darwin.so +0 -0
  155. amsdal/fixtures/__init__.pyi +0 -0
  156. amsdal/fixtures/manager.cpython-311-darwin.so +0 -0
  157. amsdal/fixtures/manager.pyi +170 -0
  158. amsdal/fixtures/utils.cpython-311-darwin.so +0 -0
  159. amsdal/fixtures/utils.pyi +9 -0
  160. amsdal/manager.cpython-311-darwin.so +0 -0
  161. amsdal/manager.pyi +265 -0
  162. amsdal/mixins/__init__.cpython-311-darwin.so +0 -0
  163. amsdal/mixins/__init__.pyi +0 -0
  164. amsdal/mixins/class_versions_mixin.cpython-311-darwin.so +0 -0
  165. amsdal/mixins/class_versions_mixin.pyi +12 -0
  166. amsdal/models/__init__.py +19 -0
  167. amsdal/models/core/__init__.py +0 -0
  168. amsdal/models/core/class_object.py +38 -0
  169. amsdal/models/core/class_property.py +26 -0
  170. amsdal/models/core/file.py +243 -0
  171. amsdal/models/core/fixture.py +25 -0
  172. amsdal/models/core/option.py +11 -0
  173. amsdal/models/core/storage_metadata.py +15 -0
  174. amsdal/models/core/validator.py +12 -0
  175. amsdal/models/mixins.py +31 -0
  176. amsdal/models/types/__init__.py +0 -0
  177. amsdal/models/types/object.py +26 -0
  178. amsdal/py.typed +0 -0
  179. amsdal/queryset/__init__.py +21 -0
  180. amsdal/queryset/__init__.pyi +6 -0
  181. amsdal/schemas/__init__.py +0 -0
  182. amsdal/schemas/__init__.pyi +0 -0
  183. amsdal/schemas/core/class_object/model.json +51 -0
  184. amsdal/schemas/core/class_object/properties/display_name.py +9 -0
  185. amsdal/schemas/core/class_property/model.json +41 -0
  186. amsdal/schemas/core/file/hooks/pre_create.py +24 -0
  187. amsdal/schemas/core/file/hooks/pre_update.py +24 -0
  188. amsdal/schemas/core/file/model.json +23 -0
  189. amsdal/schemas/core/file/properties/from_file.py +34 -0
  190. amsdal/schemas/core/file/properties/mimetype.py +13 -0
  191. amsdal/schemas/core/file/properties/str.py +6 -0
  192. amsdal/schemas/core/file/properties/to_file.py +24 -0
  193. amsdal/schemas/core/file/properties/validate_data.py +31 -0
  194. amsdal/schemas/core/fixture/model.json +35 -0
  195. amsdal/schemas/core/option/model.json +19 -0
  196. amsdal/schemas/core/storage_metadata/model.json +52 -0
  197. amsdal/schemas/core/validator/model.json +19 -0
  198. amsdal/schemas/interfaces.py +25 -0
  199. amsdal/schemas/interfaces.pyi +20 -0
  200. amsdal/schemas/manager.cpython-311-darwin.so +0 -0
  201. amsdal/schemas/manager.py +0 -0
  202. amsdal/schemas/manager.pyi +0 -0
  203. amsdal/schemas/mixins/__init__.py +0 -0
  204. amsdal/schemas/mixins/__init__.pyi +0 -0
  205. amsdal/schemas/mixins/check_dependencies_mixin.py +130 -0
  206. amsdal/schemas/mixins/check_dependencies_mixin.pyi +45 -0
  207. amsdal/schemas/mixins/verify_schemas_mixin.py +96 -0
  208. amsdal/schemas/mixins/verify_schemas_mixin.pyi +33 -0
  209. amsdal/schemas/repository.py +84 -0
  210. amsdal/schemas/repository.pyi +22 -0
  211. amsdal/schemas/types/anything/model.json +7 -0
  212. amsdal/schemas/types/array/model.json +7 -0
  213. amsdal/schemas/types/binary/model.json +7 -0
  214. amsdal/schemas/types/boolean/model.json +17 -0
  215. amsdal/schemas/types/date/model.json +7 -0
  216. amsdal/schemas/types/datetime/model.json +7 -0
  217. amsdal/schemas/types/dictionary/model.json +8 -0
  218. amsdal/schemas/types/number/model.json +8 -0
  219. amsdal/schemas/types/object/model.json +53 -0
  220. amsdal/schemas/types/string/model.json +8 -0
  221. amsdal/schemas/utils.py +16 -0
  222. amsdal/schemas/utils.pyi +10 -0
  223. amsdal/services/__init__.py +11 -0
  224. amsdal/services/__init__.pyi +4 -0
  225. amsdal/services/external_connections.py +262 -0
  226. amsdal/services/external_connections.pyi +190 -0
  227. amsdal/services/external_model_generator.py +350 -0
  228. amsdal/services/external_model_generator.pyi +134 -0
  229. amsdal/services/transaction_execution.cpython-311-darwin.so +0 -0
  230. amsdal/services/transaction_execution.pyi +93 -0
  231. amsdal/storages/__init__.py +20 -0
  232. amsdal/storages/__init__.pyi +8 -0
  233. amsdal/storages/file_system.py +214 -0
  234. amsdal/storages/file_system.pyi +36 -0
  235. amsdal/transactions/__init__.py +13 -0
  236. amsdal/transactions/__init__.pyi +4 -0
  237. amsdal/utils/__init__.py +0 -0
  238. amsdal/utils/__init__.pyi +0 -0
  239. amsdal/utils/contrib_paths.py +23 -0
  240. amsdal/utils/contrib_paths.pyi +14 -0
  241. amsdal/utils/rollback/__init__.py +440 -0
  242. amsdal/utils/rollback/__init__.pyi +38 -0
  243. amsdal/utils/tests/__init__.py +0 -0
  244. amsdal/utils/tests/enums.py +16 -0
  245. amsdal/utils/tests/factories.py +49 -0
  246. amsdal/utils/tests/helpers.py +331 -0
  247. amsdal/utils/tests/migrations.py +157 -0
  248. amsdal-0.5.23.dist-info/METADATA +373 -0
  249. amsdal-0.5.23.dist-info/RECORD +252 -0
  250. amsdal-0.5.23.dist-info/WHEEL +5 -0
  251. amsdal-0.5.23.dist-info/licenses/LICENSE.txt +107 -0
  252. amsdal-0.5.23.dist-info/top_level.txt +1 -0
@@ -0,0 +1,352 @@
1
+ from amsdal_models.migration import migrations
2
+ from amsdal_utils.models.enums import ModuleType
3
+
4
+
5
+ class Migration(migrations.Migration):
6
+ operations: list[migrations.Operation] = [
7
+ migrations.CreateClass(
8
+ module_type=ModuleType.CONTRIB,
9
+ class_name="UpdateValueAction",
10
+ new_schema={
11
+ "title": "UpdateValueAction",
12
+ "type": "FrontendConfigSkipNoneBase",
13
+ "required": ["type", "field_id", "value"],
14
+ "properties": {
15
+ "type": {
16
+ "type": "string",
17
+ "options": [{"key": "update_value", "value": "update_value"}],
18
+ "title": "Type",
19
+ "enum": ["update_value"],
20
+ },
21
+ "field_id": {"type": "string", "title": "Field ID"},
22
+ "value": {"type": "anything", "title": "Value"},
23
+ },
24
+ "meta_class": "TypeMeta",
25
+ "custom_code": "from typing import Any\n\nfrom amsdal.contrib.frontend_configs.models.frontend_config_skip_none_base import *\n\n\ndef model_dump(self, **kwargs: Any) -> dict[str, Any]:\n kwargs['exclude_none'] = True\n return super().model_dump(**kwargs)\n\ndef model_dump_json(self, **kwargs: Any) -> str:\n kwargs['exclude_none'] = True\n return super().model_dump_json(**kwargs)",
26
+ "storage_metadata": {"table_name": "UpdateValueAction", "db_fields": {}, "foreign_keys": {}},
27
+ },
28
+ ),
29
+ migrations.CreateClass(
30
+ module_type=ModuleType.CONTRIB,
31
+ class_name="InvokeAction",
32
+ new_schema={
33
+ "title": "InvokeAction",
34
+ "type": "FrontendConfigSkipNoneBase",
35
+ "required": ["type", "method", "url"],
36
+ "properties": {
37
+ "type": {
38
+ "type": "string",
39
+ "options": [{"key": "invoke", "value": "invoke"}],
40
+ "title": "Type",
41
+ "enum": ["invoke"],
42
+ },
43
+ "method": {
44
+ "type": "string",
45
+ "title": "HTTP Method",
46
+ "enum": ["GET", "POST", "PUT", "PATCH", "DELETE"],
47
+ "options": [
48
+ {"key": "GET", "value": "GET"},
49
+ {"key": "POST", "value": "POST"},
50
+ {"key": "PUT", "value": "PUT"},
51
+ {"key": "PATCH", "value": "PATCH"},
52
+ {"key": "DELETE", "value": "DELETE"},
53
+ ],
54
+ },
55
+ "url": {"type": "string", "title": "URL"},
56
+ "headers": {"type": "dict", "title": "Headers"},
57
+ "body": {"type": "dict", "title": "Body"},
58
+ "onSuccess": {
59
+ "type": "array",
60
+ "items": {"type": "anything"},
61
+ "title": "On Success Actions",
62
+ },
63
+ "onError": {
64
+ "type": "array",
65
+ "items": {"type": "anything"},
66
+ "title": "On Error Actions",
67
+ },
68
+ },
69
+ "meta_class": "TypeMeta",
70
+ "custom_code": "from typing import Any\n\nfrom amsdal.contrib.frontend_configs.models.frontend_config_skip_none_base import *\n\n\ndef model_dump(self, **kwargs: Any) -> dict[str, Any]:\n kwargs['exclude_none'] = True\n return super().model_dump(**kwargs)\n\ndef model_dump_json(self, **kwargs: Any) -> str:\n kwargs['exclude_none'] = True\n return super().model_dump_json(**kwargs)",
71
+ "storage_metadata": {"table_name": "InvokeAction", "db_fields": {}, "foreign_keys": {}},
72
+ },
73
+ ),
74
+ migrations.CreateClass(
75
+ module_type=ModuleType.CONTRIB,
76
+ class_name="ChangeContextAction",
77
+ new_schema={
78
+ "title": "ChangeContextAction",
79
+ "type": "FrontendConfigSkipNoneBase",
80
+ "required": ["type", "context"],
81
+ "properties": {
82
+ "type": {
83
+ "type": "string",
84
+ "options": [{"key": "change_context", "value": "change_context"}],
85
+ "title": "Type",
86
+ "enum": ["change_context"],
87
+ },
88
+ "context": {"type": "dict", "title": "Context"},
89
+ },
90
+ "meta_class": "TypeMeta",
91
+ "custom_code": "from typing import Any\n\nfrom amsdal.contrib.frontend_configs.models.frontend_config_skip_none_base import *\n\n\ndef model_dump(self, **kwargs: Any) -> dict[str, Any]:\n kwargs['exclude_none'] = True\n return super().model_dump(**kwargs)\n\ndef model_dump_json(self, **kwargs: Any) -> str:\n kwargs['exclude_none'] = True\n return super().model_dump_json(**kwargs)",
92
+ "storage_metadata": {"table_name": "ChangeContextAction", "db_fields": {}, "foreign_keys": {}},
93
+ },
94
+ ),
95
+ migrations.CreateClass(
96
+ module_type=ModuleType.CONTRIB,
97
+ class_name="SaveAction",
98
+ new_schema={
99
+ "title": "SaveAction",
100
+ "type": "FrontendConfigSkipNoneBase",
101
+ "required": ["type"],
102
+ "properties": {
103
+ "type": {
104
+ "type": "string",
105
+ "options": [{"key": "save", "value": "save"}],
106
+ "title": "Type",
107
+ "enum": ["save"],
108
+ },
109
+ },
110
+ "meta_class": "TypeMeta",
111
+ "custom_code": "from typing import Any\n\nfrom amsdal.contrib.frontend_configs.models.frontend_config_skip_none_base import *\n\n\ndef model_dump(self, **kwargs: Any) -> dict[str, Any]:\n kwargs['exclude_none'] = True\n return super().model_dump(**kwargs)\n\ndef model_dump_json(self, **kwargs: Any) -> str:\n kwargs['exclude_none'] = True\n return super().model_dump_json(**kwargs)",
112
+ "storage_metadata": {"table_name": "SaveAction", "db_fields": {}, "foreign_keys": {}},
113
+ },
114
+ ),
115
+ migrations.UpdateClass(
116
+ module_type=ModuleType.CONTRIB,
117
+ class_name="FrontendControlConfig",
118
+ old_schema={
119
+ "title": "FrontendControlConfig",
120
+ "type": "FrontendConfigSkipNoneBase",
121
+ "required": ["type", "name"],
122
+ "properties": {
123
+ "type": {
124
+ "type": "string",
125
+ "options": [
126
+ {"key": "Bytes", "value": "Bytes"},
127
+ {"key": "array", "value": "array"},
128
+ {"key": "checkbox", "value": "checkbox"},
129
+ {"key": "date", "value": "date"},
130
+ {"key": "dateTriplet", "value": "dateTriplet"},
131
+ {"key": "datetime", "value": "datetime"},
132
+ {"key": "dict", "value": "dict"},
133
+ {"key": "dropzone", "value": "dropzone"},
134
+ {"key": "email", "value": "email"},
135
+ {"key": "file", "value": "file"},
136
+ {"key": "group", "value": "group"},
137
+ {"key": "group_switch", "value": "group_switch"},
138
+ {"key": "group_toggle", "value": "group_toggle"},
139
+ {"key": "info-group", "value": "info-group"},
140
+ {"key": "infoscreen", "value": "infoscreen"},
141
+ {"key": "multiselect", "value": "multiselect"},
142
+ {"key": "number", "value": "number"},
143
+ {"key": "number-operations", "value": "number-operations"},
144
+ {"key": "number-slider", "value": "number-slider"},
145
+ {"key": "number_equals", "value": "number_equals"},
146
+ {"key": "number_initial", "value": "number_initial"},
147
+ {"key": "number_minus", "value": "number_minus"},
148
+ {"key": "number_plus", "value": "number_plus"},
149
+ {"key": "object", "value": "object"},
150
+ {"key": "object_group", "value": "object_group"},
151
+ {"key": "object_latest", "value": "object_latest"},
152
+ {"key": "password", "value": "password"},
153
+ {"key": "phone", "value": "phone"},
154
+ {"key": "radio", "value": "radio"},
155
+ {"key": "select", "value": "select"},
156
+ {"key": "text", "value": "text"},
157
+ {"key": "textarea", "value": "textarea"},
158
+ {"key": "time", "value": "time"},
159
+ {"key": "toggle", "value": "toggle"},
160
+ {"key": "sections", "value": "sections"},
161
+ {"key": "section", "value": "section"},
162
+ ],
163
+ "title": "Type",
164
+ "enum": [
165
+ "Bytes",
166
+ "array",
167
+ "checkbox",
168
+ "date",
169
+ "dateTriplet",
170
+ "datetime",
171
+ "dict",
172
+ "dropzone",
173
+ "email",
174
+ "file",
175
+ "group",
176
+ "group_switch",
177
+ "group_toggle",
178
+ "info-group",
179
+ "infoscreen",
180
+ "multiselect",
181
+ "number",
182
+ "number-operations",
183
+ "number-slider",
184
+ "number_equals",
185
+ "number_initial",
186
+ "number_minus",
187
+ "number_plus",
188
+ "object",
189
+ "object_group",
190
+ "object_latest",
191
+ "password",
192
+ "phone",
193
+ "radio",
194
+ "select",
195
+ "text",
196
+ "textarea",
197
+ "time",
198
+ "toggle",
199
+ "sections",
200
+ "section",
201
+ ],
202
+ },
203
+ "name": {"type": "string", "title": "Name"},
204
+ "actions": {
205
+ "type": "array",
206
+ "items": {"type": "FrontendConfigControlAction", "title": "FrontendConfigControlAction"},
207
+ "title": "Actions",
208
+ },
209
+ },
210
+ "meta_class": "TypeMeta",
211
+ "storage_metadata": {"table_name": "FrontendControlConfig", "db_fields": {}, "foreign_keys": {}},
212
+ },
213
+ new_schema={
214
+ "title": "FrontendControlConfig",
215
+ "type": "FrontendConfigSkipNoneBase",
216
+ "required": ["type", "name"],
217
+ "properties": {
218
+ "type": {
219
+ "type": "string",
220
+ "options": [
221
+ {"key": "Bytes", "value": "Bytes"},
222
+ {"key": "array", "value": "array"},
223
+ {"key": "button", "value": "button"},
224
+ {"key": "chat", "value": "chat"},
225
+ {"key": "checkbox", "value": "checkbox"},
226
+ {"key": "date", "value": "date"},
227
+ {"key": "dateTriplet", "value": "dateTriplet"},
228
+ {"key": "datetime", "value": "datetime"},
229
+ {"key": "dict", "value": "dict"},
230
+ {"key": "dropzone", "value": "dropzone"},
231
+ {"key": "email", "value": "email"},
232
+ {"key": "file", "value": "file"},
233
+ {"key": "group", "value": "group"},
234
+ {"key": "group_switch", "value": "group_switch"},
235
+ {"key": "group_toggle", "value": "group_toggle"},
236
+ {"key": "info-group", "value": "info-group"},
237
+ {"key": "infoscreen", "value": "infoscreen"},
238
+ {"key": "multiselect", "value": "multiselect"},
239
+ {"key": "number", "value": "number"},
240
+ {"key": "number-operations", "value": "number-operations"},
241
+ {"key": "number-slider", "value": "number-slider"},
242
+ {"key": "number_equals", "value": "number_equals"},
243
+ {"key": "number_initial", "value": "number_initial"},
244
+ {"key": "number_minus", "value": "number_minus"},
245
+ {"key": "number_plus", "value": "number_plus"},
246
+ {"key": "object", "value": "object"},
247
+ {"key": "object_group", "value": "object_group"},
248
+ {"key": "object_latest", "value": "object_latest"},
249
+ {"key": "password", "value": "password"},
250
+ {"key": "phone", "value": "phone"},
251
+ {"key": "radio", "value": "radio"},
252
+ {"key": "select", "value": "select"},
253
+ {"key": "text", "value": "text"},
254
+ {"key": "textarea", "value": "textarea"},
255
+ {"key": "time", "value": "time"},
256
+ {"key": "toggle", "value": "toggle"},
257
+ {"key": "sections", "value": "sections"},
258
+ {"key": "section", "value": "section"},
259
+ ],
260
+ "title": "Type",
261
+ "enum": [
262
+ "Bytes",
263
+ "array",
264
+ "button",
265
+ "chat",
266
+ "checkbox",
267
+ "date",
268
+ "dateTriplet",
269
+ "datetime",
270
+ "dict",
271
+ "dropzone",
272
+ "email",
273
+ "file",
274
+ "group",
275
+ "group_switch",
276
+ "group_toggle",
277
+ "info-group",
278
+ "infoscreen",
279
+ "multiselect",
280
+ "number",
281
+ "number-operations",
282
+ "number-slider",
283
+ "number_equals",
284
+ "number_initial",
285
+ "number_minus",
286
+ "number_plus",
287
+ "object",
288
+ "object_group",
289
+ "object_latest",
290
+ "password",
291
+ "phone",
292
+ "radio",
293
+ "select",
294
+ "text",
295
+ "textarea",
296
+ "time",
297
+ "toggle",
298
+ "sections",
299
+ "section",
300
+ ],
301
+ },
302
+ "id": {"type": "string", "title": "ID"},
303
+ "name": {"type": "string", "title": "Name"},
304
+ "label": {"type": "string", "title": "Label"},
305
+ "required": {"type": "boolean", "title": "Required"},
306
+ "hideLabel": {"type": "boolean", "title": "Hide Label"},
307
+ "actions": {
308
+ "type": "array",
309
+ "items": {"type": "anything"},
310
+ "title": "Actions",
311
+ },
312
+ "validators": {
313
+ "type": "array",
314
+ "items": {"type": "FrontendConfigValidator", "title": "FrontendConfigValidator"},
315
+ "title": "Validators",
316
+ },
317
+ "asyncValidators": {
318
+ "type": "array",
319
+ "items": {"type": "FrontendConfigAsyncValidator", "title": "FrontendConfigAsyncValidator"},
320
+ "title": "Async Validators",
321
+ },
322
+ "activators": {
323
+ "type": "array",
324
+ "items": {"type": "FrontendActivatorConfig", "title": "FrontendActivatorConfig"},
325
+ "title": "Activators",
326
+ },
327
+ "additionalText": {"type": "string", "title": "Additional Text"},
328
+ "value": {"type": "anything", "title": "Value"},
329
+ "placeholder": {"type": "string", "title": "Placeholder"},
330
+ "options": {
331
+ "type": "array",
332
+ "items": {"type": "FrontendConfigOption", "title": "FrontendConfigOption"},
333
+ "title": "Options",
334
+ },
335
+ "mask": {"type": "FrontendConfigTextMask", "title": "Mask"},
336
+ "controls": {
337
+ "type": "array",
338
+ "items": {"type": "FrontendControlConfig", "title": "FrontendControlConfig"},
339
+ "title": "Controls",
340
+ },
341
+ "showSearch": {"type": "boolean", "title": "Show Search"},
342
+ "sliderOptions": {"type": "FrontendConfigSliderOption", "title": "Slider Option"},
343
+ "customLabel": {"type": "array", "items": {"type": "string"}, "title": "Custom Label"},
344
+ "control": {"type": "FrontendControlConfig", "title": "Control"},
345
+ "entityType": {"type": "string", "title": "Entity Type"},
346
+ "condition": {"type": "Condition", "title": "Condition"},
347
+ },
348
+ "meta_class": "TypeMeta",
349
+ "storage_metadata": {"table_name": "FrontendControlConfig", "db_fields": {}, "foreign_keys": {}},
350
+ },
351
+ ),
352
+ ]
File without changes
@@ -0,0 +1,22 @@
1
+ from typing import Any
2
+ from typing import ClassVar
3
+
4
+ from amsdal_models.builder.validators.options_validators import validate_options
5
+ from amsdal_utils.models.enums import ModuleType
6
+ from pydantic.fields import Field
7
+ from pydantic.functional_validators import field_validator
8
+
9
+ from amsdal.contrib.frontend_configs.models.frontend_config_group_validator import * # noqa: F403
10
+
11
+
12
+ class FrontendActivatorConfig(FrontendConfigGroupValidator): # noqa: F405
13
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
14
+ mainControl: str | None = Field(None, title='Main Control') # noqa: N815
15
+ dependentControls: list[str] | None = Field(None, title='Dependent Controls') # noqa: N815
16
+ condition: str | None = Field(None, title='Condition')
17
+ value: Any | None = Field(None, title='Value')
18
+
19
+ @field_validator('condition')
20
+ @classmethod
21
+ def validate_value_in_options_condition(cls: type, value: Any) -> Any:
22
+ return validate_options(value, options=['eq', 'exist', 'gt', 'gte', 'lt', 'lte', 'neq'])
@@ -0,0 +1,11 @@
1
+ from typing import ClassVar
2
+
3
+ from amsdal_utils.models.enums import ModuleType
4
+ from pydantic.fields import Field
5
+
6
+ from amsdal.contrib.frontend_configs.models.frontend_config_skip_none_base import * # noqa: F403
7
+
8
+
9
+ class FrontendConfigAsyncValidator(FrontendConfigSkipNoneBase): # noqa: F405
10
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
11
+ endpoint: str | None = Field(None, title='Endpoint')
@@ -0,0 +1,110 @@
1
+ from typing import Any
2
+ from typing import ClassVar
3
+ from typing import Literal
4
+
5
+ from amsdal_models.builder.validators.options_validators import validate_options
6
+ from amsdal_utils.models.enums import ModuleType
7
+ from pydantic import Field
8
+ from pydantic import field_validator
9
+
10
+ from amsdal.contrib.frontend_configs.models.frontend_config_skip_none_base import * # noqa: F403
11
+
12
+ __all__ = [
13
+ 'ActionType',
14
+ 'ChangeContextAction',
15
+ 'FrontendConfigControlAction',
16
+ 'InvokeAction',
17
+ 'SaveAction',
18
+ 'UpdateValueAction',
19
+ ]
20
+
21
+
22
+ class FrontendConfigControlAction(FrontendConfigSkipNoneBase): # noqa: F405
23
+ """Navigation action for form controls (backward compatible)."""
24
+
25
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
26
+ action: str = Field(title='Action')
27
+ text: str = Field(title='Text')
28
+ type: str = Field(title='Type')
29
+ dataLayerEvent: str | None = Field(None, title='Data Layer Event') # noqa: N815
30
+ activator: str | None = Field(None, title='Activator')
31
+ icon: str | None = Field(None, title='Icon')
32
+
33
+ @field_validator('type')
34
+ @classmethod
35
+ def validate_value_in_options_type(cls: type, value: Any) -> Any: # type: ignore # noqa: A003
36
+ return validate_options(value, options=['action-button', 'arrow-next', 'arrow-prev', 'text-next', 'text-prev'])
37
+
38
+ @field_validator('action', mode='after')
39
+ @classmethod
40
+ def validate_action(cls, v: str) -> str:
41
+ """
42
+ Validates the action string to ensure it is one of the allowed values.
43
+
44
+ This method checks if the action string starts with 'navigate::' or is one of the predefined
45
+ actions. If the action string is invalid, it raises a ValueError.
46
+
47
+ Args:
48
+ cls: The class this method is attached to.
49
+ v (str): The action string to validate.
50
+
51
+ Returns:
52
+ str: The validated action string.
53
+
54
+ Raises:
55
+ ValueError: If the action string is not valid.
56
+ """
57
+ if not v.startswith('navigate::') and v not in [
58
+ 'goPrev',
59
+ 'goNext',
60
+ 'goNextWithSubmit',
61
+ 'submit',
62
+ 'submitWithDataLayer',
63
+ ]:
64
+ msg = 'Action must be one of: goPrev, goNext, goNextWithSubmit, submit, submitWithDataLayer, navigate::{string}' # noqa: E501
65
+ raise ValueError(msg)
66
+ return v
67
+
68
+
69
+ class UpdateValueAction(FrontendConfigSkipNoneBase): # noqa: F405
70
+ """Action to update a field value (used in onSuccess callbacks)."""
71
+
72
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
73
+ type: Literal['update_value'] = Field(title='Type')
74
+ field_id: str = Field(title='Field ID')
75
+ value: Any = Field(title='Value')
76
+
77
+
78
+ class InvokeAction(FrontendConfigSkipNoneBase): # noqa: F405
79
+ """Action to invoke an API endpoint."""
80
+
81
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
82
+ type: Literal['invoke'] = Field(title='Type')
83
+ method: Literal['GET', 'POST', 'PUT', 'PATCH', 'DELETE'] = Field(title='HTTP Method')
84
+ url: str = Field(title='URL')
85
+ headers: dict[str, str] | None = Field(None, title='Headers')
86
+ body: dict[str, Any] | None = Field(None, title='Body')
87
+ onSuccess: list['ActionType'] | None = Field(None, title='On Success Actions') # noqa: N815
88
+ onError: list['ActionType'] | None = Field(None, title='On Error Actions') # noqa: N815
89
+
90
+
91
+ class ChangeContextAction(FrontendConfigSkipNoneBase): # noqa: F405
92
+ """Action to change the context."""
93
+
94
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
95
+ type: Literal['change_context'] = Field(title='Type')
96
+ context: dict[str, Any] = Field(title='Context')
97
+
98
+
99
+ class SaveAction(FrontendConfigSkipNoneBase): # noqa: F405
100
+ """Action to save data."""
101
+
102
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
103
+ type: Literal['save'] = Field(title='Type')
104
+
105
+
106
+ # Union type for all action types - discriminated by 'type' field
107
+ ActionType = FrontendConfigControlAction | InvokeAction | UpdateValueAction | ChangeContextAction | SaveAction
108
+
109
+ # Rebuild model to handle forward references
110
+ InvokeAction.model_rebuild()
@@ -0,0 +1,21 @@
1
+ from typing import Any
2
+ from typing import ClassVar
3
+
4
+ from amsdal_models.builder.validators.options_validators import validate_options
5
+ from amsdal_utils.models.enums import ModuleType
6
+ from pydantic.fields import Field
7
+ from pydantic.functional_validators import field_validator
8
+
9
+ from amsdal.contrib.frontend_configs.models.frontend_config_skip_none_base import * # noqa: F403
10
+
11
+
12
+ class FrontendConfigGroupValidator(FrontendConfigSkipNoneBase): # noqa: F405
13
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
14
+ mainControl: str | None = Field(None, title='Main Control') # noqa: N815
15
+ dependentControls: list[str] | None = Field(None, title='Dependent Controls') # noqa: N815
16
+ condition: str | None = Field(None, title='Condition')
17
+
18
+ @field_validator('condition')
19
+ @classmethod
20
+ def validate_value_in_options_condition(cls: type, value: Any) -> Any:
21
+ return validate_options(value, options=['eq', 'exist', 'gt', 'gte', 'lt', 'lte', 'neq'])
@@ -0,0 +1,12 @@
1
+ from typing import ClassVar
2
+
3
+ from amsdal_utils.models.enums import ModuleType
4
+ from pydantic.fields import Field
5
+
6
+ from amsdal.contrib.frontend_configs.models.frontend_config_skip_none_base import * # noqa: F403
7
+
8
+
9
+ class FrontendConfigOption(FrontendConfigSkipNoneBase): # noqa: F405
10
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
11
+ label: str | None = Field(None, title='Label')
12
+ value: str | None = Field(None, title='Value')
@@ -0,0 +1,17 @@
1
+ from typing import Any
2
+ from typing import ClassVar
3
+
4
+ from amsdal_models.classes.model import TypeModel
5
+ from amsdal_utils.models.enums import ModuleType
6
+
7
+
8
+ class FrontendConfigSkipNoneBase(TypeModel):
9
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
10
+
11
+ def model_dump(self, **kwargs: Any) -> dict[str, Any]:
12
+ kwargs['exclude_none'] = True
13
+ return super().model_dump(**kwargs)
14
+
15
+ def model_dump_json(self, **kwargs: Any) -> str:
16
+ kwargs['exclude_none'] = True
17
+ return super().model_dump_json(**kwargs)
@@ -0,0 +1,13 @@
1
+ from typing import ClassVar
2
+
3
+ from amsdal_utils.models.enums import ModuleType
4
+ from pydantic.fields import Field
5
+
6
+ from amsdal.contrib.frontend_configs.models.frontend_config_skip_none_base import * # noqa: F403
7
+
8
+
9
+ class FrontendConfigSliderOption(FrontendConfigSkipNoneBase): # noqa: F405
10
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
11
+ min: float | None = Field(None, title='Minimum')
12
+ max: float | None = Field(None, title='Maximum')
13
+ range: bool | None = Field(None, title='Range')
@@ -0,0 +1,14 @@
1
+ from typing import ClassVar
2
+
3
+ from amsdal_utils.models.enums import ModuleType
4
+ from pydantic.fields import Field
5
+
6
+ from amsdal.contrib.frontend_configs.models.frontend_config_skip_none_base import * # noqa: F403
7
+
8
+
9
+ class FrontendConfigTextMask(FrontendConfigSkipNoneBase): # noqa: F405
10
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
11
+ mask_string: str = Field(title='Mask String')
12
+ prefix: str | None = Field(None, title='Prefix')
13
+ suffix: str | None = Field(None, title='Suffix')
14
+ thousands_separator: str | None = Field(None, title='Thousands Separator')
@@ -0,0 +1,28 @@
1
+ from typing import Any
2
+ from typing import ClassVar
3
+
4
+ from amsdal_models.builder.validators.options_validators import validate_options
5
+ from amsdal_utils.models.enums import ModuleType
6
+ from pydantic.fields import Field
7
+ from pydantic.functional_validators import field_validator
8
+
9
+ from amsdal.contrib.frontend_configs.models.frontend_config_group_validator import * # noqa: F403
10
+
11
+
12
+ class FrontendConfigValidator(FrontendConfigGroupValidator): # noqa: F405
13
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
14
+ mainControl: str | None = Field(None, title='Main Control') # noqa: N815
15
+ dependentControls: list[str] | None = Field(None, title='Dependent Controls') # noqa: N815
16
+ condition: str | None = Field(None, title='Condition')
17
+ function: str | None = Field(None, title='Function')
18
+ value: str | None = Field(None, title='Value')
19
+
20
+ @field_validator('condition')
21
+ @classmethod
22
+ def validate_value_in_options_condition(cls: type, value: Any) -> Any:
23
+ return validate_options(value, options=['eq', 'exist', 'gt', 'gte', 'lt', 'lte', 'neq'])
24
+
25
+ @field_validator('function')
26
+ @classmethod
27
+ def validate_value_in_options_function(cls: type, value: Any) -> Any:
28
+ return validate_options(value, options=['max', 'maxLength', 'min', 'minLength', 'pattern', 'required'])