atlan-application-sdk-api 3.51.0__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.
Files changed (78) hide show
  1. application_sdk/__init__.py +7 -0
  2. application_sdk/_build_info.py +62 -0
  3. application_sdk/_context_errors.py +65 -0
  4. application_sdk/_install.py +130 -0
  5. application_sdk/_logging.py +171 -0
  6. application_sdk/_runtime/__init__.py +29 -0
  7. application_sdk/_runtime/offload.py +1020 -0
  8. application_sdk/_runtime/progress.py +757 -0
  9. application_sdk/clients/__init__.py +63 -0
  10. application_sdk/clients/_interface.py +58 -0
  11. application_sdk/clients/_sql_failure_classifier.py +112 -0
  12. application_sdk/clients/base.py +565 -0
  13. application_sdk/clients/http_errors.py +28 -0
  14. application_sdk/clients/models.py +49 -0
  15. application_sdk/clients/sql.py +1218 -0
  16. application_sdk/clients/sql_errors.py +192 -0
  17. application_sdk/clients/sql_typecasters.py +431 -0
  18. application_sdk/clients/ssl_utils.py +247 -0
  19. application_sdk/common/__init__.py +53 -0
  20. application_sdk/common/_generated_tree.py +321 -0
  21. application_sdk/common/_listing.py +192 -0
  22. application_sdk/common/aws_utils.py +522 -0
  23. application_sdk/common/aws_utils_errors.py +88 -0
  24. application_sdk/common/build_identity.py +120 -0
  25. application_sdk/common/concurrency.py +45 -0
  26. application_sdk/common/errors.py +99 -0
  27. application_sdk/common/filter_matching.py +261 -0
  28. application_sdk/common/logger.py +11 -0
  29. application_sdk/common/models.py +31 -0
  30. application_sdk/common/sql_filters.py +719 -0
  31. application_sdk/common/sql_filters_errors.py +17 -0
  32. application_sdk/common/task_queue.py +431 -0
  33. application_sdk/common/types.py +51 -0
  34. application_sdk/common/utils.py +87 -0
  35. application_sdk/constants.py +1120 -0
  36. application_sdk/contracts/__init__.py +158 -0
  37. application_sdk/contracts/base.py +1178 -0
  38. application_sdk/contracts/events.py +251 -0
  39. application_sdk/contracts/types.py +801 -0
  40. application_sdk/contracts/types_errors.py +17 -0
  41. application_sdk/credentials/__init__.py +326 -0
  42. application_sdk/credentials/errors.py +226 -0
  43. application_sdk/credentials/extra.py +114 -0
  44. application_sdk/credentials/ingress.py +283 -0
  45. application_sdk/credentials/ref.py +376 -0
  46. application_sdk/credentials/spec.py +182 -0
  47. application_sdk/credentials/types.py +339 -0
  48. application_sdk/credentials/utils.py +257 -0
  49. application_sdk/errors/__init__.py +224 -0
  50. application_sdk/errors/base.py +504 -0
  51. application_sdk/errors/categories.py +118 -0
  52. application_sdk/errors/http.py +81 -0
  53. application_sdk/errors/leaves.py +526 -0
  54. application_sdk/errors/wire.py +124 -0
  55. application_sdk/handler/__init__.py +97 -0
  56. application_sdk/handler/_warmup.py +198 -0
  57. application_sdk/handler/asgi.py +252 -0
  58. application_sdk/handler/base.py +281 -0
  59. application_sdk/handler/context.py +212 -0
  60. application_sdk/handler/contracts.py +1166 -0
  61. application_sdk/handler/manifest.py +81 -0
  62. application_sdk/handler/metadata_routes.py +699 -0
  63. application_sdk/handler/object_routes.py +418 -0
  64. application_sdk/handler/request_contract.py +91 -0
  65. application_sdk/handler/routes.py +1118 -0
  66. application_sdk/handler/service_errors.py +37 -0
  67. application_sdk/server/__init__.py +15 -0
  68. application_sdk/server/fastapi/models.py +338 -0
  69. application_sdk/templates/__init__.py +52 -0
  70. application_sdk/templates/contracts/__init__.py +111 -0
  71. application_sdk/templates/contracts/base_metadata_extraction.py +32 -0
  72. application_sdk/templates/contracts/incremental_sql.py +563 -0
  73. application_sdk/templates/contracts/sql_metadata.py +824 -0
  74. application_sdk/templates/contracts/sql_query.py +105 -0
  75. application_sdk/version.py +40 -0
  76. atlan_application_sdk_api-3.51.0.dist-info/METADATA +230 -0
  77. atlan_application_sdk_api-3.51.0.dist-info/RECORD +78 -0
  78. atlan_application_sdk_api-3.51.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,105 @@
1
+ """Typed contracts for SQL query extraction.
2
+
3
+ These replace the ``Dict[str, Any]`` interfaces used by
4
+ ``SQLQueryExtractionWorkflow`` and ``SQLQueryExtractionActivities``.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from typing import Annotated
10
+
11
+ from pydantic import Field
12
+
13
+ from application_sdk.contracts.base import Input, Output
14
+ from application_sdk.contracts.types import ConnectionRef, MaxItems
15
+ from application_sdk.credentials.ref import CredentialRef
16
+
17
+
18
+ class QueryExtractionInput(Input):
19
+ """Top-level input for a SQL query extraction run."""
20
+
21
+ workflow_id: str = ""
22
+ """Temporal workflow ID for this run."""
23
+
24
+ connection: ConnectionRef = Field(default_factory=ConnectionRef)
25
+ """Typed connection reference (qualified name, name, admin users, etc.)."""
26
+
27
+ credential_guid: str = ""
28
+ """GUID of credentials stored in the secret store."""
29
+
30
+ credential_ref: CredentialRef | None = None
31
+ """Typed credential reference — preferred over credential_guid for new apps."""
32
+
33
+ output_prefix: str = ""
34
+ """Object store prefix for output artifacts."""
35
+
36
+ output_path: str = ""
37
+ """Local or object store path for output files."""
38
+
39
+ lookback_days: int = 30
40
+ """Number of days of query history to extract."""
41
+
42
+ batch_size: int = 100000
43
+ """Number of queries per batch."""
44
+
45
+ exclude_users: Annotated[list[str], MaxItems(1000)] = Field(default_factory=list)
46
+ """Users whose queries should be excluded."""
47
+
48
+
49
+ class QueryExtractionOutput(Output):
50
+ """Top-level output from a SQL query extraction run."""
51
+
52
+ workflow_id: str = ""
53
+ success: bool = False
54
+ total_batches: int = 0
55
+ total_queries: int = 0
56
+ records_uploaded: int = 0
57
+ error: str = ""
58
+
59
+
60
+ class QueryBatchInput(Input):
61
+ """Input for the get_query_batches task.
62
+
63
+ ``workflow_args`` is a pass-through dict rather than typed fields because
64
+ query-mining connectors vary widely in what context they need for batch
65
+ sizing (e.g. date ranges, warehouse IDs, session filters). The dict lets
66
+ each connector add connector-specific keys without requiring a base-class
67
+ change. ``SqlQueryExtractor.run()`` populates it from ``QueryExtractionInput``.
68
+ """
69
+
70
+ workflow_args: Annotated[
71
+ dict[str, str | int | float | bool | None],
72
+ MaxItems(100),
73
+ ] = Field(default_factory=dict)
74
+
75
+
76
+ class QueryBatchOutput(Output):
77
+ """Output from the get_query_batches task."""
78
+
79
+ total_batches: int = 0
80
+ batch_size: int = 0
81
+ total_count: int = 0
82
+
83
+
84
+ class QueryFetchInput(Input):
85
+ """Input for the fetch_queries task.
86
+
87
+ ``workflow_args`` carries the same connector context as ``QueryBatchInput``
88
+ (see its docstring). ``batch_number`` and ``batch_size`` are typed here
89
+ because all connectors need them for pagination.
90
+ """
91
+
92
+ workflow_args: Annotated[
93
+ dict[str, str | int | float | bool | None],
94
+ MaxItems(100),
95
+ ] = Field(default_factory=dict)
96
+ batch_number: int = 0
97
+ batch_size: int = 100000
98
+
99
+
100
+ class QueryFetchOutput(Output):
101
+ """Output from the fetch_queries task."""
102
+
103
+ batch_number: int = 0
104
+ queries_fetched: int = 0
105
+ chunk_count: int = 0
@@ -0,0 +1,40 @@
1
+ """Version information for the application_sdk package.
2
+
3
+ Holds two kinds of versions:
4
+
5
+ * ``__version__`` — the SDK's own package version.
6
+ * ``__dapr_version`` — the pinned Dapr runtime the SDK auto-downloads on
7
+ first local-dev run (see ``application_sdk.dev._dapr``). Leading double
8
+ underscore signals it is **SDK-internal**; consumer apps should rely on
9
+ the runtime behaviour, not import this value.
10
+
11
+ This governs **only** the local-dev download path (and the CI daprd cache
12
+ key). It does **not** *control* the container image's daprd: that is baked
13
+ into the ``app-framework-golden`` base image via Chainguard Custom Assembly
14
+ and pinned by the Custom Assembly config. The dependency runs the other
15
+ way — the base image is the source of truth, and this constant is kept in
16
+ sync with the daprd baked into it: ``.github/workflows/check-dapr-version.yaml``
17
+ reads ``daprd --version`` from the golden base on each release-time image
18
+ rebuild and opens a PR bumping this constant when it drifts (BLDX-1467).
19
+ Don't expect editing this value to move the container — it only steers the
20
+ local-dev / CI download so it matches what the container already runs.
21
+
22
+ Everything that needs the daprd pin derives it from this one line — nothing
23
+ re-hardcodes the version:
24
+
25
+ * ``application_sdk.dev._dapr`` imports ``__dapr_version`` directly for the
26
+ embedded local-dev daprd download.
27
+ * The external-Dapr CI paths read it without importing, by grepping this file::
28
+
29
+ ver=$(grep '^__dapr_version' application_sdk/version.py | cut -d'"' -f2)
30
+
31
+ — namely ``.github/actions/ae-stack-up/ae-stack-up.sh`` and
32
+ ``.github/actions/connector-integration-tests/action.yaml``.
33
+
34
+ This constant is normally updated by the sync workflow above; bump it by hand
35
+ only to reconcile ahead of a release — and deliberately, since older Dapr
36
+ releases drop off the CDN.
37
+ """
38
+
39
+ __version__ = "3.51.0"
40
+ __dapr_version: str = "1.18.7"
@@ -0,0 +1,230 @@
1
+ Metadata-Version: 2.5
2
+ Name: atlan-application-sdk-api
3
+ Version: 3.51.0
4
+ Summary: Experimental: the handler surface of the Atlan Application SDK, for the consolidated API host
5
+ Project-URL: Homepage, https://github.com/atlanhq/application-sdk
6
+ Project-URL: Source, https://github.com/atlanhq/application-sdk/tree/main/packages/api
7
+ Project-URL: Documentation, https://github.com/atlanhq/application-sdk/blob/main/docs/standards/api-distribution.md
8
+ Project-URL: Changelog, https://github.com/atlanhq/application-sdk/blob/main/CHANGELOG.md
9
+ Author-email: Atlan App Team <connect@atlan.com>
10
+ License-Expression: Apache-2.0
11
+ Keywords: api,atlan,handler,sdk
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: Apache Software License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Requires-Python: >=3.11
18
+ Requires-Dist: fastapi<0.144.0,>=0.143.0
19
+ Requires-Dist: httpx<0.29.0,>=0.27.0
20
+ Requires-Dist: orjson<4.0.0,>=3.11.6
21
+ Requires-Dist: pydantic<3.0.0,>=2.10.6
22
+ Requires-Dist: python-multipart>=0.0.26
23
+ Provides-Extra: aws
24
+ Requires-Dist: boto3<2.0.0,>=1.38.6; extra == 'aws'
25
+ Requires-Dist: httpx<0.29.0,>=0.27.0; extra == 'aws'
26
+ Requires-Dist: python-dotenv<2.0.0,>=1.1.0; extra == 'aws'
27
+ Provides-Extra: pandas
28
+ Requires-Dist: pandas<3.0.0,>=2.2.3; extra == 'pandas'
29
+ Provides-Extra: pyatlan
30
+ Requires-Dist: pyatlan<12,>=11.3; extra == 'pyatlan'
31
+ Provides-Extra: sql
32
+ Requires-Dist: httpx<0.29.0,>=0.27.0; extra == 'sql'
33
+ Requires-Dist: python-dotenv<2.0.0,>=1.1.0; extra == 'sql'
34
+ Requires-Dist: sqlalchemy[asyncio]<3.0.0,>=2.0.36; extra == 'sql'
35
+ Description-Content-Type: text/markdown
36
+
37
+ # atlan-application-sdk-api
38
+
39
+ > **Experimental.** The contents of this package and how it is built may change
40
+ > between releases. If you are building an Atlan app, depend on
41
+ > [`atlan-application-sdk`](https://pypi.org/project/atlan-application-sdk/),
42
+ > which installs this package for you.
43
+
44
+ The **handler** part of the
45
+ [Atlan Application SDK](https://github.com/atlanhq/application-sdk), packaged
46
+ on its own.
47
+
48
+ An Atlan app has two halves:
49
+
50
+ - a **worker**, which runs the app's workflows (extraction, publishing) on
51
+ Temporal and Dapr;
52
+ - a **handler**, a small HTTP service that answers Atlan while a user sets up a
53
+ connection: *do these credentials work?*, *is the source ready?*, *which
54
+ databases and schemas can I pick?*
55
+
56
+ This package contains everything the handler needs and none of the worker
57
+ runtime. Its core dependencies are FastAPI, Pydantic, orjson, httpx and
58
+ python-multipart. That lets one lightweight process serve the handlers of many
59
+ apps.
60
+
61
+ ## Do I need this?
62
+
63
+ Usually not. `atlan-application-sdk` depends on this package at exactly the
64
+ same version, so installing the SDK gives you both, and your imports stay the
65
+ same:
66
+
67
+ ```python
68
+ from application_sdk.handler import Handler # same module either way
69
+ ```
70
+
71
+ Install this package directly only to run handlers **without** the worker
72
+ runtime, for example to serve them from a separate, smaller service.
73
+
74
+ ## Installation
75
+
76
+ ```bash
77
+ pip install atlan-application-sdk-api
78
+ # or
79
+ uv add atlan-application-sdk-api
80
+ ```
81
+
82
+ Requires Python 3.11 or newer. Add an extra when your handler uses that part of
83
+ the SDK:
84
+
85
+ | Extra | When your handler uses |
86
+ |---|---|
87
+ | `sql` | The SDK's SQL client (SQLAlchemy) |
88
+ | `aws` | The SDK's AWS helpers (boto3), or the config and file routes |
89
+ | `pandas` | Query results as pandas DataFrames |
90
+ | `pyatlan` | The Atlas conversion helpers on `ConnectionRef` |
91
+
92
+ ```bash
93
+ pip install "atlan-application-sdk-api[sql]"
94
+ ```
95
+
96
+ The extras have the same version pins as the matching extras of
97
+ `atlan-application-sdk`.
98
+
99
+ ## Quick start
100
+
101
+ Write a handler by subclassing `Handler` and implementing its three methods.
102
+ Then turn it into a FastAPI app with `build_asgi_app`:
103
+
104
+ ```python
105
+ from application_sdk.handler import (
106
+ AuthInput,
107
+ AuthOutput,
108
+ AuthStatus,
109
+ Handler,
110
+ MetadataInput,
111
+ MetadataOutput,
112
+ PreflightInput,
113
+ PreflightOutput,
114
+ PreflightStatus,
115
+ SqlMetadataOutput,
116
+ )
117
+ from application_sdk.handler.asgi import build_asgi_app
118
+
119
+
120
+ class DemoHandler(Handler):
121
+ async def test_auth(self, input: AuthInput) -> AuthOutput:
122
+ # Check input.credentials against your source.
123
+ return AuthOutput(status=AuthStatus.SUCCESS)
124
+
125
+ async def preflight_check(self, input: PreflightInput) -> PreflightOutput:
126
+ # Confirm the source is ready to be extracted.
127
+ return PreflightOutput(status=PreflightStatus.READY)
128
+
129
+ async def fetch_metadata(self, input: MetadataInput) -> MetadataOutput:
130
+ # List what the user can choose to extract.
131
+ return SqlMetadataOutput(
132
+ objects=[{"TABLE_CATALOG": "analytics", "TABLE_SCHEMA": "public"}]
133
+ )
134
+
135
+
136
+ app = build_asgi_app(DemoHandler(), app_name="demo")
137
+ ```
138
+
139
+ Serve it with any ASGI server (not included), for example
140
+ `pip install uvicorn` and then `uvicorn demo:app`:
141
+
142
+ ```bash
143
+ curl -X POST localhost:8000/workflows/v1/auth \
144
+ -H 'content-type: application/json' -d '{"credentials": []}'
145
+ # {"success": true, "data": {"status": "success", ...}, "message": "Authentication success"}
146
+ ```
147
+
148
+ ## Routes
149
+
150
+ `build_asgi_app` serves the same routes the full SDK's handler service does, so
151
+ an app answers identically from either one:
152
+
153
+ | Route | Answered by |
154
+ |---|---|
155
+ | `GET /health` | Always `{"status": "ok"}` |
156
+ | `POST /workflows/v1/auth` | `Handler.test_auth` |
157
+ | `POST /workflows/v1/check` | `Handler.preflight_check` |
158
+ | `POST /workflows/v1/metadata` | `Handler.fetch_metadata` |
159
+ | `POST /workflows/v1/warmup` | `Handler.warmup` (optional) |
160
+ | `GET /workflows/v1/configmap/{id}`, `/configmaps`, `/input-contract`, `GET`/`POST /workflows/v1/manifest` | The app's `generated/` folder, if the app package ships one |
161
+ | `GET`/`POST /workflows/v1/config/{id}`, `POST /workflows/v1/file` | An S3 bucket named by `ATLAN_S3_BUCKET` (and `ATLAN_S3_REGION`); needs the `aws` extra. These routes return 503 when it isn't set |
162
+ | Your own routes | FastAPI routers returned from `Handler.routers()`, served after the SDK's |
163
+
164
+ `build_asgi_app` takes a few keyword options:
165
+
166
+ - `app_package`: where the app's code and `generated/` folder live;
167
+ - `blocking_threads`: the size of this app's thread pool, default 8;
168
+ - `generated_dir`;
169
+ - `object_store`.
170
+
171
+ Each app built this way gets its own thread pool for `run_in_thread`, so several
172
+ apps in one process don't block each other.
173
+
174
+ ## What's included
175
+
176
+ | Module | Contents |
177
+ |---|---|
178
+ | `application_sdk.handler` | `Handler`, `HandlerContext`, and the request and response models |
179
+ | `application_sdk.handler.asgi` | `build_asgi_app` |
180
+ | `application_sdk.errors` | `AppError` and typed error classes; secrets and URL credentials are redacted from messages |
181
+ | `application_sdk.credentials` | Credential specs, types and parsing |
182
+ | `application_sdk.contracts`, `application_sdk.templates.contracts` | Input-contract models |
183
+ | `application_sdk.common.concurrency` | `run_in_thread`, for blocking calls inside async handlers |
184
+ | `application_sdk.common.logger` | `get_logger` |
185
+ | `application_sdk.clients.sql` (`sql` extra) | The SQL client base |
186
+ | `application_sdk.common.aws_utils` (`aws` extra) | AWS helpers |
187
+
188
+ The complete file list is in
189
+ [`api-files.txt`](https://github.com/atlanhq/application-sdk/blob/main/packages/api/api-files.txt).
190
+
191
+ **Not included:** Temporal, Dapr, the SDK's object-store layer, its structured
192
+ logging and telemetry, or anything else that runs workflows. That stays in
193
+ `atlan-application-sdk`.
194
+
195
+ A few handler features depend on the worker runtime. Without it they raise a
196
+ clear, typed error instead of failing on an import. For example,
197
+ `self.context.get_secret()` raises `SecretStoreNotConfiguredError` because
198
+ there is no secret store. Credentials sent with the request work normally.
199
+
200
+ ## Versioning
201
+
202
+ This package is released together with `atlan-application-sdk`, from the same
203
+ commit and always with the **same version number**. For example,
204
+ `atlan-application-sdk` 3.51.0 requires `atlan-application-sdk-api` 3.51.0.
205
+
206
+ A new version can contain the same code as the previous one when a release
207
+ changed only the worker part of the SDK.
208
+
209
+ ## Upgrading from an SDK release older than this package
210
+
211
+ Before this package existed, `atlan-application-sdk` shipped these files itself.
212
+ Upgrading across that boundary **with pip** can delete them. pip installs this
213
+ package first, then deletes the same files when it removes the old SDK.
214
+ Starting the app (`python -m application_sdk.main`) reports this and tells you
215
+ to run:
216
+
217
+ ```bash
218
+ pip install --force-reinstall --no-deps atlan-application-sdk-api
219
+ ```
220
+
221
+ uv is not affected. This only happens once; later upgrades are clean.
222
+
223
+ ## Links
224
+
225
+ - Source and documentation:
226
+ [github.com/atlanhq/application-sdk](https://github.com/atlanhq/application-sdk)
227
+ - Design notes:
228
+ [docs/standards/api-distribution.md](https://github.com/atlanhq/application-sdk/blob/main/docs/standards/api-distribution.md)
229
+ - Full SDK: [atlan-application-sdk on PyPI](https://pypi.org/project/atlan-application-sdk/)
230
+ - License: Apache-2.0
@@ -0,0 +1,78 @@
1
+ application_sdk/__init__.py,sha256=2e2mvmLJ5dxmJGPELtb33xwP-j6JMdoIuqKycEn7hjg,151
2
+ application_sdk/_build_info.py,sha256=XmxBcrprOincs6ZmL1qBaPrM_ADngSL5JM3mrYCvN60,2310
3
+ application_sdk/_context_errors.py,sha256=bZRDE4NZJoWtBZCZLYaqsoxUnewdnVpmmIfIfA6VrOo,2358
4
+ application_sdk/_install.py,sha256=es9UVUDBW5DCc4uZTiBPmRdbhO7t8CBMPDvOEeidHuA,5630
5
+ application_sdk/_logging.py,sha256=MF8nRCXSsXpezfN9JSaVseI6CAeAx01traw2rMTEfrU,5601
6
+ application_sdk/constants.py,sha256=nDrj-eO2zhTQpMAerMWqA2hxOnWDycJY9GhSCqeB7Qk,57358
7
+ application_sdk/version.py,sha256=HfBJFmdkRP_ShtvU33EGMlONIHmp7l9dMyT3XJWyR_M,1929
8
+ application_sdk/_runtime/__init__.py,sha256=q2bsC6ZMzs3IxYApASAi7FF_jYq0rWW0McPOLVWTCGc,1661
9
+ application_sdk/_runtime/offload.py,sha256=SJErwLMYQj6egeXl4KNNHZUKEU_sMzueI5gxoC-ei5w,47307
10
+ application_sdk/_runtime/progress.py,sha256=ZzPgHT-eYq7q-2z5YFf1C-xSO6SBUP9CPw-qjE9Aztc,35898
11
+ application_sdk/clients/__init__.py,sha256=UQpSypkiMKsQmj6xDDh7BLB3zTW_sJ6-Z9aE5NN36rM,2316
12
+ application_sdk/clients/_interface.py,sha256=kLMvnty1JARC-wWg53RspxuYKdJLUqB5_zj_luHgnIM,2056
13
+ application_sdk/clients/_sql_failure_classifier.py,sha256=V1HXI9_6qHhiA-6VBHs6mRb4iW-Dbcn5gx3vNSPYlCg,4405
14
+ application_sdk/clients/base.py,sha256=WiZLJDEjR56PlMNM8DsMTC2S_g_LGWVHXQHkhHofhfM,25743
15
+ application_sdk/clients/http_errors.py,sha256=LzISD0RFfZqThWTsVXJ56q1jXgsdIXyodPh1bLNqREw,1062
16
+ application_sdk/clients/models.py,sha256=sg4BbZ1OjjMhHYhKI98QznNpf6R0NseR4uOQjv7xB8I,1893
17
+ application_sdk/clients/sql.py,sha256=qOsi-qZBJxlLG79sI8M3ovX0NI516zjKh5n_zfx5M4c,51131
18
+ application_sdk/clients/sql_errors.py,sha256=gFkYtFpuwjtiYyKjZnRn4lKAxvlgKPaaqOsHxC1iDic,7228
19
+ application_sdk/clients/sql_typecasters.py,sha256=5I2wkVg_jhbSCThoQcxIGaeXqeZKicZHSqL9scjkAwQ,19815
20
+ application_sdk/clients/ssl_utils.py,sha256=-fRUzg8gdfcEvYC9T5umvJKuwtv_pU8heTSDbOckT0M,8252
21
+ application_sdk/common/__init__.py,sha256=Jt4-qAamjlGIepPQQg5ZRat1ElA-wnR7-cCCJWpMP-4,1510
22
+ application_sdk/common/_generated_tree.py,sha256=0AQDSHx7Gf3vpnbKvLGXYOUzXA1Z2WA_ARiWBCqZqq4,14275
23
+ application_sdk/common/_listing.py,sha256=Je7VXrVrs6twQiwWtEVaP4SfDjfhgZneT3jkOYd53Zs,8265
24
+ application_sdk/common/aws_utils.py,sha256=3kmDLTp36ZabFVHtZSZlFUEeOD5zbBSgvCCNW3CMSGg,18563
25
+ application_sdk/common/aws_utils_errors.py,sha256=JpPerOzPITi9iyUBZRvXpb17AsBvoFuTyDfquvlLCdI,3049
26
+ application_sdk/common/build_identity.py,sha256=FzRiRy1leiH4Rh8X2vWhUxJxDg--Lr5_U6_q-vRr-TM,5711
27
+ application_sdk/common/concurrency.py,sha256=ne7E1tQFF2NVrao0PfFyN_6U-nChHwW_HHp5oEIjyZI,1411
28
+ application_sdk/common/errors.py,sha256=Z2DYMknoEK70NT2kjgiin-ygsWtMh1pJ_4xoHHWSoRc,3386
29
+ application_sdk/common/filter_matching.py,sha256=EYhntNg7Q_7i7z_5lCO0pjhzYGqlZ-qnlBjk5pX4qlE,11839
30
+ application_sdk/common/logger.py,sha256=OePZ7PEg7MRvln_aXComGnJ-CuYttrIMcsjcSMmZtGQ,461
31
+ application_sdk/common/models.py,sha256=qqgSI-wy3IFTtgd7YrioX9YpdDqKjgZngY_ZAK4Xjn8,885
32
+ application_sdk/common/sql_filters.py,sha256=lIj0nam219FTQfuDrXbk8cfc_4BIitUp6E9W678FL_M,29411
33
+ application_sdk/common/sql_filters_errors.py,sha256=beED79h7tCcFzBq-lZ-8DUFo1MHvJl6YGuLzIg0WkDo,479
34
+ application_sdk/common/task_queue.py,sha256=nEBHwvzII47kwcQYJXPcBy8k5c0fUgCvUpu9QrMOBLs,20876
35
+ application_sdk/common/types.py,sha256=AkjA_wMj1M3D6Zzca4D_ai9Vk9OQvywFdjY57zWnHJs,2105
36
+ application_sdk/common/utils.py,sha256=3hx60cUNiCNmQSp2JdXi6_dMSSQ5LA9Wp_IIIXocxaA,3088
37
+ application_sdk/contracts/__init__.py,sha256=bJbJnH9Ydb85TstXO3oPIrAjNAh1Si6iF7KSKRo4kRQ,5174
38
+ application_sdk/contracts/base.py,sha256=RasICpDQQtDUMZNGfA7mQKdTE3_PaO_pC6EHoodth2s,46073
39
+ application_sdk/contracts/events.py,sha256=J_OcKSwB8Ez50iq0ekMr59k6jx80-oK5fO3ywKBlfyc,8891
40
+ application_sdk/contracts/types.py,sha256=mP56vvaJVlIyUceqi60dz1vRJ157Uf3Ti1xiXROj_B8,36026
41
+ application_sdk/contracts/types_errors.py,sha256=mIZJJZFmeQR1dlyFqd3ZHkiHmRSUoriyW8xxB0VjPRI,541
42
+ application_sdk/credentials/__init__.py,sha256=WwSs2cit6McTEEEIbg06qlt4eVkS9LCBgdVzEgOzx8Y,10802
43
+ application_sdk/credentials/errors.py,sha256=8Nd1cikMHEmGdkLwZTk-MP8J-lO3P3w4JmNyfnxgIFg,8132
44
+ application_sdk/credentials/extra.py,sha256=-9voLv9JHZKN5Vt9wX2AvP9xAekQjgOK6w-G1Sg_eTk,4957
45
+ application_sdk/credentials/ingress.py,sha256=a_K557ApbzJ-Y6P01avIy-be621A27TZ_cDP2M2TwEw,12486
46
+ application_sdk/credentials/ref.py,sha256=AUPzPmgp3i5EUj2E1OgX3wrkmobtCYfb5buT4zw668w,15668
47
+ application_sdk/credentials/spec.py,sha256=88_R1-jkscS9hYB9DD8QiTt1N_DwOVEUG32Y0H_KHVY,7312
48
+ application_sdk/credentials/types.py,sha256=EoTa1CTh7V53QH0ATw6076Lyvx-uG6nw2XsgHeMWDXw,10672
49
+ application_sdk/credentials/utils.py,sha256=xQppGlx-OZ8VoqAoG9W8SMx5YGFaQ2bSXvyqX-97gF4,11332
50
+ application_sdk/errors/__init__.py,sha256=D6XwpwssW1LCUCq6Un1wH9MFvNsn1bfV2f1zCyEr6u0,6374
51
+ application_sdk/errors/base.py,sha256=gJpLGyhC4anaWcq2oWiwYlTkboUb9kTX9iW0KdkSpic,25203
52
+ application_sdk/errors/categories.py,sha256=CsZH7cflO6Lew6nQwXEMSKLRBNpU5Lg7e3E_1uY2UTE,5737
53
+ application_sdk/errors/http.py,sha256=3hZhwEneaDwrLoXHDizkT8Tq_eyWGu57kV6cJm9qtCU,2987
54
+ application_sdk/errors/leaves.py,sha256=l0GNujyfYiivsjewfs2Zv2P3O_ZuBIx9Cah_kV9nfjE,22625
55
+ application_sdk/errors/wire.py,sha256=qhp1nmvMB3dRlzWoyVelPEAXM-8OOS5mRbzntdWod5I,5130
56
+ application_sdk/handler/__init__.py,sha256=TtMbs1Kz85s8xX1mn8MBjVTp7a6EFBwMTSw2HbcUgLY,2638
57
+ application_sdk/handler/_warmup.py,sha256=ItSXAV9XGotvcU3NjQ-sPXUJr88EDgOpj_wjaODbv6E,8065
58
+ application_sdk/handler/asgi.py,sha256=kRWm623CdtO1bislW-VlnLPDLQTyUzEIKi3FdK_UA7A,9858
59
+ application_sdk/handler/base.py,sha256=fUQ3Z9-PgyZ8BARlFf3LPWDRvH_Fts9tbeFbQdmiMmA,10755
60
+ application_sdk/handler/context.py,sha256=8m1hKRJcX40xmZnqgkyD5RLr5E6a9dbpcWIrXSWXZcc,7261
61
+ application_sdk/handler/contracts.py,sha256=Ke7YHsrMZQfcXQLFpIATtsHO9e4SNpURWjoeaite8DA,45667
62
+ application_sdk/handler/manifest.py,sha256=ZccekRT9MY-HJ8GlZNPu9pIEwqrXCfZi9X1ZD0V_lVE,2530
63
+ application_sdk/handler/metadata_routes.py,sha256=XFXEsCqhtN3pGELuFSx5RdMI7ySE1Hc44YQaAujj_94,32538
64
+ application_sdk/handler/object_routes.py,sha256=Hf3-RmcnUsPcJ_Vnwkd-EqOXdjy3yzL6Li7YcdZzIKA,16782
65
+ application_sdk/handler/request_contract.py,sha256=STdc0ZRRI3q4ezmgdjukFymfHKfdFvvjTzHLmwfMx6I,3960
66
+ application_sdk/handler/routes.py,sha256=IfAm3ogu53mDnn96JytvXIGNwDzKZtYlRxQKGYOxIss,50826
67
+ application_sdk/handler/service_errors.py,sha256=Acpn6ynL8KjKnb5vfvuFdKVLm9hRh-dBUfVPeh2ZKHI,1232
68
+ application_sdk/server/__init__.py,sha256=3F0ZNS4UEVt_zmZ33kKQ8QGBmfsWW-ew9Hx5D3vhPx4,869
69
+ application_sdk/templates/__init__.py,sha256=r-gd3dghgsGF4FEJUUXODenalG7xOiqXFgkgjqmxKYI,1858
70
+ application_sdk/server/fastapi/models.py,sha256=_JoRoWbjl-NYKcR6vrKEDGtPPsj56XlHRMybhdmSMkY,11596
71
+ application_sdk/templates/contracts/__init__.py,sha256=igGpFiWkE59ZcRZrODu6phK1GrAwNDzFqUjkTYi61_c,2965
72
+ application_sdk/templates/contracts/base_metadata_extraction.py,sha256=cS8W5iRUVQPmacUNpth8hcvvA4zyJQzDlOk2u3shyCo,1025
73
+ application_sdk/templates/contracts/incremental_sql.py,sha256=FyF0zfaFZEt4dOh6nlEAO_HXzrUQGKEAHkd726wOHHY,20281
74
+ application_sdk/templates/contracts/sql_metadata.py,sha256=-IdvhouNARodwcngV43HMyDDP9h22se4hkuvkSQa97E,35068
75
+ application_sdk/templates/contracts/sql_query.py,sha256=bljv0TL-RtOdPXoWjDD9vbDt8pat2-_RoUACaruuhsc,3136
76
+ atlan_application_sdk_api-3.51.0.dist-info/METADATA,sha256=1M0C-FrI4VQyJOTeyXpGXJruLhGUfPflwgx8KPR-tEY,9073
77
+ atlan_application_sdk_api-3.51.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
78
+ atlan_application_sdk_api-3.51.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.4
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any