amsdal 0.5.19__cp312-cp312-macosx_10_13_universal2.whl → 0.5.21__cp312-cp312-macosx_10_13_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 (62) hide show
  1. amsdal/__about__.py +1 -1
  2. amsdal/cloud/__init__.cpython-312-darwin.so +0 -0
  3. amsdal/cloud/client.cpython-312-darwin.so +0 -0
  4. amsdal/cloud/constants.cpython-312-darwin.so +0 -0
  5. amsdal/cloud/enums.cpython-312-darwin.so +0 -0
  6. amsdal/cloud/models/__init__.cpython-312-darwin.so +0 -0
  7. amsdal/cloud/models/base.cpython-312-darwin.so +0 -0
  8. amsdal/cloud/services/__init__.cpython-312-darwin.so +0 -0
  9. amsdal/cloud/services/actions/__init__.cpython-312-darwin.so +0 -0
  10. amsdal/cloud/services/actions/add_allowlist_ip.cpython-312-darwin.so +0 -0
  11. amsdal/cloud/services/actions/add_basic_auth.cpython-312-darwin.so +0 -0
  12. amsdal/cloud/services/actions/add_dependency.cpython-312-darwin.so +0 -0
  13. amsdal/cloud/services/actions/add_secret.cpython-312-darwin.so +0 -0
  14. amsdal/cloud/services/actions/base.cpython-312-darwin.so +0 -0
  15. amsdal/cloud/services/actions/create_deploy.cpython-312-darwin.so +0 -0
  16. amsdal/cloud/services/actions/create_env.cpython-312-darwin.so +0 -0
  17. amsdal/cloud/services/actions/create_session.cpython-312-darwin.so +0 -0
  18. amsdal/cloud/services/actions/delete_allowlist_ip.cpython-312-darwin.so +0 -0
  19. amsdal/cloud/services/actions/delete_basic_auth.cpython-312-darwin.so +0 -0
  20. amsdal/cloud/services/actions/delete_dependency.cpython-312-darwin.so +0 -0
  21. amsdal/cloud/services/actions/delete_env.cpython-312-darwin.so +0 -0
  22. amsdal/cloud/services/actions/delete_secret.cpython-312-darwin.so +0 -0
  23. amsdal/cloud/services/actions/destroy_deploy.cpython-312-darwin.so +0 -0
  24. amsdal/cloud/services/actions/expose_db.cpython-312-darwin.so +0 -0
  25. amsdal/cloud/services/actions/get_basic_auth_credentials.cpython-312-darwin.so +0 -0
  26. amsdal/cloud/services/actions/get_monitoring_info.cpython-312-darwin.so +0 -0
  27. amsdal/cloud/services/actions/list_dependencies.cpython-312-darwin.so +0 -0
  28. amsdal/cloud/services/actions/list_deploys.cpython-312-darwin.so +0 -0
  29. amsdal/cloud/services/actions/list_envs.cpython-312-darwin.so +0 -0
  30. amsdal/cloud/services/actions/list_secrets.cpython-312-darwin.so +0 -0
  31. amsdal/cloud/services/actions/manager.cpython-312-darwin.so +0 -0
  32. amsdal/cloud/services/actions/signup_action.cpython-312-darwin.so +0 -0
  33. amsdal/cloud/services/actions/update_deploy.cpython-312-darwin.so +0 -0
  34. amsdal/cloud/services/auth/__init__.cpython-312-darwin.so +0 -0
  35. amsdal/cloud/services/auth/base.cpython-312-darwin.so +0 -0
  36. amsdal/cloud/services/auth/credentials.cpython-312-darwin.so +0 -0
  37. amsdal/cloud/services/auth/manager.cpython-312-darwin.so +0 -0
  38. amsdal/cloud/services/auth/signup_service.cpython-312-darwin.so +0 -0
  39. amsdal/cloud/services/auth/token.cpython-312-darwin.so +0 -0
  40. amsdal/contrib/__init__.cpython-312-darwin.so +0 -0
  41. amsdal/contrib/frontend_configs/migrations/0002_add_button_and_invoke_actions.py +314 -0
  42. amsdal/contrib/frontend_configs/models/frontend_config_control_action.py +57 -1
  43. amsdal/contrib/frontend_configs/models/frontend_control_config.py +10 -1
  44. amsdal/fixtures/__init__.cpython-312-darwin.so +0 -0
  45. amsdal/fixtures/manager.cpython-312-darwin.so +0 -0
  46. amsdal/fixtures/utils.cpython-312-darwin.so +0 -0
  47. amsdal/manager.cpython-312-darwin.so +0 -0
  48. amsdal/mixins/__init__.cpython-312-darwin.so +0 -0
  49. amsdal/mixins/class_versions_mixin.cpython-312-darwin.so +0 -0
  50. amsdal/schemas/manager.cpython-312-darwin.so +0 -0
  51. amsdal/services/__init__.py +11 -0
  52. amsdal/services/external_connections.py +262 -0
  53. amsdal/services/external_model_generator.py +350 -0
  54. amsdal/services/transaction_execution.cpython-312-darwin.so +0 -0
  55. {amsdal-0.5.19.dist-info → amsdal-0.5.21.dist-info}/METADATA +1 -1
  56. {amsdal-0.5.19.dist-info → amsdal-0.5.21.dist-info}/RECORD +59 -58
  57. amsdal/services/__init__.cpython-312-darwin.so +0 -0
  58. amsdal/services/external_connections.cpython-312-darwin.so +0 -0
  59. amsdal/services/external_model_generator.cpython-312-darwin.so +0 -0
  60. {amsdal-0.5.19.dist-info → amsdal-0.5.21.dist-info}/WHEEL +0 -0
  61. {amsdal-0.5.19.dist-info → amsdal-0.5.21.dist-info}/licenses/LICENSE.txt +0 -0
  62. {amsdal-0.5.19.dist-info → amsdal-0.5.21.dist-info}/top_level.txt +0 -0
amsdal/__about__.py CHANGED
@@ -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.19'
4
+ __version__ = '0.5.21'
Binary file
Binary file
Binary file
@@ -0,0 +1,314 @@
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
+ "name": {"type": "string", "title": "Name"},
303
+ "actions": {
304
+ "type": "array",
305
+ "items": {"type": "anything"},
306
+ "title": "Actions",
307
+ },
308
+ },
309
+ "meta_class": "TypeMeta",
310
+ "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)",
311
+ "storage_metadata": {"table_name": "FrontendControlConfig", "db_fields": {}, "foreign_keys": {}},
312
+ },
313
+ ),
314
+ ]
@@ -1,15 +1,27 @@
1
1
  from typing import Any
2
2
  from typing import ClassVar
3
+ from typing import Literal
3
4
 
4
5
  from amsdal_models.builder.validators.options_validators import validate_options
5
6
  from amsdal_utils.models.enums import ModuleType
7
+ from pydantic import Field
6
8
  from pydantic import field_validator
7
- from pydantic.fields import Field
8
9
 
9
10
  from amsdal.contrib.frontend_configs.models.frontend_config_skip_none_base import * # noqa: F403
10
11
 
12
+ __all__ = [
13
+ 'ActionType',
14
+ 'ChangeContextAction',
15
+ 'FrontendConfigControlAction',
16
+ 'InvokeAction',
17
+ 'SaveAction',
18
+ 'UpdateValueAction',
19
+ ]
20
+
11
21
 
12
22
  class FrontendConfigControlAction(FrontendConfigSkipNoneBase): # noqa: F405
23
+ """Navigation action for form controls (backward compatible)."""
24
+
13
25
  __module_type__: ClassVar[ModuleType] = ModuleType.CONTRIB
14
26
  action: str = Field(title='Action')
15
27
  text: str = Field(title='Text')
@@ -52,3 +64,47 @@ class FrontendConfigControlAction(FrontendConfigSkipNoneBase): # noqa: F405
52
64
  msg = 'Action must be one of: goPrev, goNext, goNextWithSubmit, submit, submitWithDataLayer, navigate::{string}' # noqa: E501
53
65
  raise ValueError(msg)
54
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()
@@ -1,3 +1,4 @@
1
+ from typing import TYPE_CHECKING
1
2
  from typing import Any
2
3
  from typing import ClassVar
3
4
  from typing import Literal
@@ -15,9 +16,14 @@ from amsdal.contrib.frontend_configs.models.frontend_config_slider_option import
15
16
  from amsdal.contrib.frontend_configs.models.frontend_config_text_mask import * # noqa: F403
16
17
  from amsdal.contrib.frontend_configs.models.frontend_config_validator import * # noqa: F403
17
18
 
19
+ if TYPE_CHECKING:
20
+ from amsdal.contrib.frontend_configs.models.frontend_config_control_action import ActionType
21
+
18
22
  ConfigType = Literal[
19
23
  'Bytes',
20
24
  'array',
25
+ 'button',
26
+ 'chat',
21
27
  'checkbox',
22
28
  'date',
23
29
  'dateTriplet',
@@ -77,7 +83,7 @@ class FrontendControlConfig(FrontendConfigSkipNoneBase): # noqa: F405
77
83
  label: str | None = Field(None, title='Label')
78
84
  required: bool | None = Field(None, title='Required')
79
85
  hideLabel: bool | None = Field(None, title='Hide Label') # noqa: N815
80
- actions: list['FrontendConfigControlAction'] | None = Field(None, title='Actions') # noqa: F405
86
+ actions: list[ActionType] | None = Field(None, title='Actions') # noqa: F405
81
87
  validators: list['FrontendConfigValidator'] | None = Field(None, title='Validators') # noqa: F405
82
88
  asyncValidators: list['FrontendConfigAsyncValidator'] | None = Field( # noqa: F405, N815
83
89
  None,
@@ -96,3 +102,6 @@ class FrontendControlConfig(FrontendConfigSkipNoneBase): # noqa: F405
96
102
  control: Optional['FrontendControlConfig'] = Field(None, title='Control')
97
103
  entityType: str | None = Field(None, title='Entity Type') # noqa: N815
98
104
  condition: Condition | None = Field(None, title='Condition') # noqa: F405
105
+
106
+
107
+ FrontendControlConfig.model_rebuild()
Binary file
Binary file
@@ -0,0 +1,11 @@
1
+ # AMSDAL services package
2
+
3
+ from amsdal.services.external_connections import ExternalConnectionManager
4
+ from amsdal.services.external_connections import ExternalDatabaseReader
5
+ from amsdal.services.external_model_generator import ExternalModelGenerator
6
+
7
+ __all__ = [
8
+ 'ExternalConnectionManager',
9
+ 'ExternalDatabaseReader',
10
+ 'ExternalModelGenerator',
11
+ ]