atlan-application-sdk 0.1.1rc23__tar.gz → 0.1.1rc25__tar.gz
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.
- atlan_application_sdk-0.1.1rc25/.cursor/BUGBOT.md +53 -0
- atlan_application_sdk-0.1.1rc25/.env.example +37 -0
- atlan_application_sdk-0.1.1rc25/.github/release_notes.md +7 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/CHANGELOG.md +23 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/PKG-INFO +2 -1
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/metadata_extraction/sql.py +67 -6
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/query_extraction/sql.py +12 -8
- atlan_application_sdk-0.1.1rc25/application_sdk/clients/atlan_auth.py +232 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/clients/sql.py +16 -23
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/clients/temporal.py +123 -22
- atlan_application_sdk-0.1.1rc25/application_sdk/common/credential_utils.py +85 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/common/error_codes.py +12 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/common/utils.py +55 -39
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/constants.py +33 -3
- atlan_application_sdk-0.1.1rc25/application_sdk/inputs/objectstore.py +252 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/inputs/secretstore.py +20 -35
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/inputs/statestore.py +2 -1
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/observability/observability.py +7 -6
- atlan_application_sdk-0.1.1rc25/application_sdk/outputs/atlan_storage.py +166 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/outputs/objectstore.py +13 -5
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/outputs/statestore.py +7 -3
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/version.py +1 -1
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/workflows/metadata_extraction/sql.py +26 -5
- atlan_application_sdk-0.1.1rc25/components/atlan-storage.yaml +20 -0
- atlan_application_sdk-0.1.1rc25/components/deployment-secrets.yaml +7 -0
- atlan_application_sdk-0.1.1rc25/docs/docs/concepts/atlanupload.md +339 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/inputs.md +0 -2
- atlan_application_sdk-0.1.1rc25/docs/docs/concepts/temporal_auth.md +534 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/pyproject.toml +6 -1
- atlan_application_sdk-0.1.1rc25/tests/conftest.py +15 -0
- atlan_application_sdk-0.1.1rc25/tests/unit/clients/test_atlan_auth.py +131 -0
- atlan_application_sdk-0.1.1rc25/tests/unit/clients/test_atlanauth.py +121 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/clients/test_sql_client.py +8 -8
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/clients/test_temporal_client.py +31 -24
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/common/test_credential_utils.py +5 -94
- atlan_application_sdk-0.1.1rc25/tests/unit/common/test_utils.py +897 -0
- atlan_application_sdk-0.1.1rc25/tests/unit/outputs/test_atlanstorage.py +253 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/outputs/test_objectstore.py +10 -21
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/outputs/test_statestore.py +0 -21
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/workflows/metadata_extraction/test_sql.py +2 -1
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/uv.lock +3 -1
- atlan_application_sdk-0.1.1rc23/.env.example +0 -15
- atlan_application_sdk-0.1.1rc23/.github/release_notes.md +0 -8
- atlan_application_sdk-0.1.1rc23/application_sdk/common/credential_utils.py +0 -56
- atlan_application_sdk-0.1.1rc23/application_sdk/inputs/objectstore.py +0 -122
- atlan_application_sdk-0.1.1rc23/tests/unit/common/test_utils.py +0 -437
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.cursor/rules/documentation.mdc +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.cursor/rules/guidelines.mdc +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.cursor/rules/logging.mdc +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.cursor/rules/setup.mdc +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.cursor/rules/standards.mdc +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.cursor/rules/testing.mdc +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/CODEOWNERS +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/ISSUE_TEMPLATE/config.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/actions/docgen/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/actions/doclint/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/actions/docstring-coverage/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/actions/e2e-apps/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/actions/e2e-examples/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/actions/setup-deps/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/actions/sync-branches/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/actions/trivy/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/actions/trivy-container/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/actions/unit-tests/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/dependabot.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/pull_request_template.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/scripts/extract_release_notes.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/scripts/pre_release.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/scripts/release.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/scripts/trivy-to-markdown.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/scripts/update_changelog.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/AMPM.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Accessibility.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Acronyms.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Adverbs.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Auto.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Avoid.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Contractions.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Dashes.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/DateFormat.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/DateNumbers.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/DateOrder.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Ellipses.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/FirstPerson.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Foreign.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Gender.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/GenderBias.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/GeneralURL.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/HeadingAcronyms.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/HeadingColons.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/HeadingPunctuation.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Headings.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Hyphens.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Negative.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Ordinal.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/OxfordComma.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Passive.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Percentages.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Plurals.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Quotes.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/RangeTime.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Semicolon.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/SentenceLength.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Spacing.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Suspended.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Terms.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/URLFormat.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Units.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Vocab.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/We.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Wordiness.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/meta.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/config/vocabularies/deviations/accept.txt +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/styles/config/vocabularies/deviations/reject.txt +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/checks.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/checks.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/codeql.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/codeql.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/dependency-review.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/dependency-review.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/stale.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/stale.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/trivy-container.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/trivy-container.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/trivy.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/trivy.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflows/codeql.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflows/pre-release.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflows/pull_request.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflows/push.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflows/release.yaml.disabled +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflows/scale-tests.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflows/schedule.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflows/tag-and-publish.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.github/workflows/trivy-container.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.gitignore +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.pre-commit-config.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/.vscode/launch.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/CODE_OF_CONDUCT.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/CONTRIBUTING.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/LICENSE +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/NOTICE +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/README.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/SECURITY.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/common/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/common/models.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/common/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/metadata_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/metadata_extraction/rest.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/application/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/application/metadata_extraction/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/clients/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/clients/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/clients/workflow.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/common/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/common/aws_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/common/dataframe_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/exporters/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/exporters/mkdocs.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/export/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/export/page.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/manifest/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/manifest/customer.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/manifest/internal.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/manifest/metadata.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/manifest/page.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/manifest/section.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/parsers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/parsers/directory.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/parsers/manifest.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/handlers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/handlers/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/inputs/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/inputs/iceberg.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/inputs/json.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/inputs/parquet.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/inputs/sql_query.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/observability/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/observability/decorators/observability_decorator.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/observability/logger_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/observability/metrics_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/observability/traces_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/observability/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/outputs/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/outputs/eventstore.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/outputs/iceberg.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/outputs/json.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/outputs/parquet.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/outputs/secretstore.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/server/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/server/fastapi/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/server/fastapi/middleware/logmiddleware.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/server/fastapi/middleware/metrics.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/server/fastapi/models.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/server/fastapi/routers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/server/fastapi/routers/server.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/server/fastapi/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/e2e/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/e2e/base.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/e2e/client.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/e2e/conftest.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/e2e/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/clients/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/clients/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/common/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/common/logger.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/handlers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/sql_metadata.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/sql_preflight.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/inputs/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/inputs/json_input.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/outputs/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/outputs/json_output.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/outputs/statestore.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/server/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/server/fastapi/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/sql_client.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/temporal.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/README.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/config_loader.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/data_generator.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/driver.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/examples/config.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/output_handler/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/output_handler/base.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/output_handler/csv_handler.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/output_handler/json_handler.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/output_handler/parquet_handler.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/workflow_monitoring.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/atlas/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/atlas/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/common/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/common/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/query/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/query/templates/column.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/query/templates/database.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/query/templates/extras-procedure.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/query/templates/function.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/query/templates/schema.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/query/templates/table.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/query/templates/tag_attachment.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/worker.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/workflows/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/workflows/metadata_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/workflows/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/workflows/query_extraction/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/components/README.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/components/aws-secrets.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/components/eventstore.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/components/objectstore.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/components/secretstore.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/components/statestore.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/activities.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/application.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/application_sql.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/clients.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/common.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/handlers.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/output_paths.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/outputs.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/server.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/worker.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/workflows.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/configuration.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/architecture.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/atlantis.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/best-practices.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/getting-started.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/index.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/partners.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/secretstores.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/sql-application-guide.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/test-framework.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/index.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/setup/LINUX.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/setup/MAC.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/setup/WINDOWS.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/setup/troubleshooting.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/static/assets/logo.svg +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/static/images/phoenix-sdk-featureset.png +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/static/javascripts/mathjax.js +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/docs/static/stylesheets/extra.css +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/docs/mkdocs.yml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/examples/README.md +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/examples/application_custom_fastapi.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/examples/application_fastapi.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/examples/application_hello_world.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/examples/application_sql.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/examples/application_sql_miner.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/examples/application_sql_with_custom_pyatlan_transformer.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/examples/application_sql_with_custom_transformer.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/examples/run_examples.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/examples/sql_query_templates/database.yaml +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/activities/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/activities/common/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/activities/common/test_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/activities/metadata_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/activities/metadata_extraction/test_sql.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/activities/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/activities/test_activities.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/application/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/application/metadata_extraction/test_sql.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/application/test_application.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/clients/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/clients/test_async_sql_client.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/common/test_aws_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/docgen/parsers/test_directory_parser.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/docgen/parsers/test_manifest_parser.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/sql/test_auth.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/sql/test_check_schemas_and_databases.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/sql/test_extract_allowed_schemas.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/sql/test_metadata.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/sql/test_preflight_check.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/sql/test_prepare_metadata.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/sql/test_tables_check.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/sql/test_validate_filters.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/inputs/test_json.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/observability/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/observability/test_logger_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/observability/test_metrics_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/observability/test_traces_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/outputs/test_iceberg.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/outputs/test_json_output.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/outputs/test_output.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/server/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/server/fastapi/routers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/server/fastapi/routers/server.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/server/fastapi/test_fastapi.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/test_worker.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/raw_columns.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/raw_databases.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/raw_functions.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/raw_procedures.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/raw_schemas.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/raw_tables.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/transformed_columns.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/transformed_databases.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/transformed_functions.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/transformed_procedures.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/transformed_schemas.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/transformed_tables.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/test_column.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/test_database.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/test_function.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/test_procedure.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/test_schema.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/test_table.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/raw/column.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/raw/database.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/raw/extras-procedure.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/raw/function.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/raw/schema.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/raw/table.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/transformed/column.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/transformed/database.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/transformed/extras-procedure.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/transformed/function.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/transformed/schema.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/transformed/table.json +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/test_sql_transformer.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/test_sql_transformer_output_validation.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/workflows/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/tests/unit/workflows/query_extraction/test_sql.py +0 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Project Review Guidelines - Application SDK
|
|
2
|
+
|
|
3
|
+
## Core Principles
|
|
4
|
+
|
|
5
|
+
**Less Code is Better** - Prioritize simplicity, readability, and maintainability over cleverness. Every line of code is a liability that must be justified.
|
|
6
|
+
|
|
7
|
+
## Critical Review Checklist
|
|
8
|
+
|
|
9
|
+
### 🔍 Code Quality & Minimalism
|
|
10
|
+
|
|
11
|
+
- **Necessity Check**: Is this code absolutely necessary? Can existing functionality be reused?
|
|
12
|
+
- **Single Responsibility**: Does each function/class do exactly one thing well?
|
|
13
|
+
- **DRY Violations**: Any repeated logic that should be extracted into shared utilities?
|
|
14
|
+
- **Cognitive Load**: Can a new developer understand this change with less cognitive load?
|
|
15
|
+
- **Magic Numbers/Strings**: All constants properly defined and named in @application_sdk/constants.py
|
|
16
|
+
- **Spell Check**: No typos in code, comments, docstrings, or documentation
|
|
17
|
+
|
|
18
|
+
### 🏗️ Architecture & Design
|
|
19
|
+
|
|
20
|
+
- **Module Boundaries**: Changes respect existing module responsibilities
|
|
21
|
+
- **Error Handling**: Proper exception handling with meaningful error messages
|
|
22
|
+
- **Resource Management**: Files, connections, and resources properly closed/released
|
|
23
|
+
- **Async Patterns**: Proper async/await usage where applicable
|
|
24
|
+
- **Configuration**: No hardcoded values; use proper configuration management
|
|
25
|
+
|
|
26
|
+
### 📝 Documentation Requirements
|
|
27
|
+
|
|
28
|
+
- **Docstrings**: All public functions, classes, and modules have Google-style docstrings
|
|
29
|
+
- **Type Hints**: All function parameters and return values are typed
|
|
30
|
+
- **Complex Logic**: Non-obvious business logic has inline comments explaining "why"
|
|
31
|
+
|
|
32
|
+
### 🧪 Testing
|
|
33
|
+
|
|
34
|
+
- **Testing Standards**: Testing standards are defined in [testing.mdc](mdc:.cursor/rules/testing.mdc)
|
|
35
|
+
- **Test Coverage**: New code has corresponding tests (unit/integration/e2e as appropriate)
|
|
36
|
+
- **Edge Cases**: Error conditions and boundary cases are tested
|
|
37
|
+
- **Mock Strategy**: External dependencies properly mocked/isolated
|
|
38
|
+
- **Test Naming**: Test names clearly describe the scenario being tested
|
|
39
|
+
|
|
40
|
+
### 🔒 Security & Performance
|
|
41
|
+
|
|
42
|
+
- **Input Validation**: All external inputs validated and sanitized
|
|
43
|
+
- **Secrets Management**: No secrets in code; proper credential handling
|
|
44
|
+
- **SQL Injection**: Parameterized queries used for all SQL operations
|
|
45
|
+
- **Performance Impact**: Resource-intensive operations benchmarked
|
|
46
|
+
- **Memory Leaks**: Long-running processes properly manage memory
|
|
47
|
+
|
|
48
|
+
### 📊 Observability & Logging
|
|
49
|
+
|
|
50
|
+
- **Logging Standards**: logging standards are defined in [logging.mdc](mdc:.cursor/rules/logging.mdc)
|
|
51
|
+
- **Metrics**: Key operations include appropriate metrics
|
|
52
|
+
- **Error Context**: Error logs include sufficient context for debugging
|
|
53
|
+
- **Trace Information**: Critical paths include trace information
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# refer application_sdk/constants.py for extensive list of environment configurations
|
|
2
|
+
|
|
3
|
+
ATLAN_WORKFLOW_HOST=localhost
|
|
4
|
+
ATLAN_WORKFLOW_PORT=7233
|
|
5
|
+
ATLAN_WORKFLOW_NAMESPACE=default
|
|
6
|
+
ATLAN_APPLICATION_NAME=default
|
|
7
|
+
ATLAN_TENANT_ID=development
|
|
8
|
+
ATLAN_WORKFLOW_UI_HOST=localhost
|
|
9
|
+
ATLAN_WORKFLOW_UI_PORT=8233
|
|
10
|
+
ATLAN_WORKFLOW_MAX_TIMEOUT_HOURS=1
|
|
11
|
+
ATLAN_MAX_CONCURRENT_ACTIVITIES=5
|
|
12
|
+
ATLAN_APP_DASHBOARD_HOST=localhost
|
|
13
|
+
ATLAN_APP_DASHBOARD_PORT=3000
|
|
14
|
+
ATLAN_APP_HTTP_HOST=0.0.0.0
|
|
15
|
+
ATLAN_APP_HTTP_PORT=8000
|
|
16
|
+
ATLAN_WORKFLOW_METRICS_PORT=8234
|
|
17
|
+
ATLAN_SQL_SERVER_MIN_VERSION=1.0
|
|
18
|
+
ENABLE_OTLP_LOGS=false
|
|
19
|
+
ATLAN_HEARTBEAT_TIMEOUT_SECONDS=120 # 2 minutes
|
|
20
|
+
ATLAN_START_TO_CLOSE_TIMEOUT_SECONDS=7200 # 2 hours
|
|
21
|
+
# ATLAN_ENABLE_OBSERVABILITY_DAPR_SINK="false"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# if you plan to deploy the app in customer environment, below is a sample environment variables you need to set
|
|
25
|
+
ATLAN_WORKFLOW_HOST="tenant-temporal.atlan.com"
|
|
26
|
+
ATLAN_WORKFLOW_PORT="443"
|
|
27
|
+
ATLAN_LOCAL_DEVELOPMENT=false
|
|
28
|
+
ATLAN_WORKFLOW_AUTH_ENABLED="true"
|
|
29
|
+
ENABLE_ATLAN_UPLOAD="true"
|
|
30
|
+
ATLAN_DEPLOYMENT_SECRETS='{"appName_app_client_id":"enter_client_id","appName_app_client_secret":"enter_secret","atlan_auth_url":"https://tenant.atlan.com/auth/realms/default/protocol/openid-connect/token","workflow_tls_enabled":"true","deployment_name":"agent-v2"}'
|
|
31
|
+
|
|
32
|
+
# Storage:
|
|
33
|
+
DEPLOYMENT_OBJECT_STORE_NAME="objectstore"
|
|
34
|
+
UPSTREAM_OBJECT_STORE_NAME="atlan-storage"
|
|
35
|
+
|
|
36
|
+
# Secret Store
|
|
37
|
+
SECRET_STORE_NAME="aws-secrets"
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
## v0.1.1rc25 (August 05, 2025)
|
|
2
|
+
|
|
3
|
+
Full Changelog: https://github.com/atlanhq/application-sdk/compare/v0.1.1rc24...v0.1.1rc25
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- implement OAuth2 authentication and data transfer for applications (#634) (by @nishantmunjal7 in [e5e70a2](https://github.com/atlanhq/application-sdk/commit/e5e70a2))
|
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.1.1rc25 (August 05, 2025)
|
|
4
|
+
|
|
5
|
+
Full Changelog: https://github.com/atlanhq/application-sdk/compare/v0.1.1rc24...v0.1.1rc25
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- implement OAuth2 authentication and data transfer for applications (#634) (by @nishantmunjal7 in [e5e70a2](https://github.com/atlanhq/application-sdk/commit/e5e70a2))
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## v0.1.1rc24 (August 01, 2025)
|
|
14
|
+
|
|
15
|
+
Full Changelog: https://github.com/atlanhq/application-sdk/compare/v0.1.1rc23...v0.1.1rc24
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
- Add utility function to fetch include/exclude databases from include-exclude regex (#623) (by @Abhishek Agrawal in [0c6cc62](https://github.com/atlanhq/application-sdk/commit/0c6cc62))
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
- miner output path (#626) (by @Onkar Ravgan in [cabe7eb](https://github.com/atlanhq/application-sdk/commit/cabe7eb))
|
|
24
|
+
- db name regex pattern (#630) (by @Onkar Ravgan in [bb26992](https://github.com/atlanhq/application-sdk/commit/bb26992))
|
|
25
|
+
|
|
3
26
|
## v0.1.1rc23 (July 29, 2025)
|
|
4
27
|
|
|
5
28
|
Full Changelog: https://github.com/atlanhq/application-sdk/compare/v0.1.1rc22...v0.1.1rc23
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atlan-application-sdk
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.1rc25
|
|
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
|
|
@@ -19,6 +19,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.13
|
|
21
21
|
Requires-Python: >=3.11
|
|
22
|
+
Requires-Dist: aiohttp>=3.10.0
|
|
22
23
|
Requires-Dist: duckdb-engine>=0.17.0
|
|
23
24
|
Requires-Dist: duckdb>=1.1.3
|
|
24
25
|
Requires-Dist: fastapi[standard]>=0.115.0
|
|
@@ -7,14 +7,21 @@ from application_sdk.activities import ActivitiesInterface, ActivitiesState
|
|
|
7
7
|
from application_sdk.activities.common.models import ActivityStatistics
|
|
8
8
|
from application_sdk.activities.common.utils import auto_heartbeater, get_workflow_id
|
|
9
9
|
from application_sdk.clients.sql import BaseSQLClient
|
|
10
|
+
from application_sdk.common.credential_utils import get_credentials
|
|
10
11
|
from application_sdk.common.dataframe_utils import is_empty_dataframe
|
|
12
|
+
from application_sdk.common.error_codes import ActivityError
|
|
11
13
|
from application_sdk.common.utils import prepare_query, read_sql_files
|
|
12
|
-
from application_sdk.constants import
|
|
14
|
+
from application_sdk.constants import (
|
|
15
|
+
APP_TENANT_ID,
|
|
16
|
+
APPLICATION_NAME,
|
|
17
|
+
SQL_QUERIES_PATH,
|
|
18
|
+
TEMPORARY_PATH,
|
|
19
|
+
)
|
|
13
20
|
from application_sdk.handlers.sql import BaseSQLHandler
|
|
14
21
|
from application_sdk.inputs.parquet import ParquetInput
|
|
15
|
-
from application_sdk.inputs.secretstore import SecretStoreInput
|
|
16
22
|
from application_sdk.inputs.sql_query import SQLQueryInput
|
|
17
23
|
from application_sdk.observability.logger_adaptor import get_logger
|
|
24
|
+
from application_sdk.outputs.atlan_storage import AtlanStorageOutput
|
|
18
25
|
from application_sdk.outputs.json import JsonOutput
|
|
19
26
|
from application_sdk.outputs.parquet import ParquetOutput
|
|
20
27
|
from application_sdk.transformers import TransformerInterface
|
|
@@ -137,9 +144,7 @@ class BaseSQLMetadataExtractionActivities(ActivitiesInterface):
|
|
|
137
144
|
self._state[workflow_id].handler = handler
|
|
138
145
|
|
|
139
146
|
if "credential_guid" in workflow_args:
|
|
140
|
-
credentials = await
|
|
141
|
-
secret_key=workflow_args["credential_guid"]
|
|
142
|
-
)
|
|
147
|
+
credentials = await get_credentials(workflow_args["credential_guid"])
|
|
143
148
|
await sql_client.load(credentials)
|
|
144
149
|
|
|
145
150
|
self._state[workflow_id].sql_client = sql_client
|
|
@@ -485,9 +490,9 @@ class BaseSQLMetadataExtractionActivities(ActivitiesInterface):
|
|
|
485
490
|
)
|
|
486
491
|
raw_input = raw_input.get_batched_daft_dataframe()
|
|
487
492
|
transformed_output = JsonOutput(
|
|
488
|
-
output_prefix=output_prefix,
|
|
489
493
|
output_path=output_path,
|
|
490
494
|
output_suffix="transformed",
|
|
495
|
+
output_prefix=output_prefix,
|
|
491
496
|
typename=typename,
|
|
492
497
|
chunk_start=workflow_args.get("chunk_start"),
|
|
493
498
|
)
|
|
@@ -506,3 +511,59 @@ class BaseSQLMetadataExtractionActivities(ActivitiesInterface):
|
|
|
506
511
|
)
|
|
507
512
|
await transformed_output.write_daft_dataframe(transform_metadata)
|
|
508
513
|
return await transformed_output.get_statistics()
|
|
514
|
+
|
|
515
|
+
@activity.defn
|
|
516
|
+
@auto_heartbeater
|
|
517
|
+
async def upload_to_atlan(
|
|
518
|
+
self, workflow_args: Dict[str, Any]
|
|
519
|
+
) -> ActivityStatistics:
|
|
520
|
+
"""Upload transformed data to Atlan storage.
|
|
521
|
+
|
|
522
|
+
This activity uploads the transformed data from object store to Atlan storage
|
|
523
|
+
(S3 via Dapr). It only runs if ENABLE_ATLAN_UPLOAD is set to true and the
|
|
524
|
+
Atlan storage component is available.
|
|
525
|
+
|
|
526
|
+
Args:
|
|
527
|
+
workflow_args (Dict[str, Any]): Workflow configuration containing paths and metadata.
|
|
528
|
+
|
|
529
|
+
Returns:
|
|
530
|
+
ActivityStatistics: Upload statistics or skip statistics if upload is disabled.
|
|
531
|
+
|
|
532
|
+
Raises:
|
|
533
|
+
ValueError: If workflow_id or workflow_run_id are missing.
|
|
534
|
+
ActivityError: If the upload fails with any migration errors when ENABLE_ATLAN_UPLOAD is true.
|
|
535
|
+
"""
|
|
536
|
+
|
|
537
|
+
# Upload data from object store to Atlan storage
|
|
538
|
+
# Use workflow_id/workflow_run_id as the prefix to migrate specific data
|
|
539
|
+
migration_prefix = os.path.relpath(workflow_args["output_path"], TEMPORARY_PATH)
|
|
540
|
+
logger.info(
|
|
541
|
+
f"Starting migration from object store with prefix: {migration_prefix}"
|
|
542
|
+
)
|
|
543
|
+
upload_stats = await AtlanStorageOutput.migrate_from_objectstore_to_atlan(
|
|
544
|
+
prefix=migration_prefix
|
|
545
|
+
)
|
|
546
|
+
|
|
547
|
+
# Log upload statistics
|
|
548
|
+
logger.info(
|
|
549
|
+
f"Atlan upload completed: {upload_stats.migrated_files} files uploaded, "
|
|
550
|
+
f"{upload_stats.failed_migrations} failed"
|
|
551
|
+
)
|
|
552
|
+
|
|
553
|
+
if upload_stats.failures:
|
|
554
|
+
logger.error(f"Upload failed with {len(upload_stats.failures)} errors")
|
|
555
|
+
for failure in upload_stats.failures:
|
|
556
|
+
logger.error(f"Upload error: {failure}")
|
|
557
|
+
|
|
558
|
+
# Mark activity as failed when there are upload failures
|
|
559
|
+
raise ActivityError(
|
|
560
|
+
f"{ActivityError.ATLAN_UPLOAD_ERROR}: Atlan upload failed with {len(upload_stats.failures)} errors. "
|
|
561
|
+
f"Failed migrations: {upload_stats.failed_migrations}, "
|
|
562
|
+
f"Total files: {upload_stats.total_files}"
|
|
563
|
+
)
|
|
564
|
+
|
|
565
|
+
return ActivityStatistics(
|
|
566
|
+
total_record_count=upload_stats.migrated_files,
|
|
567
|
+
chunk_count=upload_stats.total_files,
|
|
568
|
+
typename="atlan-upload-completed",
|
|
569
|
+
)
|
|
@@ -9,10 +9,11 @@ from temporalio import activity
|
|
|
9
9
|
from application_sdk.activities import ActivitiesInterface, ActivitiesState
|
|
10
10
|
from application_sdk.activities.common.utils import auto_heartbeater, get_workflow_id
|
|
11
11
|
from application_sdk.clients.sql import BaseSQLClient
|
|
12
|
+
from application_sdk.common.credential_utils import get_credentials
|
|
13
|
+
from application_sdk.constants import UPSTREAM_OBJECT_STORE_NAME
|
|
12
14
|
from application_sdk.handlers import HandlerInterface
|
|
13
15
|
from application_sdk.handlers.sql import BaseSQLHandler
|
|
14
16
|
from application_sdk.inputs.objectstore import ObjectStoreInput
|
|
15
|
-
from application_sdk.inputs.secretstore import SecretStoreInput
|
|
16
17
|
from application_sdk.inputs.sql_query import SQLQueryInput
|
|
17
18
|
from application_sdk.observability.logger_adaptor import get_logger
|
|
18
19
|
from application_sdk.outputs.objectstore import ObjectStoreOutput
|
|
@@ -128,9 +129,7 @@ class SQLQueryExtractionActivities(ActivitiesInterface):
|
|
|
128
129
|
workflow_id = get_workflow_id()
|
|
129
130
|
sql_client = self.sql_client_class()
|
|
130
131
|
if "credential_guid" in workflow_args:
|
|
131
|
-
credentials = await
|
|
132
|
-
secret_key=workflow_args["credential_guid"]
|
|
133
|
-
)
|
|
132
|
+
credentials = await get_credentials(workflow_args["credential_guid"])
|
|
134
133
|
await sql_client.load(credentials)
|
|
135
134
|
|
|
136
135
|
handler = self.handler_class(sql_client)
|
|
@@ -201,8 +200,9 @@ class SQLQueryExtractionActivities(ActivitiesInterface):
|
|
|
201
200
|
sql_input = SQLQueryInput(
|
|
202
201
|
engine=state.sql_client.engine,
|
|
203
202
|
query=self.get_formatted_query(self.fetch_queries_sql, workflow_args),
|
|
203
|
+
chunk_size=None,
|
|
204
204
|
)
|
|
205
|
-
sql_input = await sql_input.
|
|
205
|
+
sql_input = await sql_input.get_dataframe()
|
|
206
206
|
|
|
207
207
|
raw_output = ParquetOutput(
|
|
208
208
|
output_prefix=workflow_args["output_prefix"],
|
|
@@ -212,7 +212,7 @@ class SQLQueryExtractionActivities(ActivitiesInterface):
|
|
|
212
212
|
start_marker=workflow_args["start_marker"],
|
|
213
213
|
end_marker=workflow_args["end_marker"],
|
|
214
214
|
)
|
|
215
|
-
await raw_output.
|
|
215
|
+
await raw_output.write_dataframe(sql_input)
|
|
216
216
|
|
|
217
217
|
logger.info(
|
|
218
218
|
f"Query fetch completed, {raw_output.total_record_count} records processed",
|
|
@@ -413,7 +413,9 @@ class SQLQueryExtractionActivities(ActivitiesInterface):
|
|
|
413
413
|
|
|
414
414
|
logger.info(f"Last marker: {last_marker}")
|
|
415
415
|
await ObjectStoreOutput.push_file_to_object_store(
|
|
416
|
-
workflow_args["output_prefix"],
|
|
416
|
+
workflow_args["output_prefix"],
|
|
417
|
+
marker_file_path,
|
|
418
|
+
object_store_name=UPSTREAM_OBJECT_STORE_NAME,
|
|
417
419
|
)
|
|
418
420
|
logger.info(f"Marker file written to {marker_file_path}")
|
|
419
421
|
|
|
@@ -443,7 +445,9 @@ class SQLQueryExtractionActivities(ActivitiesInterface):
|
|
|
443
445
|
os.makedirs(workflow_args["output_prefix"], exist_ok=True)
|
|
444
446
|
|
|
445
447
|
ObjectStoreInput.download_file_from_object_store(
|
|
446
|
-
workflow_args["output_prefix"],
|
|
448
|
+
workflow_args["output_prefix"],
|
|
449
|
+
marker_file_path,
|
|
450
|
+
object_store_name=UPSTREAM_OBJECT_STORE_NAME,
|
|
447
451
|
)
|
|
448
452
|
|
|
449
453
|
logger.info(f"Output prefix: {workflow_args['output_prefix']}")
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"""OAuth2 token manager with automatic secret store discovery."""
|
|
2
|
+
|
|
3
|
+
import time
|
|
4
|
+
from typing import Any, Dict, Optional
|
|
5
|
+
|
|
6
|
+
import aiohttp
|
|
7
|
+
|
|
8
|
+
from application_sdk.common.error_codes import ClientError
|
|
9
|
+
from application_sdk.constants import (
|
|
10
|
+
APPLICATION_NAME,
|
|
11
|
+
WORKFLOW_AUTH_CLIENT_ID_KEY,
|
|
12
|
+
WORKFLOW_AUTH_CLIENT_SECRET_KEY,
|
|
13
|
+
WORKFLOW_AUTH_ENABLED,
|
|
14
|
+
WORKFLOW_AUTH_URL_KEY,
|
|
15
|
+
)
|
|
16
|
+
from application_sdk.inputs.secretstore import SecretStoreInput
|
|
17
|
+
from application_sdk.observability.logger_adaptor import get_logger
|
|
18
|
+
|
|
19
|
+
logger = get_logger(__name__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class AtlanAuthClient:
|
|
23
|
+
"""OAuth2 token manager for cloud service authentication.
|
|
24
|
+
|
|
25
|
+
Currently supports Temporal authentication. Future versions will support:
|
|
26
|
+
- Centralized token caching
|
|
27
|
+
- Handling EventIngress authentication
|
|
28
|
+
- Invoking more services with the same token
|
|
29
|
+
|
|
30
|
+
The same token (with appropriate scopes) can be used for multiple services
|
|
31
|
+
that the application needs to access.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
def __init__(self):
|
|
35
|
+
"""Initialize the OAuth2 token manager.
|
|
36
|
+
|
|
37
|
+
Credentials are always fetched from the configured Dapr secret store component.
|
|
38
|
+
The secret store component can be configured to use various backends
|
|
39
|
+
(environment variables, AWS Secrets Manager, Azure Key Vault, etc.)
|
|
40
|
+
"""
|
|
41
|
+
self.application_name = APPLICATION_NAME
|
|
42
|
+
self.auth_config: Dict[str, Any] = SecretStoreInput.get_deployment_secret()
|
|
43
|
+
self.auth_enabled: bool = WORKFLOW_AUTH_ENABLED
|
|
44
|
+
self.auth_url: Optional[str] = None
|
|
45
|
+
|
|
46
|
+
# Secret store credentials (cached after first fetch)
|
|
47
|
+
self.credentials: Optional[Dict[str, str]] = None
|
|
48
|
+
|
|
49
|
+
# Token data
|
|
50
|
+
self._access_token: Optional[str] = None
|
|
51
|
+
self._token_expiry: float = 0
|
|
52
|
+
|
|
53
|
+
async def get_access_token(self, force_refresh: bool = False) -> Optional[str]:
|
|
54
|
+
"""Get a valid access token, refreshing if necessary.
|
|
55
|
+
|
|
56
|
+
The token contains all scopes configured for this application in the OAuth2 provider
|
|
57
|
+
and can be used for multiple services (Temporal, Data transfer, etc.).
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
force_refresh: If True, forces token refresh regardless of expiry
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
Optional[str]: A valid access token, or None if authentication is disabled
|
|
64
|
+
|
|
65
|
+
Raises:
|
|
66
|
+
ValueError: If authentication is disabled or credentials are missing
|
|
67
|
+
AtlanAuthError: If token refresh fails
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
if not self.auth_enabled:
|
|
71
|
+
return None
|
|
72
|
+
|
|
73
|
+
# Get credentials and ensure auth_url is set
|
|
74
|
+
if not self.credentials:
|
|
75
|
+
self.credentials = await self._extract_auth_credentials()
|
|
76
|
+
if not self.credentials:
|
|
77
|
+
raise ClientError(
|
|
78
|
+
f"{ClientError.AUTH_CREDENTIALS_ERROR}: OAuth2 credentials not found for application '{self.application_name}'. "
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
if not self.auth_url:
|
|
82
|
+
raise ClientError(
|
|
83
|
+
f"{ClientError.AUTH_CONFIG_ERROR}: Auth URL is required when auth is enabled"
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
# Return existing token if it's still valid (with 30s buffer) and not forcing refresh
|
|
87
|
+
current_time = time.time()
|
|
88
|
+
if (
|
|
89
|
+
not force_refresh
|
|
90
|
+
and self._access_token
|
|
91
|
+
and current_time < self._token_expiry - 30
|
|
92
|
+
):
|
|
93
|
+
return self._access_token
|
|
94
|
+
|
|
95
|
+
# Refresh token
|
|
96
|
+
logger.info("Refreshing OAuth2 token")
|
|
97
|
+
|
|
98
|
+
async with aiohttp.ClientSession() as session:
|
|
99
|
+
async with session.post(
|
|
100
|
+
self.auth_url,
|
|
101
|
+
data={
|
|
102
|
+
"grant_type": "client_credentials",
|
|
103
|
+
"client_id": self.credentials["client_id"],
|
|
104
|
+
"client_secret": self.credentials["client_secret"],
|
|
105
|
+
},
|
|
106
|
+
headers={"Content-Type": "application/x-www-form-urlencoded"},
|
|
107
|
+
) as response:
|
|
108
|
+
if not response.ok:
|
|
109
|
+
# Clear cached credentials and token on auth failure in case they're stale
|
|
110
|
+
self.clear_cache()
|
|
111
|
+
error_text = await response.text()
|
|
112
|
+
raise ClientError(
|
|
113
|
+
f"{ClientError.AUTH_TOKEN_REFRESH_ERROR}: Failed to refresh token (HTTP {response.status}): {error_text}"
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
token_data = await response.json()
|
|
117
|
+
|
|
118
|
+
# Validate required fields exist
|
|
119
|
+
if "access_token" not in token_data or "expires_in" not in token_data:
|
|
120
|
+
raise ClientError(
|
|
121
|
+
f"{ClientError.AUTH_TOKEN_REFRESH_ERROR}: Missing required fields in OAuth2 response"
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
self._access_token = token_data["access_token"]
|
|
125
|
+
self._token_expiry = current_time + token_data["expires_in"]
|
|
126
|
+
|
|
127
|
+
if self._access_token is None:
|
|
128
|
+
raise ClientError(
|
|
129
|
+
f"{ClientError.AUTH_TOKEN_REFRESH_ERROR}: Received null access token from server"
|
|
130
|
+
)
|
|
131
|
+
return self._access_token
|
|
132
|
+
|
|
133
|
+
async def get_authenticated_headers(self) -> Dict[str, str]:
|
|
134
|
+
"""Get authentication headers for HTTP requests.
|
|
135
|
+
|
|
136
|
+
This method returns headers that can be used for any HTTP request
|
|
137
|
+
to services that this application is authorized to access.
|
|
138
|
+
|
|
139
|
+
Returns:
|
|
140
|
+
Dict[str, str]: Headers dictionary with Authorization header
|
|
141
|
+
|
|
142
|
+
Examples:
|
|
143
|
+
>>> auth_client = AtlanAuthClient("user-management")
|
|
144
|
+
>>> headers = await auth_client.get_authenticated_headers()
|
|
145
|
+
>>> # Use headers for any HTTP request
|
|
146
|
+
>>> async with aiohttp.ClientSession() as session:
|
|
147
|
+
... await session.get("https://api.company.com/users", headers=headers)
|
|
148
|
+
"""
|
|
149
|
+
if not self.auth_enabled:
|
|
150
|
+
return {}
|
|
151
|
+
|
|
152
|
+
token = await self.get_access_token()
|
|
153
|
+
if token is None:
|
|
154
|
+
return {}
|
|
155
|
+
return {"Authorization": f"Bearer {token}"}
|
|
156
|
+
|
|
157
|
+
def get_token_expiry_time(self) -> Optional[float]:
|
|
158
|
+
"""Get the expiry time of the current token.
|
|
159
|
+
|
|
160
|
+
Returns:
|
|
161
|
+
Optional[float]: Unix timestamp of token expiry, or None if no token
|
|
162
|
+
"""
|
|
163
|
+
return self._token_expiry if self._access_token else None
|
|
164
|
+
|
|
165
|
+
def get_time_until_expiry(self) -> Optional[float]:
|
|
166
|
+
"""Get the time remaining until token expires.
|
|
167
|
+
|
|
168
|
+
Returns:
|
|
169
|
+
Optional[float]: Seconds until expiry, or None if no token
|
|
170
|
+
"""
|
|
171
|
+
if not self._access_token or not self._token_expiry:
|
|
172
|
+
return None
|
|
173
|
+
|
|
174
|
+
return max(0, self._token_expiry - time.time())
|
|
175
|
+
|
|
176
|
+
async def _extract_auth_credentials(self) -> Optional[Dict[str, str]]:
|
|
177
|
+
"""Fetch app credentials from secret store - auth-specific logic"""
|
|
178
|
+
if (
|
|
179
|
+
WORKFLOW_AUTH_CLIENT_ID_KEY in self.auth_config
|
|
180
|
+
and WORKFLOW_AUTH_CLIENT_SECRET_KEY in self.auth_config
|
|
181
|
+
):
|
|
182
|
+
credentials = {
|
|
183
|
+
"client_id": self.auth_config[WORKFLOW_AUTH_CLIENT_ID_KEY],
|
|
184
|
+
"client_secret": self.auth_config[WORKFLOW_AUTH_CLIENT_SECRET_KEY],
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if WORKFLOW_AUTH_URL_KEY in self.auth_config:
|
|
188
|
+
self.auth_url = self.auth_config[WORKFLOW_AUTH_URL_KEY]
|
|
189
|
+
|
|
190
|
+
return credentials
|
|
191
|
+
return None
|
|
192
|
+
|
|
193
|
+
def clear_cache(self) -> None:
|
|
194
|
+
"""Clear cached credentials and token.
|
|
195
|
+
|
|
196
|
+
This method clears all cached authentication data, forcing fresh
|
|
197
|
+
credential discovery and token refresh on next access.
|
|
198
|
+
Useful for credential rotation scenarios.
|
|
199
|
+
"""
|
|
200
|
+
# we are doing this to force a fetch of the credentials from secret store
|
|
201
|
+
self.credentials = None
|
|
202
|
+
self.auth_url = None
|
|
203
|
+
self._access_token = None
|
|
204
|
+
self._token_expiry = 0
|
|
205
|
+
self.auth_config = {}
|
|
206
|
+
|
|
207
|
+
def calculate_refresh_interval(self) -> int:
|
|
208
|
+
"""Calculate the optimal token refresh interval based on token expiry.
|
|
209
|
+
|
|
210
|
+
Returns:
|
|
211
|
+
int: Refresh interval in seconds
|
|
212
|
+
"""
|
|
213
|
+
# Try to get token expiry time
|
|
214
|
+
expiry_time = self.get_token_expiry_time()
|
|
215
|
+
if expiry_time:
|
|
216
|
+
# Calculate time until expiry
|
|
217
|
+
time_until_expiry = self.get_time_until_expiry()
|
|
218
|
+
if time_until_expiry and time_until_expiry > 0:
|
|
219
|
+
# Refresh at 80% of the token lifetime, but at least every 5 minutes
|
|
220
|
+
# and at most every 30 minutes
|
|
221
|
+
refresh_interval = max(
|
|
222
|
+
5 * 60, # Minimum 5 minutes
|
|
223
|
+
min(
|
|
224
|
+
30 * 60, # Maximum 30 minutes
|
|
225
|
+
int(time_until_expiry * 0.8), # 80% of token lifetime
|
|
226
|
+
),
|
|
227
|
+
)
|
|
228
|
+
return refresh_interval
|
|
229
|
+
|
|
230
|
+
# Default fallback: refresh every 14 minutes
|
|
231
|
+
logger.info("Using default token refresh interval: 14 minutes")
|
|
232
|
+
return 14 * 60
|
{atlan_application_sdk-0.1.1rc23 → atlan_application_sdk-0.1.1rc25}/application_sdk/clients/sql.py
RENAMED
|
@@ -18,7 +18,6 @@ from application_sdk.common.aws_utils import (
|
|
|
18
18
|
generate_aws_rds_token_with_iam_role,
|
|
19
19
|
generate_aws_rds_token_with_iam_user,
|
|
20
20
|
)
|
|
21
|
-
from application_sdk.common.credential_utils import resolve_credentials
|
|
22
21
|
from application_sdk.common.error_codes import ClientError, CommonError
|
|
23
22
|
from application_sdk.common.utils import parse_credentials_extra
|
|
24
23
|
from application_sdk.constants import AWS_SESSION_NAME, USE_SERVER_SIDE_CURSOR
|
|
@@ -69,7 +68,6 @@ class BaseSQLClient(ClientInterface):
|
|
|
69
68
|
"""
|
|
70
69
|
self.use_server_side_cursor = use_server_side_cursor
|
|
71
70
|
self.credentials = credentials
|
|
72
|
-
self.resolved_credentials = {}
|
|
73
71
|
self.sql_alchemy_connect_args = sql_alchemy_connect_args
|
|
74
72
|
|
|
75
73
|
async def load(self, credentials: Dict[str, Any]) -> None:
|
|
@@ -82,7 +80,6 @@ class BaseSQLClient(ClientInterface):
|
|
|
82
80
|
ClientError: If connection fails due to authentication or connection issues
|
|
83
81
|
"""
|
|
84
82
|
self.credentials = credentials # Update the instance credentials
|
|
85
|
-
self.resolved_credentials = await resolve_credentials(credentials)
|
|
86
83
|
try:
|
|
87
84
|
from sqlalchemy import create_engine
|
|
88
85
|
|
|
@@ -119,10 +116,10 @@ class BaseSQLClient(ClientInterface):
|
|
|
119
116
|
Raises:
|
|
120
117
|
CommonError: If required credentials (username or database) are missing.
|
|
121
118
|
"""
|
|
122
|
-
extra = parse_credentials_extra(self.
|
|
123
|
-
aws_access_key_id = self.
|
|
124
|
-
aws_secret_access_key = self.
|
|
125
|
-
host = self.
|
|
119
|
+
extra = parse_credentials_extra(self.credentials)
|
|
120
|
+
aws_access_key_id = self.credentials.get("username")
|
|
121
|
+
aws_secret_access_key = self.credentials.get("password")
|
|
122
|
+
host = self.credentials.get("host")
|
|
126
123
|
user = extra.get("username")
|
|
127
124
|
database = extra.get("database")
|
|
128
125
|
if not user:
|
|
@@ -134,8 +131,8 @@ class BaseSQLClient(ClientInterface):
|
|
|
134
131
|
f"{CommonError.CREDENTIALS_PARSE_ERROR}: database is required for IAM user authentication"
|
|
135
132
|
)
|
|
136
133
|
|
|
137
|
-
port = self.
|
|
138
|
-
region = self.
|
|
134
|
+
port = self.credentials.get("port")
|
|
135
|
+
region = self.credentials.get("region")
|
|
139
136
|
token = generate_aws_rds_token_with_iam_user(
|
|
140
137
|
aws_access_key_id=aws_access_key_id,
|
|
141
138
|
aws_secret_access_key=aws_secret_access_key,
|
|
@@ -160,7 +157,7 @@ class BaseSQLClient(ClientInterface):
|
|
|
160
157
|
Raises:
|
|
161
158
|
CommonError: If required credentials (aws_role_arn or database) are missing.
|
|
162
159
|
"""
|
|
163
|
-
extra = parse_credentials_extra(self.
|
|
160
|
+
extra = parse_credentials_extra(self.credentials)
|
|
164
161
|
aws_role_arn = extra.get("aws_role_arn")
|
|
165
162
|
database = extra.get("database")
|
|
166
163
|
external_id = extra.get("aws_external_id")
|
|
@@ -175,10 +172,10 @@ class BaseSQLClient(ClientInterface):
|
|
|
175
172
|
)
|
|
176
173
|
|
|
177
174
|
session_name = AWS_SESSION_NAME
|
|
178
|
-
username = self.
|
|
179
|
-
host = self.
|
|
180
|
-
port = self.
|
|
181
|
-
region = self.
|
|
175
|
+
username = self.credentials.get("username")
|
|
176
|
+
host = self.credentials.get("host")
|
|
177
|
+
port = self.credentials.get("port")
|
|
178
|
+
region = self.credentials.get("region")
|
|
182
179
|
|
|
183
180
|
token = generate_aws_rds_token_with_iam_role(
|
|
184
181
|
role_arn=aws_role_arn,
|
|
@@ -204,9 +201,7 @@ class BaseSQLClient(ClientInterface):
|
|
|
204
201
|
Raises:
|
|
205
202
|
CommonError: If an invalid authentication type is specified.
|
|
206
203
|
"""
|
|
207
|
-
authType = self.
|
|
208
|
-
"authType", "basic"
|
|
209
|
-
) # Default to basic auth
|
|
204
|
+
authType = self.credentials.get("authType", "basic") # Default to basic auth
|
|
210
205
|
token = None
|
|
211
206
|
|
|
212
207
|
match authType:
|
|
@@ -215,7 +210,7 @@ class BaseSQLClient(ClientInterface):
|
|
|
215
210
|
case "iam_role":
|
|
216
211
|
token = self.get_iam_role_token()
|
|
217
212
|
case "basic":
|
|
218
|
-
token = self.
|
|
213
|
+
token = self.credentials.get("password")
|
|
219
214
|
case _:
|
|
220
215
|
raise CommonError(f"{CommonError.CREDENTIALS_PARSE_ERROR}: {authType}")
|
|
221
216
|
|
|
@@ -273,7 +268,7 @@ class BaseSQLClient(ClientInterface):
|
|
|
273
268
|
Raises:
|
|
274
269
|
ValueError: If required connection parameters are missing.
|
|
275
270
|
"""
|
|
276
|
-
extra = parse_credentials_extra(self.
|
|
271
|
+
extra = parse_credentials_extra(self.credentials)
|
|
277
272
|
|
|
278
273
|
# TODO: Uncomment this when the native deployment is ready
|
|
279
274
|
# If the compiled_url is present, use it directly
|
|
@@ -289,7 +284,7 @@ class BaseSQLClient(ClientInterface):
|
|
|
289
284
|
if param == "password":
|
|
290
285
|
param_values[param] = auth_token
|
|
291
286
|
else:
|
|
292
|
-
value = self.
|
|
287
|
+
value = self.credentials.get(param) or extra.get(param)
|
|
293
288
|
if value is None:
|
|
294
289
|
raise ValueError(f"{param} is required")
|
|
295
290
|
param_values[param] = value
|
|
@@ -304,7 +299,7 @@ class BaseSQLClient(ClientInterface):
|
|
|
304
299
|
if self.DB_CONFIG.get("parameters"):
|
|
305
300
|
parameter_keys = self.DB_CONFIG["parameters"]
|
|
306
301
|
self.DB_CONFIG["parameters"] = {
|
|
307
|
-
key: self.
|
|
302
|
+
key: self.credentials.get(key) or extra.get(key)
|
|
308
303
|
for key in parameter_keys
|
|
309
304
|
}
|
|
310
305
|
conn_str = self.add_connection_params(
|
|
@@ -404,8 +399,6 @@ class AsyncBaseSQLClient(BaseSQLClient):
|
|
|
404
399
|
ValueError: If connection fails due to invalid credentials or connection issues.
|
|
405
400
|
"""
|
|
406
401
|
self.credentials = credentials
|
|
407
|
-
self.resolved_credentials = await resolve_credentials(credentials)
|
|
408
|
-
|
|
409
402
|
try:
|
|
410
403
|
from sqlalchemy.ext.asyncio import create_async_engine
|
|
411
404
|
|