amsdal 0.3.3__cp311-cp311-macosx_10_9_universal2.whl → 0.5.29__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.
Files changed (244) hide show
  1. amsdal/Third-Party Materials - AMSDAL Dependencies - License Notices.md +56 -2
  2. amsdal/__about__.py +1 -1
  3. amsdal/__init__.py +20 -0
  4. amsdal/__init__.pyi +9 -0
  5. amsdal/__migrations__/0000_initial.py +23 -190
  6. amsdal/__migrations__/0001_create_class_file.py +61 -0
  7. amsdal/__migrations__/0002_create_class_file.py +109 -0
  8. amsdal/__migrations__/0003_update_class_file.py +91 -0
  9. amsdal/__migrations__/0004_update_class_file.py +45 -0
  10. amsdal/cloud/__init__.cpython-311-darwin.so +0 -0
  11. amsdal/cloud/client.cpython-311-darwin.so +0 -0
  12. amsdal/cloud/constants.cpython-311-darwin.so +0 -0
  13. amsdal/cloud/enums.cpython-311-darwin.so +0 -0
  14. amsdal/cloud/models/__init__.cpython-311-darwin.so +0 -0
  15. amsdal/cloud/models/base.cpython-311-darwin.so +0 -0
  16. amsdal/cloud/services/__init__.cpython-311-darwin.so +0 -0
  17. amsdal/cloud/services/actions/__init__.cpython-311-darwin.so +0 -0
  18. amsdal/cloud/services/actions/add_allowlist_ip.cpython-311-darwin.so +0 -0
  19. amsdal/cloud/services/actions/add_basic_auth.cpython-311-darwin.so +0 -0
  20. amsdal/cloud/services/actions/add_dependency.cpython-311-darwin.so +0 -0
  21. amsdal/cloud/services/actions/add_secret.cpython-311-darwin.so +0 -0
  22. amsdal/cloud/services/actions/base.cpython-311-darwin.so +0 -0
  23. amsdal/cloud/services/actions/create_deploy.cpython-311-darwin.so +0 -0
  24. amsdal/cloud/services/actions/create_env.cpython-311-darwin.so +0 -0
  25. amsdal/cloud/services/actions/create_session.cpython-311-darwin.so +0 -0
  26. amsdal/cloud/services/actions/delete_allowlist_ip.cpython-311-darwin.so +0 -0
  27. amsdal/cloud/services/actions/delete_basic_auth.cpython-311-darwin.so +0 -0
  28. amsdal/cloud/services/actions/delete_dependency.cpython-311-darwin.so +0 -0
  29. amsdal/cloud/services/actions/delete_env.cpython-311-darwin.so +0 -0
  30. amsdal/cloud/services/actions/delete_secret.cpython-311-darwin.so +0 -0
  31. amsdal/cloud/services/actions/destroy_deploy.cpython-311-darwin.so +0 -0
  32. amsdal/cloud/services/actions/expose_db.cpython-311-darwin.so +0 -0
  33. amsdal/cloud/services/actions/get_basic_auth_credentials.cpython-311-darwin.so +0 -0
  34. amsdal/cloud/services/actions/get_monitoring_info.cpython-311-darwin.so +0 -0
  35. amsdal/cloud/services/actions/list_dependencies.cpython-311-darwin.so +0 -0
  36. amsdal/cloud/services/actions/list_deploys.cpython-311-darwin.so +0 -0
  37. amsdal/cloud/services/actions/list_envs.cpython-311-darwin.so +0 -0
  38. amsdal/cloud/services/actions/list_secrets.cpython-311-darwin.so +0 -0
  39. amsdal/cloud/services/actions/manager.cpython-311-darwin.so +0 -0
  40. amsdal/cloud/services/actions/signup_action.cpython-311-darwin.so +0 -0
  41. amsdal/cloud/services/actions/update_deploy.cpython-311-darwin.so +0 -0
  42. amsdal/cloud/services/auth/__init__.cpython-311-darwin.so +0 -0
  43. amsdal/cloud/services/auth/base.cpython-311-darwin.so +0 -0
  44. amsdal/cloud/services/auth/credentials.cpython-311-darwin.so +0 -0
  45. amsdal/cloud/services/auth/credentials.pyi +0 -1
  46. amsdal/cloud/services/auth/manager.cpython-311-darwin.so +0 -0
  47. amsdal/cloud/services/auth/signup_service.cpython-311-darwin.so +0 -0
  48. amsdal/cloud/services/auth/token.cpython-311-darwin.so +0 -0
  49. amsdal/cloud/services/auth/token.pyi +0 -1
  50. amsdal/configs/main.py +40 -20
  51. amsdal/configs/main.pyi +19 -18
  52. amsdal/contrib/__init__.cpython-311-darwin.so +0 -0
  53. amsdal/contrib/auth/errors.py +36 -0
  54. amsdal/contrib/auth/errors.pyi +12 -0
  55. amsdal/contrib/auth/fixtures/basic_permissions.json +64 -0
  56. amsdal/contrib/auth/lifecycle/consumer.py +13 -13
  57. amsdal/contrib/auth/lifecycle/consumer.pyi +3 -0
  58. amsdal/contrib/auth/migrations/0000_initial.py +69 -31
  59. amsdal/contrib/auth/migrations/0001_add_mfa_support.py +188 -0
  60. amsdal/contrib/auth/models/__init__.py +1 -0
  61. amsdal/contrib/auth/models/backup_code.py +85 -0
  62. amsdal/contrib/auth/models/email_mfa_device.py +108 -0
  63. amsdal/contrib/auth/models/login_session.py +235 -0
  64. amsdal/contrib/auth/models/mfa_device.py +86 -0
  65. amsdal/contrib/auth/models/permission.py +23 -0
  66. amsdal/contrib/auth/models/sms_device.py +113 -0
  67. amsdal/contrib/auth/models/totp_device.py +58 -0
  68. amsdal/contrib/auth/models/user.py +156 -0
  69. amsdal/contrib/auth/services/__init__.py +1 -0
  70. amsdal/contrib/auth/services/mfa_device_service.py +544 -0
  71. amsdal/contrib/auth/services/mfa_device_service.pyi +216 -0
  72. amsdal/contrib/auth/services/totp_service.py +358 -0
  73. amsdal/contrib/auth/services/totp_service.pyi +158 -0
  74. amsdal/contrib/auth/settings.py +8 -0
  75. amsdal/contrib/auth/settings.pyi +8 -0
  76. amsdal/contrib/auth/transactions/__init__.py +1 -0
  77. amsdal/contrib/auth/transactions/mfa_device_transactions.py +463 -0
  78. amsdal/contrib/auth/transactions/mfa_device_transactions.pyi +226 -0
  79. amsdal/contrib/auth/transactions/totp_transactions.py +206 -0
  80. amsdal/contrib/auth/transactions/totp_transactions.pyi +113 -0
  81. amsdal/contrib/auth/utils/__init__.py +0 -0
  82. amsdal/contrib/auth/utils/__init__.pyi +0 -0
  83. amsdal/contrib/auth/utils/mfa.py +257 -0
  84. amsdal/contrib/auth/utils/mfa.pyi +119 -0
  85. amsdal/contrib/frontend_configs/conversion/convert.py +85 -25
  86. amsdal/contrib/frontend_configs/conversion/convert.pyi +0 -1
  87. amsdal/contrib/frontend_configs/lifecycle/consumer.py +32 -13
  88. amsdal/contrib/frontend_configs/lifecycle/consumer.pyi +1 -1
  89. amsdal/contrib/frontend_configs/migrations/0000_initial.py +167 -195
  90. amsdal/contrib/frontend_configs/migrations/0001_update_frontend_control_config.py +245 -0
  91. amsdal/contrib/frontend_configs/migrations/0002_add_button_and_invoke_actions.py +352 -0
  92. amsdal/contrib/frontend_configs/migrations/0003_create_class_frontendconfigdashboardelement.py +145 -0
  93. amsdal/contrib/frontend_configs/models/__init__.py +0 -0
  94. amsdal/contrib/frontend_configs/models/frontend_activator_config.py +22 -0
  95. amsdal/contrib/frontend_configs/models/frontend_config_async_validator.py +11 -0
  96. amsdal/contrib/frontend_configs/models/frontend_config_control_action.py +110 -0
  97. amsdal/contrib/frontend_configs/models/frontend_config_dashboard.py +51 -0
  98. amsdal/contrib/frontend_configs/models/frontend_config_group_validator.py +21 -0
  99. amsdal/contrib/frontend_configs/models/frontend_config_option.py +12 -0
  100. amsdal/contrib/frontend_configs/models/frontend_config_skip_none_base.py +17 -0
  101. amsdal/contrib/frontend_configs/models/frontend_config_slider_option.py +13 -0
  102. amsdal/contrib/frontend_configs/models/frontend_config_text_mask.py +14 -0
  103. amsdal/contrib/frontend_configs/models/frontend_config_validator.py +28 -0
  104. amsdal/contrib/frontend_configs/models/frontend_control_config.py +110 -0
  105. amsdal/contrib/frontend_configs/models/frontend_model_config.py +14 -0
  106. amsdal/errors.py +0 -3
  107. amsdal/errors.pyi +0 -1
  108. amsdal/fixtures/__init__.cpython-311-darwin.so +0 -0
  109. amsdal/fixtures/manager.cpython-311-darwin.so +0 -0
  110. amsdal/fixtures/manager.pyi +73 -123
  111. amsdal/fixtures/utils.cpython-311-darwin.so +0 -0
  112. amsdal/fixtures/utils.pyi +9 -0
  113. amsdal/manager.cpython-311-darwin.so +0 -0
  114. amsdal/manager.pyi +9 -96
  115. amsdal/mixins/__init__.cpython-311-darwin.so +0 -0
  116. amsdal/mixins/class_versions_mixin.cpython-311-darwin.so +0 -0
  117. amsdal/models/__init__.py +19 -0
  118. amsdal/models/core/__init__.py +0 -0
  119. amsdal/models/core/class_object.py +38 -0
  120. amsdal/models/core/class_property.py +26 -0
  121. amsdal/models/core/file.py +243 -0
  122. amsdal/models/core/fixture.py +25 -0
  123. amsdal/models/core/option.py +11 -0
  124. amsdal/models/core/storage_metadata.py +15 -0
  125. amsdal/models/core/validator.py +12 -0
  126. amsdal/models/mixins.py +31 -0
  127. amsdal/models/types/__init__.py +0 -0
  128. amsdal/models/types/object.py +26 -0
  129. amsdal/queryset/__init__.py +21 -0
  130. amsdal/queryset/__init__.pyi +6 -0
  131. amsdal/schemas/core/class_object/model.json +20 -0
  132. amsdal/schemas/core/class_property/model.json +19 -0
  133. amsdal/schemas/core/file/properties/from_file.py +1 -1
  134. amsdal/schemas/core/file/properties/validate_data.py +3 -4
  135. amsdal/schemas/core/storage_metadata/model.json +52 -0
  136. amsdal/schemas/interfaces.py +25 -0
  137. amsdal/schemas/interfaces.pyi +20 -0
  138. amsdal/schemas/manager.cpython-311-darwin.so +0 -0
  139. amsdal/schemas/manager.py +0 -116
  140. amsdal/schemas/manager.pyi +0 -65
  141. amsdal/schemas/mixins/__init__.py +0 -0
  142. amsdal/schemas/mixins/__init__.pyi +0 -0
  143. amsdal/schemas/mixins/check_dependencies_mixin.py +130 -0
  144. amsdal/schemas/mixins/check_dependencies_mixin.pyi +45 -0
  145. amsdal/schemas/mixins/verify_schemas_mixin.py +96 -0
  146. amsdal/schemas/mixins/verify_schemas_mixin.pyi +33 -0
  147. amsdal/schemas/repository.py +84 -0
  148. amsdal/schemas/repository.pyi +22 -0
  149. amsdal/schemas/utils.py +16 -0
  150. amsdal/schemas/utils.pyi +10 -0
  151. amsdal/services/__init__.py +11 -0
  152. amsdal/services/__init__.pyi +4 -0
  153. amsdal/services/external_connections.py +262 -0
  154. amsdal/services/external_connections.pyi +190 -0
  155. amsdal/services/external_model_generator.py +350 -0
  156. amsdal/services/external_model_generator.pyi +134 -0
  157. amsdal/services/transaction_execution.cpython-311-darwin.so +0 -0
  158. amsdal/services/transaction_execution.pyi +2 -1
  159. amsdal/storages/__init__.py +20 -0
  160. amsdal/storages/__init__.pyi +8 -0
  161. amsdal/storages/file_system.py +214 -0
  162. amsdal/storages/file_system.pyi +36 -0
  163. amsdal/transactions/__init__.py +13 -0
  164. amsdal/transactions/__init__.pyi +4 -0
  165. amsdal/utils/rollback/__init__.py +99 -54
  166. amsdal/utils/rollback/__init__.pyi +6 -0
  167. amsdal/utils/tests/enums.py +0 -2
  168. amsdal/utils/tests/helpers.py +253 -231
  169. amsdal/utils/tests/migrations.py +157 -0
  170. {amsdal-0.3.3.dist-info → amsdal-0.5.29.dist-info}/METADATA +17 -10
  171. amsdal-0.5.29.dist-info/RECORD +276 -0
  172. {amsdal-0.3.3.dist-info → amsdal-0.5.29.dist-info}/WHEEL +1 -1
  173. amsdal/__migrations__/0001_datetime_type.py +0 -18
  174. amsdal/__migrations__/0002_fixture_order.py +0 -40
  175. amsdal/__migrations__/0003_schema_type_in_class_meta.py +0 -56
  176. amsdal/contrib/auth/models/login_session/hooks/pre_init.py +0 -68
  177. amsdal/contrib/auth/models/login_session/model.json +0 -23
  178. amsdal/contrib/auth/models/login_session/modifiers/display_name.py +0 -11
  179. amsdal/contrib/auth/models/permission/fixtures/basic_permissions.json +0 -62
  180. amsdal/contrib/auth/models/permission/model.json +0 -18
  181. amsdal/contrib/auth/models/permission/modifiers/display_name.py +0 -11
  182. amsdal/contrib/auth/models/user/hooks/post_init.py +0 -76
  183. amsdal/contrib/auth/models/user/hooks/pre_create.py +0 -8
  184. amsdal/contrib/auth/models/user/model.json +0 -25
  185. amsdal/contrib/auth/models/user/modifiers/display_name.py +0 -19
  186. amsdal/contrib/frontend_configs/models/frontend_activator_config/model.json +0 -11
  187. amsdal/contrib/frontend_configs/models/frontend_config_async_validator/model.json +0 -11
  188. amsdal/contrib/frontend_configs/models/frontend_config_group_validator/model.json +0 -52
  189. amsdal/contrib/frontend_configs/models/frontend_config_option/model.json +0 -15
  190. amsdal/contrib/frontend_configs/models/frontend_config_skip_none_base/model.json +0 -6
  191. amsdal/contrib/frontend_configs/models/frontend_config_skip_none_base/properties/model_dump.py +0 -13
  192. amsdal/contrib/frontend_configs/models/frontend_config_slider_option/model.json +0 -19
  193. amsdal/contrib/frontend_configs/models/frontend_config_text_mask/model.json +0 -26
  194. amsdal/contrib/frontend_configs/models/frontend_config_validator/model.json +0 -41
  195. amsdal/contrib/frontend_configs/models/frontend_control_config/model.json +0 -250
  196. amsdal/contrib/frontend_configs/models/frontend_model_config/fixtures/permissions.json +0 -24
  197. amsdal/contrib/frontend_configs/models/frontend_model_config/model.json +0 -17
  198. amsdal/contrib/frontend_configs/models/frontent_config_control_action/model.json +0 -54
  199. amsdal/contrib/frontend_configs/models/frontent_config_control_action/properties/action_validate.py +0 -33
  200. amsdal/migration/__init__.cpython-311-darwin.so +0 -0
  201. amsdal/migration/base_migration_schemas.cpython-311-darwin.so +0 -0
  202. amsdal/migration/base_migration_schemas.pyi +0 -120
  203. amsdal/migration/data_classes.cpython-311-darwin.so +0 -0
  204. amsdal/migration/data_classes.pyi +0 -172
  205. amsdal/migration/executors/__init__.cpython-311-darwin.so +0 -0
  206. amsdal/migration/executors/base.cpython-311-darwin.so +0 -0
  207. amsdal/migration/executors/base.pyi +0 -118
  208. amsdal/migration/executors/default_executor.cpython-311-darwin.so +0 -0
  209. amsdal/migration/executors/default_executor.pyi +0 -184
  210. amsdal/migration/executors/state_executor.cpython-311-darwin.so +0 -0
  211. amsdal/migration/executors/state_executor.pyi +0 -78
  212. amsdal/migration/file_migration_executor.cpython-311-darwin.so +0 -0
  213. amsdal/migration/file_migration_executor.pyi +0 -68
  214. amsdal/migration/file_migration_generator.cpython-311-darwin.so +0 -0
  215. amsdal/migration/file_migration_generator.pyi +0 -139
  216. amsdal/migration/file_migration_store.cpython-311-darwin.so +0 -0
  217. amsdal/migration/file_migration_store.pyi +0 -61
  218. amsdal/migration/file_migration_writer.cpython-311-darwin.so +0 -0
  219. amsdal/migration/file_migration_writer.pyi +0 -73
  220. amsdal/migration/migrations.cpython-311-darwin.so +0 -0
  221. amsdal/migration/migrations.pyi +0 -166
  222. amsdal/migration/migrations_loader.cpython-311-darwin.so +0 -0
  223. amsdal/migration/migrations_loader.pyi +0 -32
  224. amsdal/migration/schemas_loaders.cpython-311-darwin.so +0 -0
  225. amsdal/migration/schemas_loaders.pyi +0 -37
  226. amsdal/migration/templates/data_migration.tmpl +0 -18
  227. amsdal/migration/templates/dict_validator.tmpl +0 -4
  228. amsdal/migration/templates/migration.tmpl +0 -6
  229. amsdal/migration/templates/model_class.tmpl +0 -8
  230. amsdal/migration/templates/model_class_layout.tmpl +0 -24
  231. amsdal/migration/templates/options_validator.tmpl +0 -4
  232. amsdal/migration/utils.cpython-311-darwin.so +0 -0
  233. amsdal/migration/utils.pyi +0 -58
  234. amsdal/mixins/build_mixin.cpython-311-darwin.so +0 -0
  235. amsdal/mixins/build_mixin.pyi +0 -78
  236. amsdal/schemas/core/class_object_meta/model.json +0 -59
  237. amsdal/schemas/core/class_property_meta/model.json +0 -23
  238. amsdal/services/__init__.cpython-311-darwin.so +0 -0
  239. amsdal-0.3.3.dist-info/RECORD +0 -257
  240. amsdal-0.3.3.dist-info/licenses/LICENSE.txt +0 -107
  241. /amsdal/{migration → contrib/auth/services}/__init__.pyi +0 -0
  242. /amsdal/{migration/executors → contrib/auth/transactions}/__init__.pyi +0 -0
  243. {amsdal-0.3.3.dist-info → amsdal-0.5.29.dist-info/licenses}/LICENSE.txt +0 -0
  244. {amsdal-0.3.3.dist-info → amsdal-0.5.29.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,145 @@
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="FrontendConfigDashboard",
10
+ new_schema={
11
+ "title": "FrontendConfigDashboard",
12
+ "required": ["title", "elements"],
13
+ "properties": {
14
+ "title": {"type": "string", "title": "Title", "description": "Title of the dashboard"},
15
+ "elements": {
16
+ "type": "array",
17
+ "items": {"type": "FrontendConfigDashboardElement", "title": "FrontendConfigDashboardElement"},
18
+ "title": "Elements",
19
+ "description": "List of dashboard elements",
20
+ },
21
+ },
22
+ "storage_metadata": {
23
+ "table_name": "FrontendConfigDashboard",
24
+ "db_fields": {},
25
+ "primary_key": ["partition_key"],
26
+ "foreign_keys": {},
27
+ },
28
+ },
29
+ ),
30
+ migrations.CreateClass(
31
+ module_type=ModuleType.CONTRIB,
32
+ class_name="FrontendConfigDashboardElement",
33
+ new_schema={
34
+ "title": "FrontendConfigDashboardElement",
35
+ "required": ["type"],
36
+ "properties": {
37
+ "type": {
38
+ "type": "string",
39
+ "options": [
40
+ {"key": "section", "value": "section"},
41
+ {"key": "grid", "value": "grid"},
42
+ {"key": "grid_col", "value": "grid_col"},
43
+ {"key": "chart", "value": "chart"},
44
+ {"key": "table", "value": "table"},
45
+ ],
46
+ "title": "Type",
47
+ "enum": ["section", "grid", "grid_col", "chart", "table"],
48
+ },
49
+ "chart_type": {
50
+ "type": "string",
51
+ "title": "Chart Type",
52
+ "description": "Type of chart (for chart elements)",
53
+ },
54
+ "columns": {
55
+ "type": "integer",
56
+ "title": "Columns",
57
+ "description": "Number of columns for grid layout",
58
+ },
59
+ "rows": {"type": "integer", "title": "Rows", "description": "Number of rows for grid layout"},
60
+ "title": {"type": "string", "title": "Title", "description": "Title of the dashboard element"},
61
+ "elements": {
62
+ "type": "array",
63
+ "items": {"type": "FrontendConfigDashboardElement", "title": "FrontendConfigDashboardElement"},
64
+ "title": "Elements",
65
+ "description": "Nested dashboard elements for section or grid types",
66
+ },
67
+ "data_source": {
68
+ "type": "FrontendConfigDashboardDataSource",
69
+ "title": "FrontendConfigDashboardDataSource",
70
+ "description": "Data source configuration for chart or table elements",
71
+ },
72
+ },
73
+ "meta_class": "TypeMeta",
74
+ "storage_metadata": {
75
+ "table_name": "FrontendConfigDashboardElement",
76
+ "db_fields": {},
77
+ "foreign_keys": {},
78
+ },
79
+ },
80
+ ),
81
+ migrations.CreateClass(
82
+ module_type=ModuleType.CONTRIB,
83
+ class_name="FrontendConfigDashboardQueryParams",
84
+ new_schema={
85
+ "title": "FrontendConfigDashboardQueryParams",
86
+ "required": ["field", "operator"],
87
+ "properties": {
88
+ "field": {"type": "string", "title": "Field", "description": "Field name for the query parameter"},
89
+ "operator": {
90
+ "type": "string",
91
+ "title": "Operator",
92
+ "description": "Operator for the query parameter",
93
+ },
94
+ "value": {"type": "anything", "title": "Value", "description": "Value for the query parameter"},
95
+ },
96
+ "meta_class": "TypeMeta",
97
+ "storage_metadata": {
98
+ "table_name": "FrontendConfigDashboardQueryParams",
99
+ "db_fields": {},
100
+ "foreign_keys": {},
101
+ },
102
+ },
103
+ ),
104
+ migrations.CreateClass(
105
+ module_type=ModuleType.CONTRIB,
106
+ class_name="FrontendConfigDashboardDataSource",
107
+ new_schema={
108
+ "title": "FrontendConfigDashboardDataSource",
109
+ "required": ["type", "entity_name"],
110
+ "properties": {
111
+ "type": {
112
+ "type": "string",
113
+ "options": [{"key": "class", "value": "class"}, {"key": "transaction", "value": "transaction"}],
114
+ "title": "Type",
115
+ "enum": ["class", "transaction"],
116
+ },
117
+ "entity_name": {
118
+ "type": "string",
119
+ "title": "Entity Name",
120
+ "description": "Name of the entity or transaction",
121
+ },
122
+ "query_params": {
123
+ "type": "array",
124
+ "items": {
125
+ "type": "FrontendConfigDashboardQueryParams",
126
+ "title": "FrontendConfigDashboardQueryParams",
127
+ },
128
+ "title": "Query Params",
129
+ "description": "List of query parameters for filtering data (for class type)",
130
+ },
131
+ "body": {
132
+ "type": "anything",
133
+ "title": "Body",
134
+ "description": "Request body for transaction data source (for transaction type)",
135
+ },
136
+ },
137
+ "meta_class": "TypeMeta",
138
+ "storage_metadata": {
139
+ "table_name": "FrontendConfigDashboardDataSource",
140
+ "db_fields": {},
141
+ "foreign_keys": {},
142
+ },
143
+ },
144
+ ),
145
+ ]
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,51 @@
1
+ from typing import Any
2
+ from typing import ClassVar
3
+ from typing import Literal
4
+ from typing import Optional
5
+
6
+ from amsdal_models.classes.model import Model
7
+ from amsdal_models.classes.model import TypeModel
8
+ from amsdal_utils.models.enums import ModuleType
9
+ from pydantic.fields import Field
10
+
11
+
12
+ class FrontendConfigDashboardQueryParams(TypeModel):
13
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
14
+
15
+ field: str = Field(..., description='Field name for the query parameter')
16
+ operator: str = Field(..., description='Operator for the query parameter')
17
+ value: Optional[Any] = Field(None, description='Value for the query parameter')
18
+
19
+
20
+ class FrontendConfigDashboardDataSource(TypeModel):
21
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
22
+
23
+ type: Literal['class', 'transaction']
24
+ entity_name: str = Field(..., description='Name of the entity or transaction')
25
+ query_params: list[FrontendConfigDashboardQueryParams] | None = Field(
26
+ None, description='List of query parameters for filtering data (for class type)'
27
+ )
28
+ body: Any = Field(None, description='Request body for transaction data source (for transaction type)')
29
+
30
+
31
+ class FrontendConfigDashboardElement(TypeModel):
32
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
33
+
34
+ type: Literal['section', 'grid', 'grid_col', 'chart', 'table']
35
+ chart_type: str | None = Field(None, description='Type of chart (for chart elements)')
36
+ columns: int | None = Field(None, description='Number of columns for grid layout')
37
+ rows: int | None = Field(None, description='Number of rows for grid layout')
38
+ title: str | None = Field(None, description='Title of the dashboard element')
39
+ elements: list['FrontendConfigDashboardElement'] | None = Field(
40
+ None, description='Nested dashboard elements for section or grid types'
41
+ )
42
+ data_source: FrontendConfigDashboardDataSource | None = Field(
43
+ None, description='Data source configuration for chart or table elements'
44
+ )
45
+
46
+
47
+ class FrontendConfigDashboard(Model):
48
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
49
+
50
+ title: str = Field(..., description='Title of the dashboard')
51
+ elements: list[FrontendConfigDashboardElement] = Field(..., description='List of dashboard elements')
@@ -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'])
@@ -0,0 +1,110 @@
1
+ from typing import TYPE_CHECKING
2
+ from typing import Any
3
+ from typing import ClassVar
4
+ from typing import Literal
5
+ from typing import Optional
6
+
7
+ from amsdal_utils.models.enums import ModuleType
8
+ from pydantic.fields import Field
9
+
10
+ from amsdal.contrib.frontend_configs.models.frontend_activator_config import * # noqa: F403
11
+ from amsdal.contrib.frontend_configs.models.frontend_config_async_validator import * # noqa: F403
12
+ from amsdal.contrib.frontend_configs.models.frontend_config_control_action import * # noqa: F403
13
+ from amsdal.contrib.frontend_configs.models.frontend_config_option import * # noqa: F403
14
+ from amsdal.contrib.frontend_configs.models.frontend_config_skip_none_base import * # noqa: F403
15
+ from amsdal.contrib.frontend_configs.models.frontend_config_slider_option import * # noqa: F403
16
+ from amsdal.contrib.frontend_configs.models.frontend_config_text_mask import * # noqa: F403
17
+ from amsdal.contrib.frontend_configs.models.frontend_config_validator import * # noqa: F403
18
+
19
+ if TYPE_CHECKING:
20
+ from amsdal.contrib.frontend_configs.models.frontend_config_control_action import ActionType
21
+
22
+ ConfigType = Literal[
23
+ 'Bytes',
24
+ 'array',
25
+ 'attachment',
26
+ 'wizard',
27
+ 'button',
28
+ 'chat',
29
+ 'checkbox',
30
+ 'date',
31
+ 'dateTriplet',
32
+ 'datetime',
33
+ 'dict',
34
+ 'dropzone',
35
+ 'email',
36
+ 'file',
37
+ 'group',
38
+ 'group_switch',
39
+ 'group_toggle',
40
+ 'info-group',
41
+ 'infoscreen',
42
+ 'multiselect',
43
+ 'number',
44
+ 'number-operations',
45
+ 'number-slider',
46
+ 'number_equals',
47
+ 'number_initial',
48
+ 'number_minus',
49
+ 'number_plus',
50
+ 'object',
51
+ 'object_group',
52
+ 'object_latest',
53
+ 'password',
54
+ 'phone',
55
+ 'radio',
56
+ 'select',
57
+ 'text',
58
+ 'textarea',
59
+ 'time',
60
+ 'toggle',
61
+ 'sections',
62
+ 'section',
63
+ ]
64
+
65
+
66
+ class ConditionItem(FrontendConfigSkipNoneBase): # noqa: F405
67
+ path: str = Field(title='Path')
68
+ condition: str = Field(title='Condition')
69
+ value: Any = Field(default=None, title='Value')
70
+
71
+
72
+ class Condition(FrontendConfigSkipNoneBase): # noqa: F405
73
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
74
+ operation: Literal['and', 'or', 'not'] = Field(title='Operation')
75
+ conditions: list[ConditionItem] = Field(title='Conditions') # noqa: F405
76
+
77
+
78
+ Condition.model_rebuild()
79
+
80
+
81
+ class FrontendControlConfig(FrontendConfigSkipNoneBase): # noqa: F405
82
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
83
+ id: str | None = Field(None, title='ID')
84
+ type: ConfigType = Field(title='Type')
85
+ name: str = Field(title='Name')
86
+ label: str | None = Field(None, title='Label')
87
+ required: bool | None = Field(None, title='Required')
88
+ hideLabel: bool | None = Field(None, title='Hide Label') # noqa: N815
89
+ actions: list[ActionType] | None = Field(None, title='Actions') # noqa: F405
90
+ validators: list['FrontendConfigValidator'] | None = Field(None, title='Validators') # noqa: F405
91
+ asyncValidators: list['FrontendConfigAsyncValidator'] | None = Field( # noqa: F405, N815
92
+ None,
93
+ title='Async Validators',
94
+ )
95
+ activators: list['FrontendActivatorConfig'] | None = Field(None, title='Activators') # noqa: F405
96
+ additionalText: str | None = Field(None, title='Additional Text') # noqa: N815
97
+ value: Any | None = Field(None, title='Value')
98
+ placeholder: str | None = Field(None, title='Placeholder')
99
+ options: list['FrontendConfigOption'] | None = Field(None, title='Options') # noqa: F405
100
+ mask: Optional['FrontendConfigTextMask'] = Field(None, title='Mask') # noqa: F405
101
+ controls: list['FrontendControlConfig'] | None = Field(None, title='Controls')
102
+ showSearch: bool | None = Field(None, title='Show Search') # noqa: N815
103
+ sliderOptions: Optional['FrontendConfigSliderOption'] = Field(None, title='Slider Option') # noqa: F405, N815
104
+ customLabel: list[str] | None = Field(None, title='Custom Label') # noqa: N815
105
+ control: Optional['FrontendControlConfig'] = Field(None, title='Control')
106
+ entityType: str | None = Field(None, title='Entity Type') # noqa: N815
107
+ condition: Condition | None = Field(None, title='Condition') # noqa: F405
108
+
109
+
110
+ FrontendControlConfig.model_rebuild()
@@ -0,0 +1,14 @@
1
+ from typing import ClassVar
2
+ from typing import Optional
3
+
4
+ from amsdal_models.classes.model import Model
5
+ from amsdal_utils.models.enums import ModuleType
6
+ from pydantic.fields import Field
7
+
8
+ from amsdal.contrib.frontend_configs.models.frontend_control_config import * # noqa: F403
9
+
10
+
11
+ class FrontendModelConfig(Model):
12
+ __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
13
+ class_name: str = Field(title='Class Name')
14
+ control: Optional['FrontendControlConfig'] = Field(None, title='Control') # noqa: F405
amsdal/errors.py CHANGED
@@ -7,9 +7,6 @@ class AmsdalRuntimeError(AmsdalError): ...
7
7
  class TransactionNotFoundError(AmsdalError): ...
8
8
 
9
9
 
10
- class MigrationsError(AmsdalError): ...
11
-
12
-
13
10
  class AmsdalAuthenticationError(AmsdalRuntimeError): ...
14
11
 
15
12
 
amsdal/errors.pyi CHANGED
@@ -2,7 +2,6 @@ from amsdal_utils.errors import AmsdalError
2
2
 
3
3
  class AmsdalRuntimeError(AmsdalError): ...
4
4
  class TransactionNotFoundError(AmsdalError): ...
5
- class MigrationsError(AmsdalError): ...
6
5
  class AmsdalAuthenticationError(AmsdalRuntimeError): ...
7
6
  class AmsdalDeployError(AmsdalRuntimeError): ...
8
7
  class AmsdalCloudError(AmsdalRuntimeError): ...