erdo 0.1.31__py3-none-any.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.
- erdo/__init__.py +35 -0
- erdo/_generated/__init__.py +18 -0
- erdo/_generated/actions/__init__.py +34 -0
- erdo/_generated/actions/analysis.py +179 -0
- erdo/_generated/actions/bot.py +186 -0
- erdo/_generated/actions/codeexec.py +199 -0
- erdo/_generated/actions/llm.py +148 -0
- erdo/_generated/actions/memory.py +463 -0
- erdo/_generated/actions/pdfextractor.py +97 -0
- erdo/_generated/actions/resource_definitions.py +296 -0
- erdo/_generated/actions/sqlexec.py +90 -0
- erdo/_generated/actions/utils.py +475 -0
- erdo/_generated/actions/webparser.py +119 -0
- erdo/_generated/actions/websearch.py +85 -0
- erdo/_generated/condition/__init__.py +556 -0
- erdo/_generated/internal.py +51 -0
- erdo/_generated/internal_actions.py +91 -0
- erdo/_generated/parameters.py +17 -0
- erdo/_generated/secrets.py +17 -0
- erdo/_generated/template_functions.py +55 -0
- erdo/_generated/types.py +3907 -0
- erdo/actions/__init__.py +40 -0
- erdo/bot_permissions.py +266 -0
- erdo/cli_entry.py +73 -0
- erdo/conditions/__init__.py +11 -0
- erdo/config/__init__.py +5 -0
- erdo/config/config.py +140 -0
- erdo/formatting.py +279 -0
- erdo/install_cli.py +140 -0
- erdo/integrations.py +131 -0
- erdo/invoke/__init__.py +11 -0
- erdo/invoke/client.py +234 -0
- erdo/invoke/invoke.py +555 -0
- erdo/state.py +376 -0
- erdo/sync/__init__.py +17 -0
- erdo/sync/client.py +95 -0
- erdo/sync/extractor.py +492 -0
- erdo/sync/sync.py +327 -0
- erdo/template.py +136 -0
- erdo/test/__init__.py +41 -0
- erdo/test/evaluate.py +272 -0
- erdo/test/runner.py +263 -0
- erdo/types.py +1431 -0
- erdo-0.1.31.dist-info/METADATA +471 -0
- erdo-0.1.31.dist-info/RECORD +48 -0
- erdo-0.1.31.dist-info/WHEEL +4 -0
- erdo-0.1.31.dist-info/entry_points.txt +2 -0
- erdo-0.1.31.dist-info/licenses/LICENSE +22 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""
|
|
2
|
+
PDF extraction actions for extracting tables and text from PDF documents using Document AI and Gemini service functions.
|
|
3
|
+
Auto-generated - DO NOT EDIT.
|
|
4
|
+
|
|
5
|
+
Provides type-safe action definitions for pdfextractor service.
|
|
6
|
+
Actual execution happens in the Go backend after syncing.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from typing import Any, Dict, List, Optional, Union
|
|
10
|
+
|
|
11
|
+
from pydantic import BaseModel
|
|
12
|
+
|
|
13
|
+
from erdo.template import TemplateString
|
|
14
|
+
from erdo.types import StepMetadata
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ExtractParams(BaseModel):
|
|
18
|
+
"""Extract tables and text from PDF documents using Google Document AI with Gemini fallback parameters"""
|
|
19
|
+
|
|
20
|
+
name: str = "pdfextractor.extract" # Action type for roundtrip compatibility
|
|
21
|
+
file_path: Optional[Union[str, TemplateString]] = None # file_path parameter
|
|
22
|
+
url: Optional[Union[str, TemplateString]] = None # url parameter
|
|
23
|
+
dataset_id: Optional[Union[str, TemplateString]] = None # dataset_id parameter
|
|
24
|
+
content: Optional[Union[str, TemplateString]] = None # content parameter
|
|
25
|
+
extract_tables: Optional[Union[bool, TemplateString]] = (
|
|
26
|
+
None # extract_tables parameter
|
|
27
|
+
)
|
|
28
|
+
extract_text: Optional[Union[bool, TemplateString]] = None # extract_text parameter
|
|
29
|
+
fallback_to_gemini: Optional[Union[bool, TemplateString]] = (
|
|
30
|
+
None # fallback_to_gemini parameter
|
|
31
|
+
)
|
|
32
|
+
timeout_seconds: Optional[Union[int, TemplateString]] = (
|
|
33
|
+
None # timeout_seconds parameter
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class ExtractResult(BaseModel):
|
|
38
|
+
"""Extract tables and text from PDF documents using Google Document AI with Gemini fallback result type
|
|
39
|
+
|
|
40
|
+
Result schema for pdfextractor.extract action.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
tables: List[Dict[str, Any]]
|
|
44
|
+
page_count: float
|
|
45
|
+
extraction_method: str
|
|
46
|
+
processing_time_ms: float
|
|
47
|
+
file_size_bytes: float
|
|
48
|
+
text: Optional[str]
|
|
49
|
+
warnings: Optional[List[str]]
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def extract(
|
|
53
|
+
file_path: Optional[Union[str, TemplateString]] = None,
|
|
54
|
+
url: Optional[Union[str, TemplateString]] = None,
|
|
55
|
+
dataset_id: Optional[Union[str, TemplateString]] = None,
|
|
56
|
+
content: Optional[Union[str, TemplateString]] = None,
|
|
57
|
+
extract_tables: Optional[Union[bool, TemplateString]] = None,
|
|
58
|
+
extract_text: Optional[Union[bool, TemplateString]] = None,
|
|
59
|
+
fallback_to_gemini: Optional[Union[bool, TemplateString]] = None,
|
|
60
|
+
timeout_seconds: Optional[Union[int, TemplateString]] = None,
|
|
61
|
+
step_metadata: Optional[StepMetadata] = None,
|
|
62
|
+
**params: Any,
|
|
63
|
+
) -> ExtractParams:
|
|
64
|
+
"""Extract tables and text from PDF documents using Google Document AI with Gemini fallback
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
file_path: file_path parameter
|
|
68
|
+
url: url parameter
|
|
69
|
+
dataset_id: dataset_id parameter
|
|
70
|
+
content: content parameter
|
|
71
|
+
extract_tables: extract_tables parameter
|
|
72
|
+
extract_text: extract_text parameter
|
|
73
|
+
fallback_to_gemini: fallback_to_gemini parameter
|
|
74
|
+
timeout_seconds: timeout_seconds parameter
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
ExtractParams: Type-safe parameter object
|
|
78
|
+
"""
|
|
79
|
+
param_dict = {
|
|
80
|
+
"file_path": file_path,
|
|
81
|
+
"url": url,
|
|
82
|
+
"dataset_id": dataset_id,
|
|
83
|
+
"content": content,
|
|
84
|
+
"extract_tables": extract_tables,
|
|
85
|
+
"extract_text": extract_text,
|
|
86
|
+
"fallback_to_gemini": fallback_to_gemini,
|
|
87
|
+
"timeout_seconds": timeout_seconds,
|
|
88
|
+
}
|
|
89
|
+
# Remove None values for optional parameters
|
|
90
|
+
param_dict = {k: v for k, v in param_dict.items() if v is not None}
|
|
91
|
+
param_dict.update(params)
|
|
92
|
+
|
|
93
|
+
return ExtractParams(**param_dict)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
# Associate parameter classes with their result types
|
|
97
|
+
ExtractParams._result = ExtractResult
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Resource definition actions for managing and searching data resources service functions.
|
|
3
|
+
Auto-generated - DO NOT EDIT.
|
|
4
|
+
|
|
5
|
+
Provides type-safe action definitions for resource_definitions service.
|
|
6
|
+
Actual execution happens in the Go backend after syncing.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from typing import Any, List, Optional, Union
|
|
10
|
+
|
|
11
|
+
from pydantic import BaseModel
|
|
12
|
+
|
|
13
|
+
from erdo._generated.types import Resource
|
|
14
|
+
from erdo.template import TemplateString
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class BaseActionParams(BaseModel):
|
|
18
|
+
"""Base class for all action parameter classes.
|
|
19
|
+
|
|
20
|
+
Provides common fields that all actions support:
|
|
21
|
+
- name: The action type identifier
|
|
22
|
+
- step_metadata: Optional configuration for the step created from this action
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
name: str
|
|
26
|
+
step_metadata: Optional[Any] = None
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class SearchParams(BaseActionParams):
|
|
30
|
+
"""Search for resource definitions using query and key filters parameters"""
|
|
31
|
+
|
|
32
|
+
name: str = "resource_definitions.search" # Action type for roundtrip compatibility
|
|
33
|
+
query: Optional[Union[str, TemplateString]] = None # query parameter
|
|
34
|
+
or_keys: Optional[Any] = None # or_keys parameter
|
|
35
|
+
and_keys: Optional[Any] = None # and_keys parameter
|
|
36
|
+
thread_id: Optional[Union[str, TemplateString]] = None # thread_id parameter
|
|
37
|
+
dataset_id: Optional[Union[str, TemplateString]] = None # dataset_id parameter
|
|
38
|
+
integration_id: Optional[Union[str, TemplateString]] = (
|
|
39
|
+
None # integration_id parameter
|
|
40
|
+
)
|
|
41
|
+
integration_config_id: Optional[Union[str, TemplateString]] = (
|
|
42
|
+
None # integration_config_id parameter
|
|
43
|
+
)
|
|
44
|
+
limit: Optional[Union[int, TemplateString]] = None # limit parameter
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class ListParams(BaseActionParams):
|
|
48
|
+
"""List resource definitions with optional filtering by dataset, integration, or attach type parameters"""
|
|
49
|
+
|
|
50
|
+
name: str = "resource_definitions.list" # Action type for roundtrip compatibility
|
|
51
|
+
thread_id: Optional[Union[str, TemplateString]] = None # thread_id parameter
|
|
52
|
+
dataset_id: Optional[Union[str, TemplateString]] = None # dataset_id parameter
|
|
53
|
+
integration_id: Optional[Union[str, TemplateString]] = (
|
|
54
|
+
None # integration_id parameter
|
|
55
|
+
)
|
|
56
|
+
integration_config_id: Optional[Union[str, TemplateString]] = (
|
|
57
|
+
None # integration_config_id parameter
|
|
58
|
+
)
|
|
59
|
+
attach_type: Optional[Union[str, TemplateString]] = None # attach_type parameter
|
|
60
|
+
limit: Optional[Union[int, TemplateString]] = None # limit parameter
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class ListByKeysParams(BaseActionParams):
|
|
64
|
+
"""List resource definitions filtered by specific keys with optional additional filters parameters"""
|
|
65
|
+
|
|
66
|
+
name: str = (
|
|
67
|
+
"resource_definitions.list_by_keys" # Action type for roundtrip compatibility
|
|
68
|
+
)
|
|
69
|
+
keys: Optional[Any] = None # keys parameter
|
|
70
|
+
thread_id: Optional[Union[str, TemplateString]] = None # thread_id parameter
|
|
71
|
+
dataset_id: Optional[Union[str, TemplateString]] = None # dataset_id parameter
|
|
72
|
+
integration_id: Optional[Union[str, TemplateString]] = (
|
|
73
|
+
None # integration_id parameter
|
|
74
|
+
)
|
|
75
|
+
integration_config_id: Optional[Union[str, TemplateString]] = (
|
|
76
|
+
None # integration_config_id parameter
|
|
77
|
+
)
|
|
78
|
+
attach_type: Optional[Union[str, TemplateString]] = None # attach_type parameter
|
|
79
|
+
limit: Optional[Union[int, TemplateString]] = None # limit parameter
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class SearchFromQueriesParams(BaseActionParams):
|
|
83
|
+
"""Search resource definitions using multiple queries including integration-specific queries parameters"""
|
|
84
|
+
|
|
85
|
+
name: str = (
|
|
86
|
+
"resource_definitions.search_from_queries" # Action type for roundtrip compatibility
|
|
87
|
+
)
|
|
88
|
+
integration_queries: Optional[Any] = None # integration_queries parameter
|
|
89
|
+
or_keys: Optional[Any] = None # or_keys parameter
|
|
90
|
+
and_keys: Optional[Any] = None # and_keys parameter
|
|
91
|
+
thread_id: Optional[Union[str, TemplateString]] = None # thread_id parameter
|
|
92
|
+
limit: Optional[Union[int, TemplateString]] = None # limit parameter
|
|
93
|
+
authorizers: Optional[Any] = None # authorizers parameter
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class SearchResult(BaseModel):
|
|
97
|
+
"""Search for resource definitions using query and key filters result type
|
|
98
|
+
|
|
99
|
+
Result schema for resource_definitions.search action.
|
|
100
|
+
"""
|
|
101
|
+
|
|
102
|
+
resource_definitions: List[Resource]
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class ListResult(BaseModel):
|
|
106
|
+
"""List resource definitions with optional filtering by dataset, integration, or attach type result type
|
|
107
|
+
|
|
108
|
+
Result schema for resource_definitions.list action.
|
|
109
|
+
"""
|
|
110
|
+
|
|
111
|
+
resource_definitions: List[Resource]
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class ListByKeysResult(BaseModel):
|
|
115
|
+
"""List resource definitions filtered by specific keys with optional additional filters result type
|
|
116
|
+
|
|
117
|
+
Result schema for resource_definitions.list_by_keys action.
|
|
118
|
+
"""
|
|
119
|
+
|
|
120
|
+
resource_definitions: List[Resource]
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
class SearchFromQueriesResult(BaseModel):
|
|
124
|
+
"""Search resource definitions using multiple queries including integration-specific queries result type
|
|
125
|
+
|
|
126
|
+
Generic result schema for resource_definitions.search_from_queries action.
|
|
127
|
+
"""
|
|
128
|
+
|
|
129
|
+
success: bool = True # Whether the action was successful
|
|
130
|
+
|
|
131
|
+
class Config:
|
|
132
|
+
extra = "allow" # Allow additional fields dynamically
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def search(
|
|
136
|
+
query: Optional[Union[str, TemplateString]] = None,
|
|
137
|
+
or_keys: Optional[Any] = None,
|
|
138
|
+
and_keys: Optional[Any] = None,
|
|
139
|
+
thread_id: Optional[Union[str, TemplateString]] = None,
|
|
140
|
+
dataset_id: Optional[Union[str, TemplateString]] = None,
|
|
141
|
+
integration_id: Optional[Union[str, TemplateString]] = None,
|
|
142
|
+
integration_config_id: Optional[Union[str, TemplateString]] = None,
|
|
143
|
+
limit: Optional[Union[int, TemplateString]] = None,
|
|
144
|
+
**params: Any,
|
|
145
|
+
) -> SearchParams:
|
|
146
|
+
"""Search for resource definitions using query and key filters
|
|
147
|
+
|
|
148
|
+
Args:
|
|
149
|
+
query: query parameter
|
|
150
|
+
or_keys: or_keys parameter
|
|
151
|
+
and_keys: and_keys parameter
|
|
152
|
+
thread_id: thread_id parameter
|
|
153
|
+
dataset_id: dataset_id parameter
|
|
154
|
+
integration_id: integration_id parameter
|
|
155
|
+
integration_config_id: integration_config_id parameter
|
|
156
|
+
limit: limit parameter
|
|
157
|
+
|
|
158
|
+
Returns:
|
|
159
|
+
SearchParams: Type-safe parameter object
|
|
160
|
+
"""
|
|
161
|
+
param_dict = {
|
|
162
|
+
"query": query,
|
|
163
|
+
"or_keys": or_keys,
|
|
164
|
+
"and_keys": and_keys,
|
|
165
|
+
"thread_id": thread_id,
|
|
166
|
+
"dataset_id": dataset_id,
|
|
167
|
+
"integration_id": integration_id,
|
|
168
|
+
"integration_config_id": integration_config_id,
|
|
169
|
+
"limit": limit,
|
|
170
|
+
}
|
|
171
|
+
# Remove None values for optional parameters
|
|
172
|
+
param_dict = {k: v for k, v in param_dict.items() if v is not None}
|
|
173
|
+
param_dict.update(params)
|
|
174
|
+
params_obj = SearchParams(**param_dict)
|
|
175
|
+
return params_obj
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def list(
|
|
179
|
+
thread_id: Optional[Union[str, TemplateString]] = None,
|
|
180
|
+
dataset_id: Optional[Union[str, TemplateString]] = None,
|
|
181
|
+
integration_id: Optional[Union[str, TemplateString]] = None,
|
|
182
|
+
integration_config_id: Optional[Union[str, TemplateString]] = None,
|
|
183
|
+
attach_type: Optional[Union[str, TemplateString]] = None,
|
|
184
|
+
limit: Optional[Union[int, TemplateString]] = None,
|
|
185
|
+
**params: Any,
|
|
186
|
+
) -> ListParams:
|
|
187
|
+
"""List resource definitions with optional filtering by dataset, integration, or attach type
|
|
188
|
+
|
|
189
|
+
Args:
|
|
190
|
+
thread_id: thread_id parameter
|
|
191
|
+
dataset_id: dataset_id parameter
|
|
192
|
+
integration_id: integration_id parameter
|
|
193
|
+
integration_config_id: integration_config_id parameter
|
|
194
|
+
attach_type: attach_type parameter
|
|
195
|
+
limit: limit parameter
|
|
196
|
+
|
|
197
|
+
Returns:
|
|
198
|
+
ListParams: Type-safe parameter object
|
|
199
|
+
"""
|
|
200
|
+
param_dict = {
|
|
201
|
+
"thread_id": thread_id,
|
|
202
|
+
"dataset_id": dataset_id,
|
|
203
|
+
"integration_id": integration_id,
|
|
204
|
+
"integration_config_id": integration_config_id,
|
|
205
|
+
"attach_type": attach_type,
|
|
206
|
+
"limit": limit,
|
|
207
|
+
}
|
|
208
|
+
# Remove None values for optional parameters
|
|
209
|
+
param_dict = {k: v for k, v in param_dict.items() if v is not None}
|
|
210
|
+
param_dict.update(params)
|
|
211
|
+
params_obj = ListParams(**param_dict)
|
|
212
|
+
return params_obj
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def list_by_keys(
|
|
216
|
+
keys: Optional[Any] = None,
|
|
217
|
+
thread_id: Optional[Union[str, TemplateString]] = None,
|
|
218
|
+
dataset_id: Optional[Union[str, TemplateString]] = None,
|
|
219
|
+
integration_id: Optional[Union[str, TemplateString]] = None,
|
|
220
|
+
integration_config_id: Optional[Union[str, TemplateString]] = None,
|
|
221
|
+
attach_type: Optional[Union[str, TemplateString]] = None,
|
|
222
|
+
limit: Optional[Union[int, TemplateString]] = None,
|
|
223
|
+
**params: Any,
|
|
224
|
+
) -> ListByKeysParams:
|
|
225
|
+
"""List resource definitions filtered by specific keys with optional additional filters
|
|
226
|
+
|
|
227
|
+
Args:
|
|
228
|
+
keys: keys parameter
|
|
229
|
+
thread_id: thread_id parameter
|
|
230
|
+
dataset_id: dataset_id parameter
|
|
231
|
+
integration_id: integration_id parameter
|
|
232
|
+
integration_config_id: integration_config_id parameter
|
|
233
|
+
attach_type: attach_type parameter
|
|
234
|
+
limit: limit parameter
|
|
235
|
+
|
|
236
|
+
Returns:
|
|
237
|
+
ListByKeysParams: Type-safe parameter object
|
|
238
|
+
"""
|
|
239
|
+
param_dict = {
|
|
240
|
+
"keys": keys,
|
|
241
|
+
"thread_id": thread_id,
|
|
242
|
+
"dataset_id": dataset_id,
|
|
243
|
+
"integration_id": integration_id,
|
|
244
|
+
"integration_config_id": integration_config_id,
|
|
245
|
+
"attach_type": attach_type,
|
|
246
|
+
"limit": limit,
|
|
247
|
+
}
|
|
248
|
+
# Remove None values for optional parameters
|
|
249
|
+
param_dict = {k: v for k, v in param_dict.items() if v is not None}
|
|
250
|
+
param_dict.update(params)
|
|
251
|
+
params_obj = ListByKeysParams(**param_dict)
|
|
252
|
+
return params_obj
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
def search_from_queries(
|
|
256
|
+
integration_queries: Optional[Any] = None,
|
|
257
|
+
or_keys: Optional[Any] = None,
|
|
258
|
+
and_keys: Optional[Any] = None,
|
|
259
|
+
thread_id: Optional[Union[str, TemplateString]] = None,
|
|
260
|
+
limit: Optional[Union[int, TemplateString]] = None,
|
|
261
|
+
authorizers: Optional[Any] = None,
|
|
262
|
+
**params: Any,
|
|
263
|
+
) -> SearchFromQueriesParams:
|
|
264
|
+
"""Search resource definitions using multiple queries including integration-specific queries
|
|
265
|
+
|
|
266
|
+
Args:
|
|
267
|
+
integration_queries: integration_queries parameter
|
|
268
|
+
or_keys: or_keys parameter
|
|
269
|
+
and_keys: and_keys parameter
|
|
270
|
+
thread_id: thread_id parameter
|
|
271
|
+
limit: limit parameter
|
|
272
|
+
authorizers: authorizers parameter
|
|
273
|
+
|
|
274
|
+
Returns:
|
|
275
|
+
SearchFromQueriesParams: Type-safe parameter object
|
|
276
|
+
"""
|
|
277
|
+
param_dict = {
|
|
278
|
+
"integration_queries": integration_queries,
|
|
279
|
+
"or_keys": or_keys,
|
|
280
|
+
"and_keys": and_keys,
|
|
281
|
+
"thread_id": thread_id,
|
|
282
|
+
"limit": limit,
|
|
283
|
+
"authorizers": authorizers,
|
|
284
|
+
}
|
|
285
|
+
# Remove None values for optional parameters
|
|
286
|
+
param_dict = {k: v for k, v in param_dict.items() if v is not None}
|
|
287
|
+
param_dict.update(params)
|
|
288
|
+
params_obj = SearchFromQueriesParams(**param_dict)
|
|
289
|
+
return params_obj
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
# Associate parameter classes with their result types
|
|
293
|
+
SearchParams._result = SearchResult
|
|
294
|
+
ListParams._result = ListResult
|
|
295
|
+
ListByKeysParams._result = ListByKeysResult
|
|
296
|
+
SearchFromQueriesParams._result = SearchFromQueriesResult
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"""
|
|
2
|
+
SQL execution actions for running queries against database integrations service functions.
|
|
3
|
+
Auto-generated - DO NOT EDIT.
|
|
4
|
+
|
|
5
|
+
Provides type-safe action definitions for sqlexec service.
|
|
6
|
+
Actual execution happens in the Go backend after syncing.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from typing import Any, List, Optional, Union
|
|
10
|
+
|
|
11
|
+
from pydantic import BaseModel
|
|
12
|
+
|
|
13
|
+
from erdo.template import TemplateString
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class BaseActionParams(BaseModel):
|
|
17
|
+
"""Base class for all action parameter classes.
|
|
18
|
+
|
|
19
|
+
Provides common fields that all actions support:
|
|
20
|
+
- name: The action type identifier
|
|
21
|
+
- step_metadata: Optional configuration for the step created from this action
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
name: str
|
|
25
|
+
step_metadata: Optional[Any] = None
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class ExecuteParams(BaseActionParams):
|
|
29
|
+
"""Execute SQL queries against database integrations and return structured results parameters"""
|
|
30
|
+
|
|
31
|
+
name: str = "sqlexec.execute" # Action type for roundtrip compatibility
|
|
32
|
+
query: Optional[Union[str, TemplateString]] = None # query parameter
|
|
33
|
+
dataset_slug: Optional[Union[str, TemplateString]] = None # dataset_slug parameter
|
|
34
|
+
resource: Optional[Any] = None # resource parameter
|
|
35
|
+
store_results: Optional[Union[bool, TemplateString]] = (
|
|
36
|
+
None # store_results parameter
|
|
37
|
+
)
|
|
38
|
+
encryption_key: Optional[Union[str, TemplateString]] = (
|
|
39
|
+
None # encryption_key parameter
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class ExecuteResult(BaseModel):
|
|
44
|
+
"""Execute SQL queries against database integrations and return structured results result type
|
|
45
|
+
|
|
46
|
+
Result schema for sqlexec.execute action.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
columns: List[str]
|
|
50
|
+
rows: List[List[Any]]
|
|
51
|
+
row_count: float
|
|
52
|
+
error: Optional[str]
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def execute(
|
|
56
|
+
query: Optional[Union[str, TemplateString]] = None,
|
|
57
|
+
dataset_slug: Optional[Union[str, TemplateString]] = None,
|
|
58
|
+
resource: Optional[Any] = None,
|
|
59
|
+
store_results: Optional[Union[bool, TemplateString]] = None,
|
|
60
|
+
encryption_key: Optional[Union[str, TemplateString]] = None,
|
|
61
|
+
**params: Any,
|
|
62
|
+
) -> ExecuteParams:
|
|
63
|
+
"""Execute SQL queries against database integrations and return structured results
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
query: query parameter
|
|
67
|
+
dataset_slug: dataset_slug parameter
|
|
68
|
+
resource: resource parameter
|
|
69
|
+
store_results: store_results parameter
|
|
70
|
+
encryption_key: encryption_key parameter
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
ExecuteParams: Type-safe parameter object
|
|
74
|
+
"""
|
|
75
|
+
param_dict = {
|
|
76
|
+
"query": query,
|
|
77
|
+
"dataset_slug": dataset_slug,
|
|
78
|
+
"resource": resource,
|
|
79
|
+
"store_results": store_results,
|
|
80
|
+
"encryption_key": encryption_key,
|
|
81
|
+
}
|
|
82
|
+
# Remove None values for optional parameters
|
|
83
|
+
param_dict = {k: v for k, v in param_dict.items() if v is not None}
|
|
84
|
+
param_dict.update(params)
|
|
85
|
+
params_obj = ExecuteParams(**param_dict)
|
|
86
|
+
return params_obj
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
# Associate parameter classes with their result types
|
|
90
|
+
ExecuteParams._result = ExecuteResult
|