atlan-application-sdk 0.1.1rc39__py3-none-any.whl → 0.1.1rc41__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.
- application_sdk/activities/.cursor/BUGBOT.md +424 -0
- application_sdk/activities/metadata_extraction/sql.py +400 -25
- application_sdk/application/__init__.py +2 -0
- application_sdk/application/metadata_extraction/sql.py +3 -0
- application_sdk/clients/.cursor/BUGBOT.md +280 -0
- application_sdk/clients/models.py +42 -0
- application_sdk/clients/sql.py +127 -87
- application_sdk/clients/temporal.py +3 -1
- application_sdk/common/.cursor/BUGBOT.md +316 -0
- application_sdk/common/aws_utils.py +259 -11
- application_sdk/common/utils.py +145 -9
- application_sdk/constants.py +8 -0
- application_sdk/decorators/.cursor/BUGBOT.md +279 -0
- application_sdk/handlers/__init__.py +8 -1
- application_sdk/handlers/sql.py +63 -22
- application_sdk/inputs/.cursor/BUGBOT.md +250 -0
- application_sdk/interceptors/.cursor/BUGBOT.md +320 -0
- application_sdk/interceptors/cleanup.py +171 -0
- application_sdk/interceptors/events.py +6 -6
- application_sdk/observability/decorators/observability_decorator.py +36 -22
- application_sdk/outputs/.cursor/BUGBOT.md +295 -0
- application_sdk/outputs/iceberg.py +4 -0
- application_sdk/outputs/json.py +6 -0
- application_sdk/outputs/parquet.py +13 -3
- application_sdk/server/.cursor/BUGBOT.md +442 -0
- application_sdk/server/fastapi/__init__.py +59 -3
- application_sdk/server/fastapi/models.py +27 -0
- application_sdk/services/objectstore.py +16 -3
- application_sdk/version.py +1 -1
- application_sdk/workflows/.cursor/BUGBOT.md +218 -0
- {atlan_application_sdk-0.1.1rc39.dist-info → atlan_application_sdk-0.1.1rc41.dist-info}/METADATA +1 -1
- {atlan_application_sdk-0.1.1rc39.dist-info → atlan_application_sdk-0.1.1rc41.dist-info}/RECORD +35 -24
- {atlan_application_sdk-0.1.1rc39.dist-info → atlan_application_sdk-0.1.1rc41.dist-info}/WHEEL +0 -0
- {atlan_application_sdk-0.1.1rc39.dist-info → atlan_application_sdk-0.1.1rc41.dist-info}/licenses/LICENSE +0 -0
- {atlan_application_sdk-0.1.1rc39.dist-info → atlan_application_sdk-0.1.1rc41.dist-info}/licenses/NOTICE +0 -0
|
@@ -208,7 +208,15 @@ class ObjectStore:
|
|
|
208
208
|
"""
|
|
209
209
|
try:
|
|
210
210
|
# First, list all files under the prefix
|
|
211
|
-
|
|
211
|
+
try:
|
|
212
|
+
files_to_delete = await cls.list_files(
|
|
213
|
+
prefix=prefix, store_name=store_name
|
|
214
|
+
)
|
|
215
|
+
except Exception as e:
|
|
216
|
+
# If we can't list files for any reason, we can't delete them either
|
|
217
|
+
# Raise FileNotFoundError to give developers clear feedback
|
|
218
|
+
logger.info(f"Cannot list files under prefix {prefix}: {str(e)}")
|
|
219
|
+
raise FileNotFoundError(f"No files found under prefix: {prefix}")
|
|
212
220
|
|
|
213
221
|
if not files_to_delete:
|
|
214
222
|
logger.info(f"No files found under prefix: {prefix}")
|
|
@@ -236,6 +244,7 @@ class ObjectStore:
|
|
|
236
244
|
source: str,
|
|
237
245
|
destination: str,
|
|
238
246
|
store_name: str = DEPLOYMENT_OBJECT_STORE_NAME,
|
|
247
|
+
retain_local_copy: bool = False,
|
|
239
248
|
) -> None:
|
|
240
249
|
"""Upload a single file to the object store.
|
|
241
250
|
|
|
@@ -277,7 +286,8 @@ class ObjectStore:
|
|
|
277
286
|
raise e
|
|
278
287
|
|
|
279
288
|
# Clean up local file after successful upload
|
|
280
|
-
|
|
289
|
+
if not retain_local_copy:
|
|
290
|
+
cls._cleanup_local_path(source)
|
|
281
291
|
|
|
282
292
|
@classmethod
|
|
283
293
|
async def upload_prefix(
|
|
@@ -286,6 +296,7 @@ class ObjectStore:
|
|
|
286
296
|
destination: str,
|
|
287
297
|
store_name: str = DEPLOYMENT_OBJECT_STORE_NAME,
|
|
288
298
|
recursive: bool = True,
|
|
299
|
+
retain_local_copy: bool = False,
|
|
289
300
|
) -> None:
|
|
290
301
|
"""Upload all files from a directory to the object store.
|
|
291
302
|
|
|
@@ -333,7 +344,9 @@ class ObjectStore:
|
|
|
333
344
|
store_key = os.path.join(destination, relative_path).replace(
|
|
334
345
|
os.sep, "/"
|
|
335
346
|
)
|
|
336
|
-
await cls.upload_file(
|
|
347
|
+
await cls.upload_file(
|
|
348
|
+
file_path, store_key, store_name, retain_local_copy
|
|
349
|
+
)
|
|
337
350
|
|
|
338
351
|
logger.info(f"Completed uploading directory {source} to object store")
|
|
339
352
|
except Exception as e:
|
application_sdk/version.py
CHANGED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# Workflow Code Review Guidelines - Temporal Workflows
|
|
2
|
+
|
|
3
|
+
## Context-Specific Patterns
|
|
4
|
+
|
|
5
|
+
This directory contains Temporal workflow definitions and orchestration logic. Workflows must be deterministic, resilient, and handle long-running processes gracefully.
|
|
6
|
+
|
|
7
|
+
### Phase 1: Critical Workflow Safety Issues
|
|
8
|
+
|
|
9
|
+
**Determinism Requirements (CRITICAL):**
|
|
10
|
+
|
|
11
|
+
- Workflows MUST be deterministic - same inputs always produce same sequence of decisions
|
|
12
|
+
- No random number generation, system time calls, or external API calls in workflow code
|
|
13
|
+
- No file I/O, database queries, or network calls directly in workflows
|
|
14
|
+
- All non-deterministic operations must be delegated to activities
|
|
15
|
+
- Thread-safe operations only - no global state mutation
|
|
16
|
+
|
|
17
|
+
**Example Determinism Violations:**
|
|
18
|
+
|
|
19
|
+
```python
|
|
20
|
+
# ❌ NEVER: Non-deterministic operations in workflows
|
|
21
|
+
async def process_data_workflow(data: dict):
|
|
22
|
+
timestamp = datetime.now() # Non-deterministic!
|
|
23
|
+
random_id = uuid.uuid4() # Non-deterministic!
|
|
24
|
+
user_data = await fetch_user_api(data['user_id']) # External call!
|
|
25
|
+
|
|
26
|
+
# ✅ DO: Delegate to activities
|
|
27
|
+
async def process_data_workflow(data: dict):
|
|
28
|
+
# All external operations via activities
|
|
29
|
+
timestamp = await workflow.execute_activity(
|
|
30
|
+
get_current_timestamp,
|
|
31
|
+
schedule_to_close_timeout=timedelta(seconds=10)
|
|
32
|
+
)
|
|
33
|
+
user_data = await workflow.execute_activity(
|
|
34
|
+
fetch_user_activity,
|
|
35
|
+
data['user_id'],
|
|
36
|
+
schedule_to_close_timeout=timedelta(minutes=5)
|
|
37
|
+
)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Workflow State Management:**
|
|
41
|
+
|
|
42
|
+
- All workflow data must be serializable (JSON-compatible)
|
|
43
|
+
- No complex objects that can't be reliably serialized/deserialized
|
|
44
|
+
- Workflow parameters and return values must use Pydantic models
|
|
45
|
+
- State changes must be explicit and traceable
|
|
46
|
+
- No mutable shared state between workflow executions
|
|
47
|
+
|
|
48
|
+
### Phase 2: Workflow Architecture Patterns
|
|
49
|
+
|
|
50
|
+
**Activity Execution Patterns:**
|
|
51
|
+
|
|
52
|
+
- All activities must have explicit timeouts (schedule_to_close_timeout)
|
|
53
|
+
- Retry policies must be defined for activities that can fail
|
|
54
|
+
- Use appropriate heartbeat timeouts for long-running activities
|
|
55
|
+
- Error handling must distinguish between retryable and non-retryable errors
|
|
56
|
+
|
|
57
|
+
```python
|
|
58
|
+
# ✅ DO: Proper activity execution with timeouts and retries
|
|
59
|
+
await workflow.execute_activity(
|
|
60
|
+
extract_metadata_activity,
|
|
61
|
+
connection_config,
|
|
62
|
+
schedule_to_close_timeout=timedelta(minutes=30),
|
|
63
|
+
retry_policy=RetryPolicy(
|
|
64
|
+
initial_interval=timedelta(seconds=1),
|
|
65
|
+
maximum_interval=timedelta(minutes=1),
|
|
66
|
+
maximum_attempts=3,
|
|
67
|
+
non_retryable_error_types=["ValidationError"]
|
|
68
|
+
)
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
# ❌ NEVER: Activity without proper configuration
|
|
72
|
+
await workflow.execute_activity(process_data) # No timeout, no retry policy
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Workflow Composition:**
|
|
76
|
+
|
|
77
|
+
- Break complex workflows into smaller, reusable sub-workflows
|
|
78
|
+
- Use child workflows for independent business processes
|
|
79
|
+
- Implement proper cancellation handling
|
|
80
|
+
- Use workflow signals for external event handling
|
|
81
|
+
- Design workflows to be resumable after interruption
|
|
82
|
+
|
|
83
|
+
### Phase 3: Workflow Testing Requirements
|
|
84
|
+
|
|
85
|
+
**Workflow Testing Standards:**
|
|
86
|
+
|
|
87
|
+
- Use Temporal's test framework for workflow unit tests
|
|
88
|
+
- Mock activities in workflow tests
|
|
89
|
+
- Test workflow failure and retry scenarios
|
|
90
|
+
- Test workflow cancellation and timeout behaviors
|
|
91
|
+
- Verify workflow determinism with replay tests
|
|
92
|
+
- Include integration tests with real activities
|
|
93
|
+
|
|
94
|
+
**Activity Testing:**
|
|
95
|
+
|
|
96
|
+
- Test activities independently from workflows
|
|
97
|
+
- Mock external dependencies in activity tests
|
|
98
|
+
- Test activity timeout and retry behaviors
|
|
99
|
+
- Verify proper error handling and logging
|
|
100
|
+
- Include performance tests for long-running activities
|
|
101
|
+
|
|
102
|
+
### Phase 4: Performance and Scalability
|
|
103
|
+
|
|
104
|
+
**Workflow Performance:**
|
|
105
|
+
|
|
106
|
+
- Minimize workflow execution time - delegate work to activities
|
|
107
|
+
- Avoid deeply nested workflow structures
|
|
108
|
+
- Use parallel activity execution where possible
|
|
109
|
+
- Implement proper batching for bulk operations
|
|
110
|
+
- Monitor workflow execution metrics and duration
|
|
111
|
+
|
|
112
|
+
**Resource Management:**
|
|
113
|
+
|
|
114
|
+
- Activities must clean up resources (connections, files, etc.)
|
|
115
|
+
- Implement proper timeout handling to prevent resource leaks
|
|
116
|
+
- Use connection pooling in activities, not workflows
|
|
117
|
+
- Monitor memory usage in long-running workflows
|
|
118
|
+
- Implement proper backpressure handling
|
|
119
|
+
|
|
120
|
+
### Phase 5: Workflow Maintainability
|
|
121
|
+
|
|
122
|
+
**Workflow Versioning:**
|
|
123
|
+
|
|
124
|
+
- All workflow changes must be backward compatible
|
|
125
|
+
- Use workflow versioning for breaking changes
|
|
126
|
+
- Document workflow version migration paths
|
|
127
|
+
- Test workflow compatibility across versions
|
|
128
|
+
- Implement graceful handling of version mismatches
|
|
129
|
+
|
|
130
|
+
**Error Handling and Observability:**
|
|
131
|
+
|
|
132
|
+
- All workflow failures must be logged with context
|
|
133
|
+
- Include workflow execution ID in all log messages
|
|
134
|
+
- Implement proper metrics for workflow success/failure rates
|
|
135
|
+
- Use structured logging for workflow events
|
|
136
|
+
- Include tracing information for debugging
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Workflow-Specific Anti-Patterns
|
|
141
|
+
|
|
142
|
+
**Always Reject:**
|
|
143
|
+
|
|
144
|
+
- Non-deterministic operations in workflow code
|
|
145
|
+
- Direct database or API calls from workflows
|
|
146
|
+
- Missing timeouts on activity executions
|
|
147
|
+
- Workflows without proper error handling
|
|
148
|
+
- Global state mutation in workflows
|
|
149
|
+
- Synchronous operations in async workflows
|
|
150
|
+
- Activities without retry policies
|
|
151
|
+
- Workflows without proper logging
|
|
152
|
+
|
|
153
|
+
**Determinism Anti-Patterns:**
|
|
154
|
+
|
|
155
|
+
```python
|
|
156
|
+
# ❌ REJECT: Non-deterministic workflow code
|
|
157
|
+
@workflow.defn
|
|
158
|
+
class BadWorkflow:
|
|
159
|
+
async def run(self, data: dict):
|
|
160
|
+
# All of these break determinism
|
|
161
|
+
current_time = datetime.now()
|
|
162
|
+
random_value = random.random()
|
|
163
|
+
file_content = open('config.txt').read()
|
|
164
|
+
api_response = requests.get('http://api.example.com')
|
|
165
|
+
|
|
166
|
+
# ✅ REQUIRE: Deterministic workflow with activities
|
|
167
|
+
@workflow.defn
|
|
168
|
+
class GoodWorkflow:
|
|
169
|
+
async def run(self, data: dict):
|
|
170
|
+
# Delegate all non-deterministic operations to activities
|
|
171
|
+
current_time = await workflow.execute_activity(
|
|
172
|
+
get_current_timestamp_activity,
|
|
173
|
+
schedule_to_close_timeout=timedelta(seconds=5)
|
|
174
|
+
)
|
|
175
|
+
config = await workflow.execute_activity(
|
|
176
|
+
read_config_activity,
|
|
177
|
+
schedule_to_close_timeout=timedelta(seconds=10)
|
|
178
|
+
)
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**Activity Execution Anti-Patterns:**
|
|
182
|
+
|
|
183
|
+
```python
|
|
184
|
+
# ❌ REJECT: Poor activity configuration
|
|
185
|
+
async def bad_workflow():
|
|
186
|
+
# No timeout, no retry policy, no error handling
|
|
187
|
+
result = await workflow.execute_activity(critical_operation)
|
|
188
|
+
|
|
189
|
+
# ✅ REQUIRE: Proper activity execution
|
|
190
|
+
async def good_workflow():
|
|
191
|
+
try:
|
|
192
|
+
result = await workflow.execute_activity(
|
|
193
|
+
critical_operation,
|
|
194
|
+
schedule_to_close_timeout=timedelta(minutes=10),
|
|
195
|
+
retry_policy=RetryPolicy(
|
|
196
|
+
maximum_attempts=3,
|
|
197
|
+
non_retryable_error_types=["ValidationError"]
|
|
198
|
+
)
|
|
199
|
+
)
|
|
200
|
+
except ActivityError as e:
|
|
201
|
+
# Proper error handling with context
|
|
202
|
+
workflow.logger.error(f"Activity failed: {e}", extra={"workflow_id": workflow.info().workflow_id})
|
|
203
|
+
raise
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Educational Context for Workflow Reviews
|
|
207
|
+
|
|
208
|
+
When reviewing workflow code, emphasize:
|
|
209
|
+
|
|
210
|
+
1. **Determinism Impact**: "Workflow determinism isn't just a best practice - it's required for Temporal's replay mechanism to work correctly. Non-deterministic workflows can cause infinite replay loops and corrupt execution history."
|
|
211
|
+
|
|
212
|
+
2. **Resilience Impact**: "Proper timeout and retry configuration determines whether temporary failures cause workflow abandonment or graceful recovery. At enterprise scale, workflows must handle infrastructure failures transparently."
|
|
213
|
+
|
|
214
|
+
3. **Performance Impact**: "Workflows should orchestrate, not execute. Heavy computation in workflows blocks the task queue and reduces overall system throughput. Always delegate work to activities."
|
|
215
|
+
|
|
216
|
+
4. **Maintainability Impact**: "Workflow versioning and backward compatibility are essential for production systems. Breaking workflow compatibility can leave running executions in an unrecoverable state."
|
|
217
|
+
|
|
218
|
+
5. **Observability Impact**: "Workflow logging and metrics are critical for debugging long-running processes. Proper observability makes the difference between quick problem resolution and hours of investigation."
|
{atlan_application_sdk-0.1.1rc39.dist-info → atlan_application_sdk-0.1.1rc41.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atlan-application-sdk
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.1rc41
|
|
4
4
|
Summary: Atlan Application SDK is a Python library for developing applications on the Atlan Platform
|
|
5
5
|
Project-URL: Repository, https://github.com/atlanhq/application-sdk
|
|
6
6
|
Project-URL: Documentation, https://github.com/atlanhq/application-sdk/README.md
|
{atlan_application_sdk-0.1.1rc39.dist-info → atlan_application_sdk-0.1.1rc41.dist-info}/RECORD
RENAMED
|
@@ -1,37 +1,42 @@
|
|
|
1
1
|
application_sdk/__init__.py,sha256=2e2mvmLJ5dxmJGPELtb33xwP-j6JMdoIuqKycEn7hjg,151
|
|
2
|
-
application_sdk/constants.py,sha256=
|
|
3
|
-
application_sdk/version.py,sha256=
|
|
2
|
+
application_sdk/constants.py,sha256=1THiejjOEgm4kHFN-PrwrUkfRk7q1pjOLWLm-t2ph1Q,10674
|
|
3
|
+
application_sdk/version.py,sha256=zV2HH6SOEd5nUl8rfci_44ydqpKFM-6ShVxYm8ggtCk,88
|
|
4
4
|
application_sdk/worker.py,sha256=i5f0AeKI39IfsLO05QkwC6uMz0zDPSJqP7B2byri1VI,7489
|
|
5
5
|
application_sdk/activities/__init__.py,sha256=QaXLOBYbb0zPOY5kfDQh56qbXQFaYNXOjJ5PCvatiZ4,9530
|
|
6
6
|
application_sdk/activities/lock_management.py,sha256=L__GZ9BsArwU1ntYwAgCKsSjCqN6QBeOfT-OT4WyD4Y,3983
|
|
7
|
+
application_sdk/activities/.cursor/BUGBOT.md,sha256=FNykX5aMkdOhzgpiGqstOnSp9JN63iR2XP3onU4AGh8,15843
|
|
7
8
|
application_sdk/activities/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
9
|
application_sdk/activities/common/models.py,sha256=LIZfWvTtgtbAUvvn-rwrPQgD7fP2J0Gxdxr_ITgw-jM,1243
|
|
9
10
|
application_sdk/activities/common/utils.py,sha256=F4Fq9Gl_gvUQj_fSdwzTU7obqUnemYL1dgb_yS34vTM,6967
|
|
10
11
|
application_sdk/activities/metadata_extraction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
12
|
application_sdk/activities/metadata_extraction/base.py,sha256=ENFojpxqKdN_eVSL4iet3cGfylPOfcl1jnflfo4zhs8,3920
|
|
12
13
|
application_sdk/activities/metadata_extraction/rest.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
|
-
application_sdk/activities/metadata_extraction/sql.py,sha256=
|
|
14
|
+
application_sdk/activities/metadata_extraction/sql.py,sha256=02u1KXT0EViqKRhYoJ-aYytohAu4IbmTe_JPyC3axTw,35898
|
|
14
15
|
application_sdk/activities/query_extraction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
16
|
application_sdk/activities/query_extraction/sql.py,sha256=mesGP_kiWzrJ8wboWFVt2jbDuGG_Fl3kQVvVMdH3KWA,21228
|
|
16
|
-
application_sdk/application/__init__.py,sha256=
|
|
17
|
-
application_sdk/application/metadata_extraction/sql.py,sha256=
|
|
17
|
+
application_sdk/application/__init__.py,sha256=PbSImXYaQQ2IIee2SvI8AjDiSo2QcCFrM1PX3x-_RQs,8035
|
|
18
|
+
application_sdk/application/metadata_extraction/sql.py,sha256=rOd06Wodr4GyzupCYxVSCsNcuNar1rJM66ej9vocNHw,8138
|
|
18
19
|
application_sdk/clients/__init__.py,sha256=C9T84J7V6ZumcoWJPAxdd3tqSmbyciaGBJn-CaCCny0,1341
|
|
19
20
|
application_sdk/clients/atlan.py,sha256=l6yV39fr1006SJFwkOTNDQlbSFlHCZQaUPfdUlzdVEg,5053
|
|
20
21
|
application_sdk/clients/atlan_auth.py,sha256=D7FuNqv81ohNXLJtdx1AFw_jU6a3g0Pw6149ia4ucFY,8930
|
|
21
22
|
application_sdk/clients/base.py,sha256=TIn3pG89eXUc1XSYf4jk66m1vajWp0WxcCQOOltdazA,14021
|
|
23
|
+
application_sdk/clients/models.py,sha256=yPgmiqt3I7am2NdFF10BnKiwfgjLceEXrpie0rvGCg8,1509
|
|
22
24
|
application_sdk/clients/redis.py,sha256=IfAD32vLp88BCvsDTaQtxFHxzHlEx4V7TK7h1HwDDBg,15917
|
|
23
|
-
application_sdk/clients/sql.py,sha256=
|
|
24
|
-
application_sdk/clients/temporal.py,sha256=
|
|
25
|
+
application_sdk/clients/sql.py,sha256=r-8rghnATLRxxISchLZaNnMCAZMRLKyPAwPZengzMMY,19846
|
|
26
|
+
application_sdk/clients/temporal.py,sha256=g7DXlnMLlWOHAdyXB0TCDx0aWdAwjazDnIbMgNNgKgw,18359
|
|
25
27
|
application_sdk/clients/utils.py,sha256=zLFOJbTr_6TOqnjfVFGY85OtIXZ4FQy_rquzjaydkbY,779
|
|
26
28
|
application_sdk/clients/workflow.py,sha256=6bSqmA3sNCk9oY68dOjBUDZ9DhNKQxPD75qqE0cfldc,6104
|
|
29
|
+
application_sdk/clients/.cursor/BUGBOT.md,sha256=7nEDUqWBEMI_uU6eK1jCSZGeXoQtLQcKwOrDn8AIDWo,10595
|
|
27
30
|
application_sdk/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
|
-
application_sdk/common/aws_utils.py,sha256=
|
|
31
|
+
application_sdk/common/aws_utils.py,sha256=xlSMIQyjvQ-CydEXaxXrnPUygv7AAbCLsxhZ2wtKnzg,11219
|
|
29
32
|
application_sdk/common/dapr_utils.py,sha256=0yHqDP6qNb1OT-bX2XRYQPZ5xkGkV13nyRw6GkPlHs8,1136
|
|
30
33
|
application_sdk/common/dataframe_utils.py,sha256=PId9vT6AUoq3tesiTd4sSUvW7RUhPWdAAEBLuOprks4,1262
|
|
31
34
|
application_sdk/common/error_codes.py,sha256=bxgvugN_0H5b8VXfJw-44mybgX5I9lRJbRdYjtPjqDI,14561
|
|
32
|
-
application_sdk/common/utils.py,sha256=
|
|
35
|
+
application_sdk/common/utils.py,sha256=ImCrlyCj5Mj571CVWfqy5MynVVju9xhn1ItSlJoaebc,19572
|
|
36
|
+
application_sdk/common/.cursor/BUGBOT.md,sha256=OkB5TMAEJFzaBfbNb3g9ZDPW2r1krQE_KEuJbytMPuI,12176
|
|
33
37
|
application_sdk/decorators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
38
|
application_sdk/decorators/locks.py,sha256=-cdbICCMns3lkqZ4CCQabW1du8cEu9XSWlwzWTTbIPk,1411
|
|
39
|
+
application_sdk/decorators/.cursor/BUGBOT.md,sha256=iiS_41FKaJ4-L2jm9ziEqQhQNGYGNZzHVVk09c2cgN8,11250
|
|
35
40
|
application_sdk/docgen/__init__.py,sha256=Gr_3uVEnSspKd_-R1YRsDABI-iP4170Dvg5jM2oD76A,7352
|
|
36
41
|
application_sdk/docgen/exporters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
42
|
application_sdk/docgen/exporters/mkdocs.py,sha256=vxYjKLz-7z7rBUSkOGTdNVlPdx_VPfFfJ31HHNgMCeM,4024
|
|
@@ -49,31 +54,36 @@ application_sdk/docgen/parsers/directory.py,sha256=8Kk2sjb-0l2wLO_njdlcuHjv5akoN
|
|
|
49
54
|
application_sdk/docgen/parsers/manifest.py,sha256=3NP-dBTpHAUQa477usMIDaKSb_9xfLE8G3RX0T1Bq2s,3318
|
|
50
55
|
application_sdk/events/__init__.py,sha256=OcbVWDF4ZKRTJXK9UaFVtYEwu-3DHE77S-Sn6jNafUs,204
|
|
51
56
|
application_sdk/events/models.py,sha256=7Esqp3WlbriT2EqT4kNiY_sHtRXRPLj27b8SbeC5Sb0,5121
|
|
52
|
-
application_sdk/handlers/__init__.py,sha256=
|
|
57
|
+
application_sdk/handlers/__init__.py,sha256=3Wf7jCVFR2nYOyHZEc9jj8BQUnHCylFqoezp70J2Df0,1329
|
|
53
58
|
application_sdk/handlers/base.py,sha256=ieWFbv8Gm7vfrrpS-mdMSm-mHGuQY02qiAVX2qPdj3w,2467
|
|
54
|
-
application_sdk/handlers/sql.py,sha256=
|
|
59
|
+
application_sdk/handlers/sql.py,sha256=6A_9xCtkXyNY5gPhImbftzrdPIEWIeTTqjyIewVESHA,17815
|
|
55
60
|
application_sdk/inputs/__init__.py,sha256=_d-cUhcDyoJTJR3PdQkC831go6VDw9AM6Bg7-qm3NHI,1900
|
|
56
61
|
application_sdk/inputs/iceberg.py,sha256=xiv1kNtVx1k0h3ZJbJeXjZwdfBGSy9j9orYP_AyCYlI,2756
|
|
57
62
|
application_sdk/inputs/json.py,sha256=Yv70Y9YuutN2trqK5-z2UNtBL0895ZbdEiBDt9cYM9s,6216
|
|
58
63
|
application_sdk/inputs/parquet.py,sha256=GnyB0r4-7GNLBl3ooVFUzsxunZsrHStKK2h7XRc7AIY,6723
|
|
59
64
|
application_sdk/inputs/sql_query.py,sha256=1EREgea6kKNaMIyX2HLJgbJ07rtAgLasd9NyvDcdZok,10636
|
|
65
|
+
application_sdk/inputs/.cursor/BUGBOT.md,sha256=hwKGDbopv3NU0bpC_ElpAPDFcS59GWS3TunObGC6eLQ,9731
|
|
60
66
|
application_sdk/interceptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
|
-
application_sdk/interceptors/
|
|
67
|
+
application_sdk/interceptors/cleanup.py,sha256=tPLIIa0E3y-Kmjme88tyYN0W3NYrKKZaDggHyHl95ME,6106
|
|
68
|
+
application_sdk/interceptors/events.py,sha256=TeStWmBbc4v1-dm2DWeKYsUfUhJLR8CtTQhu3TWOZWM,6524
|
|
62
69
|
application_sdk/interceptors/lock.py,sha256=Xe9TSjYKtDZUB94hbV7rHG_9rgKUJPTACeB8z8xsJ0w,5577
|
|
70
|
+
application_sdk/interceptors/.cursor/BUGBOT.md,sha256=pxmUF2c7dtaXAX8yAa1-LBa6FCrj_uw7aQcHrppjf1A,14570
|
|
63
71
|
application_sdk/observability/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
64
72
|
application_sdk/observability/logger_adaptor.py,sha256=WTqnNg78W2SRGOQVhELVLn6KMRsurkG1kc7essL08Lk,29529
|
|
65
73
|
application_sdk/observability/metrics_adaptor.py,sha256=4TYPNn38zLeqxwf7cUbe8wh_zwQlr-nyiXjJsiEhTEM,16445
|
|
66
74
|
application_sdk/observability/observability.py,sha256=DP0I4bHyg3TA4hxCqDFy2IiRmBGOpZ7449m7BUoc_RA,24530
|
|
67
75
|
application_sdk/observability/traces_adaptor.py,sha256=0eQJPN-tYA_dV8D3uEa5ZiX9g12NDuLnPaFuQMVDdL0,18242
|
|
68
76
|
application_sdk/observability/utils.py,sha256=MKEpT0WYtpATUgLgJDkGQaAP_t-jpDYMUKDfEvr8Phg,2448
|
|
69
|
-
application_sdk/observability/decorators/observability_decorator.py,sha256=
|
|
77
|
+
application_sdk/observability/decorators/observability_decorator.py,sha256=yd6qfrg1MmH5KcZ5Ydzb0RaBzmxx5FrmiI9qwvZx3EU,8963
|
|
70
78
|
application_sdk/outputs/__init__.py,sha256=HIENr2w9gu6u3sF_nvraj45yk53NDAddtaXSUHIVBjs,9469
|
|
71
|
-
application_sdk/outputs/iceberg.py,sha256=
|
|
72
|
-
application_sdk/outputs/json.py,sha256=
|
|
73
|
-
application_sdk/outputs/parquet.py,sha256=
|
|
79
|
+
application_sdk/outputs/iceberg.py,sha256=TdppOMEMfojMhGyBmhWeu1AJQexRyHM-huAYeJmhjdY,5533
|
|
80
|
+
application_sdk/outputs/json.py,sha256=HIQIRhuTRt06enxrj5T5aylAYCMAMBFelnzl5C_D0vw,15407
|
|
81
|
+
application_sdk/outputs/parquet.py,sha256=IdD9pYecZbmwzltMRB12lNkz8ITFCmB5SBBASad5U7s,16744
|
|
82
|
+
application_sdk/outputs/.cursor/BUGBOT.md,sha256=KxEC3CIyRSK1YftZou5BgKc6PRXT3qQmBNFJp-HSyYE,11496
|
|
74
83
|
application_sdk/server/__init__.py,sha256=KTqE1YPw_3WDVMWatJUuf9OOiobLM2K5SMaBrI62sCo,1568
|
|
75
|
-
application_sdk/server/
|
|
76
|
-
application_sdk/server/fastapi/
|
|
84
|
+
application_sdk/server/.cursor/BUGBOT.md,sha256=p_MMoWUW5G1894WfOKYReZKWCuyJT_OJz3rL5g21NbI,16566
|
|
85
|
+
application_sdk/server/fastapi/__init__.py,sha256=BVqf63z1hxEdpJqLU4LXpFTbk5q8dVkjEbWbu_vbW_Y,29578
|
|
86
|
+
application_sdk/server/fastapi/models.py,sha256=dxhV2eOEg2xL_pLDgHFyRwZeKjRICQBCXXNvwRF-eek,7553
|
|
77
87
|
application_sdk/server/fastapi/utils.py,sha256=2XI4DylhRQsukhX67lpAzRNCHeFCSpbuNd7TlE2IBJA,1164
|
|
78
88
|
application_sdk/server/fastapi/middleware/logmiddleware.py,sha256=CxcPtDmCbSfSZ8RyI09nIshVIbCokyyA9bByQJ2G_ns,2545
|
|
79
89
|
application_sdk/server/fastapi/middleware/metrics.py,sha256=5ddHAIg5sT-u9tB_HHMGL3Cfu2g1rm9z7ksienIr9ks,1563
|
|
@@ -82,7 +92,7 @@ application_sdk/server/fastapi/routers/server.py,sha256=vfHQwZCysThzfeVFNVW1IjuA
|
|
|
82
92
|
application_sdk/services/__init__.py,sha256=H-5HZEPdr53MUfAggyHqHhRXDRLZFZsxvJgWbr257Ds,465
|
|
83
93
|
application_sdk/services/atlan_storage.py,sha256=TKzXxu0yXeUcmZehwp8PcnQTC4A9w9RlZ0Fl-Xp1bLE,8509
|
|
84
94
|
application_sdk/services/eventstore.py,sha256=X03JzodKByXh8w8nOl658rnnZfMFTj0IkmiLVbd6IN8,6729
|
|
85
|
-
application_sdk/services/objectstore.py,sha256=
|
|
95
|
+
application_sdk/services/objectstore.py,sha256=XfXWUodkcibFNJrNad5sSbHTrsKMTrRDjZ3HiA7CLf0,17006
|
|
86
96
|
application_sdk/services/secretstore.py,sha256=UpyLLcdMia1tqFCpRrn-lE9AnERAt2iGVzET6QqkmqI,13976
|
|
87
97
|
application_sdk/services/statestore.py,sha256=CQuKq4FXPS0ebDH0e0cfTTAjvsIlrA1zz1MpsWCiWnM,9562
|
|
88
98
|
application_sdk/test_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -137,12 +147,13 @@ application_sdk/transformers/query/templates/schema.yaml,sha256=U9voaKusmF_8a2_j
|
|
|
137
147
|
application_sdk/transformers/query/templates/table.yaml,sha256=QQAGLD1UFjbpSA5wvkuufv0OeIw3pfNzW4cYF73tvKY,8080
|
|
138
148
|
application_sdk/transformers/query/templates/tag_attachment.yaml,sha256=dWNDGwRU4_P-t7ibv5XelMP36aGLG29U6MEXOA8zYt0,2884
|
|
139
149
|
application_sdk/workflows/__init__.py,sha256=byluvgzTovr4L1co7YGb4--ktMBqt2pXBjYoxz4dIeU,3869
|
|
150
|
+
application_sdk/workflows/.cursor/BUGBOT.md,sha256=ybjRfSNgVSDzOrYoSvG8zIyL1JEVcsIj3AffizSfZKY,8162
|
|
140
151
|
application_sdk/workflows/metadata_extraction/__init__.py,sha256=jHUe_ZBQ66jx8bgyduPuECo2RdmJtQsQAKlakADEQbc,120
|
|
141
152
|
application_sdk/workflows/metadata_extraction/sql.py,sha256=BhaZavEL8H3Jvf28FGcHtZwqdsUT_EHZ4VTqiaieWek,12278
|
|
142
153
|
application_sdk/workflows/query_extraction/__init__.py,sha256=n066_CX5RpJz6DIxGMkKS3eGSRg03ilaCtsqfJWQb7Q,117
|
|
143
154
|
application_sdk/workflows/query_extraction/sql.py,sha256=kT_JQkLCRZ44ZpaC4QvPL6DxnRIIVh8gYHLqRbMI-hA,4826
|
|
144
|
-
atlan_application_sdk-0.1.
|
|
145
|
-
atlan_application_sdk-0.1.
|
|
146
|
-
atlan_application_sdk-0.1.
|
|
147
|
-
atlan_application_sdk-0.1.
|
|
148
|
-
atlan_application_sdk-0.1.
|
|
155
|
+
atlan_application_sdk-0.1.1rc41.dist-info/METADATA,sha256=foqYmvYq45g_A7zojtZJ0F06AjTxMOeAEnBE9FkkMFE,5567
|
|
156
|
+
atlan_application_sdk-0.1.1rc41.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
157
|
+
atlan_application_sdk-0.1.1rc41.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
158
|
+
atlan_application_sdk-0.1.1rc41.dist-info/licenses/NOTICE,sha256=A-XVVGt3KOYuuMmvSMIFkg534F1vHiCggEBp4Ez3wGk,1041
|
|
159
|
+
atlan_application_sdk-0.1.1rc41.dist-info/RECORD,,
|
{atlan_application_sdk-0.1.1rc39.dist-info → atlan_application_sdk-0.1.1rc41.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|