atlan-application-sdk 0.1.1rc39__py3-none-any.whl → 0.1.1rc40__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.
@@ -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."
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atlan-application-sdk
3
- Version: 0.1.1rc39
3
+ Version: 0.1.1rc40
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
@@ -1,9 +1,10 @@
1
1
  application_sdk/__init__.py,sha256=2e2mvmLJ5dxmJGPELtb33xwP-j6JMdoIuqKycEn7hjg,151
2
- application_sdk/constants.py,sha256=GzwZO0pa9M-FgibmfIs1lh-Fwo06K9Tk6WzGqMyJgpI,10362
3
- application_sdk/version.py,sha256=c9l4xzOeaiyxuYpkhXgaiBr52RJe_2lv_aUnX-NAeR4,88
2
+ application_sdk/constants.py,sha256=1THiejjOEgm4kHFN-PrwrUkfRk7q1pjOLWLm-t2ph1Q,10674
3
+ application_sdk/version.py,sha256=Qzsomgs6UHTGpJJZBigbISGerThXHrOSKWZ4drTdZq0,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
@@ -20,18 +21,21 @@ application_sdk/clients/atlan.py,sha256=l6yV39fr1006SJFwkOTNDQlbSFlHCZQaUPfdUlzd
20
21
  application_sdk/clients/atlan_auth.py,sha256=D7FuNqv81ohNXLJtdx1AFw_jU6a3g0Pw6149ia4ucFY,8930
21
22
  application_sdk/clients/base.py,sha256=TIn3pG89eXUc1XSYf4jk66m1vajWp0WxcCQOOltdazA,14021
22
23
  application_sdk/clients/redis.py,sha256=IfAD32vLp88BCvsDTaQtxFHxzHlEx4V7TK7h1HwDDBg,15917
23
- application_sdk/clients/sql.py,sha256=tW89SHuuWdU5jv8lDUP5AUCEpR2CF_5TyUvYDCBHses,17880
24
- application_sdk/clients/temporal.py,sha256=MEGNT1_crWAn-vdfcBUH0A7IKvKDDSAaiEpGCS7gas4,18235
24
+ application_sdk/clients/sql.py,sha256=rjAniBnMBximVyo9z2FkRNHiN4eGf0V0ko5wfP8SxlU,19624
25
+ application_sdk/clients/temporal.py,sha256=g7DXlnMLlWOHAdyXB0TCDx0aWdAwjazDnIbMgNNgKgw,18359
25
26
  application_sdk/clients/utils.py,sha256=zLFOJbTr_6TOqnjfVFGY85OtIXZ4FQy_rquzjaydkbY,779
26
27
  application_sdk/clients/workflow.py,sha256=6bSqmA3sNCk9oY68dOjBUDZ9DhNKQxPD75qqE0cfldc,6104
28
+ application_sdk/clients/.cursor/BUGBOT.md,sha256=7nEDUqWBEMI_uU6eK1jCSZGeXoQtLQcKwOrDn8AIDWo,10595
27
29
  application_sdk/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
30
  application_sdk/common/aws_utils.py,sha256=aeL3BTMzv1UWJ4KxfwY5EsfYnxtS1FKNJ4xKdHeoTjc,3438
29
31
  application_sdk/common/dapr_utils.py,sha256=0yHqDP6qNb1OT-bX2XRYQPZ5xkGkV13nyRw6GkPlHs8,1136
30
32
  application_sdk/common/dataframe_utils.py,sha256=PId9vT6AUoq3tesiTd4sSUvW7RUhPWdAAEBLuOprks4,1262
31
33
  application_sdk/common/error_codes.py,sha256=bxgvugN_0H5b8VXfJw-44mybgX5I9lRJbRdYjtPjqDI,14561
32
34
  application_sdk/common/utils.py,sha256=ktCZLp-AEiyd-IPOgbD83Dg9qa8Z0Sj_mJmmdSzpOak,14759
35
+ application_sdk/common/.cursor/BUGBOT.md,sha256=OkB5TMAEJFzaBfbNb3g9ZDPW2r1krQE_KEuJbytMPuI,12176
33
36
  application_sdk/decorators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
37
  application_sdk/decorators/locks.py,sha256=-cdbICCMns3lkqZ4CCQabW1du8cEu9XSWlwzWTTbIPk,1411
38
+ application_sdk/decorators/.cursor/BUGBOT.md,sha256=iiS_41FKaJ4-L2jm9ziEqQhQNGYGNZzHVVk09c2cgN8,11250
35
39
  application_sdk/docgen/__init__.py,sha256=Gr_3uVEnSspKd_-R1YRsDABI-iP4170Dvg5jM2oD76A,7352
36
40
  application_sdk/docgen/exporters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
41
  application_sdk/docgen/exporters/mkdocs.py,sha256=vxYjKLz-7z7rBUSkOGTdNVlPdx_VPfFfJ31HHNgMCeM,4024
@@ -57,9 +61,12 @@ application_sdk/inputs/iceberg.py,sha256=xiv1kNtVx1k0h3ZJbJeXjZwdfBGSy9j9orYP_Ay
57
61
  application_sdk/inputs/json.py,sha256=Yv70Y9YuutN2trqK5-z2UNtBL0895ZbdEiBDt9cYM9s,6216
58
62
  application_sdk/inputs/parquet.py,sha256=GnyB0r4-7GNLBl3ooVFUzsxunZsrHStKK2h7XRc7AIY,6723
59
63
  application_sdk/inputs/sql_query.py,sha256=1EREgea6kKNaMIyX2HLJgbJ07rtAgLasd9NyvDcdZok,10636
64
+ application_sdk/inputs/.cursor/BUGBOT.md,sha256=hwKGDbopv3NU0bpC_ElpAPDFcS59GWS3TunObGC6eLQ,9731
60
65
  application_sdk/interceptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
- application_sdk/interceptors/events.py,sha256=Kh0dEsc6q7YtlN9cxatiL_ZrmBxriv55r9lxvIKGg3A,6548
66
+ application_sdk/interceptors/cleanup.py,sha256=tPLIIa0E3y-Kmjme88tyYN0W3NYrKKZaDggHyHl95ME,6106
67
+ application_sdk/interceptors/events.py,sha256=TeStWmBbc4v1-dm2DWeKYsUfUhJLR8CtTQhu3TWOZWM,6524
62
68
  application_sdk/interceptors/lock.py,sha256=Xe9TSjYKtDZUB94hbV7rHG_9rgKUJPTACeB8z8xsJ0w,5577
69
+ application_sdk/interceptors/.cursor/BUGBOT.md,sha256=pxmUF2c7dtaXAX8yAa1-LBa6FCrj_uw7aQcHrppjf1A,14570
63
70
  application_sdk/observability/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
71
  application_sdk/observability/logger_adaptor.py,sha256=WTqnNg78W2SRGOQVhELVLn6KMRsurkG1kc7essL08Lk,29529
65
72
  application_sdk/observability/metrics_adaptor.py,sha256=4TYPNn38zLeqxwf7cUbe8wh_zwQlr-nyiXjJsiEhTEM,16445
@@ -68,10 +75,12 @@ application_sdk/observability/traces_adaptor.py,sha256=0eQJPN-tYA_dV8D3uEa5ZiX9g
68
75
  application_sdk/observability/utils.py,sha256=MKEpT0WYtpATUgLgJDkGQaAP_t-jpDYMUKDfEvr8Phg,2448
69
76
  application_sdk/observability/decorators/observability_decorator.py,sha256=JNrWNXT5W4klmlAc5b8C3_VBjDu0PI64W2ptr7LMzk4,8110
70
77
  application_sdk/outputs/__init__.py,sha256=HIENr2w9gu6u3sF_nvraj45yk53NDAddtaXSUHIVBjs,9469
71
- application_sdk/outputs/iceberg.py,sha256=IGtj5WDgqLu6vzDEvw5DLsKsjm29Krto3AHvWpemr0A,5311
72
- application_sdk/outputs/json.py,sha256=zyYQjGj5tb7bJhNt3ObwsuHT6Gakj8qNey-siUlWdP4,15065
73
- application_sdk/outputs/parquet.py,sha256=AHcsuIVU0C-yNmqk4oUuDwdxCBSjaAxJwe2v7EklVsg,16220
78
+ application_sdk/outputs/iceberg.py,sha256=TdppOMEMfojMhGyBmhWeu1AJQexRyHM-huAYeJmhjdY,5533
79
+ application_sdk/outputs/json.py,sha256=HIQIRhuTRt06enxrj5T5aylAYCMAMBFelnzl5C_D0vw,15407
80
+ application_sdk/outputs/parquet.py,sha256=IdD9pYecZbmwzltMRB12lNkz8ITFCmB5SBBASad5U7s,16744
81
+ application_sdk/outputs/.cursor/BUGBOT.md,sha256=KxEC3CIyRSK1YftZou5BgKc6PRXT3qQmBNFJp-HSyYE,11496
74
82
  application_sdk/server/__init__.py,sha256=KTqE1YPw_3WDVMWatJUuf9OOiobLM2K5SMaBrI62sCo,1568
83
+ application_sdk/server/.cursor/BUGBOT.md,sha256=p_MMoWUW5G1894WfOKYReZKWCuyJT_OJz3rL5g21NbI,16566
75
84
  application_sdk/server/fastapi/__init__.py,sha256=YOdWNE-qqiXfo-exvxPg8T0PSuOxTdeSetUn6-BXxZg,27704
76
85
  application_sdk/server/fastapi/models.py,sha256=K6eNl3XXiTXKUvRTpq3oqdGH3jY1-ApobXma04J86fE,6665
77
86
  application_sdk/server/fastapi/utils.py,sha256=2XI4DylhRQsukhX67lpAzRNCHeFCSpbuNd7TlE2IBJA,1164
@@ -82,7 +91,7 @@ application_sdk/server/fastapi/routers/server.py,sha256=vfHQwZCysThzfeVFNVW1IjuA
82
91
  application_sdk/services/__init__.py,sha256=H-5HZEPdr53MUfAggyHqHhRXDRLZFZsxvJgWbr257Ds,465
83
92
  application_sdk/services/atlan_storage.py,sha256=TKzXxu0yXeUcmZehwp8PcnQTC4A9w9RlZ0Fl-Xp1bLE,8509
84
93
  application_sdk/services/eventstore.py,sha256=X03JzodKByXh8w8nOl658rnnZfMFTj0IkmiLVbd6IN8,6729
85
- application_sdk/services/objectstore.py,sha256=85e_68ubUsoj3riPSgPorFvJR0vnAlkSq3uglRjUtIA,16402
94
+ application_sdk/services/objectstore.py,sha256=XfXWUodkcibFNJrNad5sSbHTrsKMTrRDjZ3HiA7CLf0,17006
86
95
  application_sdk/services/secretstore.py,sha256=UpyLLcdMia1tqFCpRrn-lE9AnERAt2iGVzET6QqkmqI,13976
87
96
  application_sdk/services/statestore.py,sha256=CQuKq4FXPS0ebDH0e0cfTTAjvsIlrA1zz1MpsWCiWnM,9562
88
97
  application_sdk/test_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -137,12 +146,13 @@ application_sdk/transformers/query/templates/schema.yaml,sha256=U9voaKusmF_8a2_j
137
146
  application_sdk/transformers/query/templates/table.yaml,sha256=QQAGLD1UFjbpSA5wvkuufv0OeIw3pfNzW4cYF73tvKY,8080
138
147
  application_sdk/transformers/query/templates/tag_attachment.yaml,sha256=dWNDGwRU4_P-t7ibv5XelMP36aGLG29U6MEXOA8zYt0,2884
139
148
  application_sdk/workflows/__init__.py,sha256=byluvgzTovr4L1co7YGb4--ktMBqt2pXBjYoxz4dIeU,3869
149
+ application_sdk/workflows/.cursor/BUGBOT.md,sha256=ybjRfSNgVSDzOrYoSvG8zIyL1JEVcsIj3AffizSfZKY,8162
140
150
  application_sdk/workflows/metadata_extraction/__init__.py,sha256=jHUe_ZBQ66jx8bgyduPuECo2RdmJtQsQAKlakADEQbc,120
141
151
  application_sdk/workflows/metadata_extraction/sql.py,sha256=BhaZavEL8H3Jvf28FGcHtZwqdsUT_EHZ4VTqiaieWek,12278
142
152
  application_sdk/workflows/query_extraction/__init__.py,sha256=n066_CX5RpJz6DIxGMkKS3eGSRg03ilaCtsqfJWQb7Q,117
143
153
  application_sdk/workflows/query_extraction/sql.py,sha256=kT_JQkLCRZ44ZpaC4QvPL6DxnRIIVh8gYHLqRbMI-hA,4826
144
- atlan_application_sdk-0.1.1rc39.dist-info/METADATA,sha256=D1HHgG-YRM3VS43mQGsST_RJTkkDacnCSnFszqPfSL4,5567
145
- atlan_application_sdk-0.1.1rc39.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
146
- atlan_application_sdk-0.1.1rc39.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
147
- atlan_application_sdk-0.1.1rc39.dist-info/licenses/NOTICE,sha256=A-XVVGt3KOYuuMmvSMIFkg534F1vHiCggEBp4Ez3wGk,1041
148
- atlan_application_sdk-0.1.1rc39.dist-info/RECORD,,
154
+ atlan_application_sdk-0.1.1rc40.dist-info/METADATA,sha256=iBMkcCUkUGm7Aq0AGFQeLs7hjenZ4Y1ZGkOQf5H4kXY,5567
155
+ atlan_application_sdk-0.1.1rc40.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
156
+ atlan_application_sdk-0.1.1rc40.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
157
+ atlan_application_sdk-0.1.1rc40.dist-info/licenses/NOTICE,sha256=A-XVVGt3KOYuuMmvSMIFkg534F1vHiCggEBp4Ez3wGk,1041
158
+ atlan_application_sdk-0.1.1rc40.dist-info/RECORD,,