atlan-application-sdk 0.1.1rc24__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.
Files changed (380) hide show
  1. atlan_application_sdk-0.1.1rc25/.cursor/BUGBOT.md +53 -0
  2. atlan_application_sdk-0.1.1rc25/.env.example +37 -0
  3. atlan_application_sdk-0.1.1rc25/.github/release_notes.md +7 -0
  4. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/CHANGELOG.md +9 -0
  5. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/PKG-INFO +2 -1
  6. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/metadata_extraction/sql.py +67 -6
  7. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/query_extraction/sql.py +9 -6
  8. atlan_application_sdk-0.1.1rc25/application_sdk/clients/atlan_auth.py +232 -0
  9. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/clients/sql.py +16 -23
  10. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/clients/temporal.py +123 -22
  11. atlan_application_sdk-0.1.1rc25/application_sdk/common/credential_utils.py +85 -0
  12. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/common/error_codes.py +12 -0
  13. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/constants.py +33 -3
  14. atlan_application_sdk-0.1.1rc25/application_sdk/inputs/objectstore.py +252 -0
  15. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/inputs/secretstore.py +20 -35
  16. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/inputs/statestore.py +2 -1
  17. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/observability/observability.py +7 -6
  18. atlan_application_sdk-0.1.1rc25/application_sdk/outputs/atlan_storage.py +166 -0
  19. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/outputs/objectstore.py +13 -5
  20. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/outputs/statestore.py +7 -3
  21. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/version.py +1 -1
  22. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/workflows/metadata_extraction/sql.py +26 -5
  23. atlan_application_sdk-0.1.1rc25/components/atlan-storage.yaml +20 -0
  24. atlan_application_sdk-0.1.1rc25/components/deployment-secrets.yaml +7 -0
  25. atlan_application_sdk-0.1.1rc25/docs/docs/concepts/atlanupload.md +339 -0
  26. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/inputs.md +0 -2
  27. atlan_application_sdk-0.1.1rc25/docs/docs/concepts/temporal_auth.md +534 -0
  28. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/pyproject.toml +6 -1
  29. atlan_application_sdk-0.1.1rc25/tests/conftest.py +15 -0
  30. atlan_application_sdk-0.1.1rc25/tests/unit/clients/test_atlan_auth.py +131 -0
  31. atlan_application_sdk-0.1.1rc25/tests/unit/clients/test_atlanauth.py +121 -0
  32. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/clients/test_sql_client.py +8 -8
  33. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/clients/test_temporal_client.py +31 -24
  34. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/common/test_credential_utils.py +5 -94
  35. atlan_application_sdk-0.1.1rc25/tests/unit/outputs/test_atlanstorage.py +253 -0
  36. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/outputs/test_objectstore.py +10 -21
  37. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/outputs/test_statestore.py +0 -21
  38. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/workflows/metadata_extraction/test_sql.py +2 -1
  39. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/uv.lock +3 -1
  40. atlan_application_sdk-0.1.1rc24/.env.example +0 -15
  41. atlan_application_sdk-0.1.1rc24/.github/release_notes.md +0 -12
  42. atlan_application_sdk-0.1.1rc24/application_sdk/common/credential_utils.py +0 -56
  43. atlan_application_sdk-0.1.1rc24/application_sdk/inputs/objectstore.py +0 -122
  44. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.cursor/rules/documentation.mdc +0 -0
  45. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.cursor/rules/guidelines.mdc +0 -0
  46. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.cursor/rules/logging.mdc +0 -0
  47. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.cursor/rules/setup.mdc +0 -0
  48. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.cursor/rules/standards.mdc +0 -0
  49. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.cursor/rules/testing.mdc +0 -0
  50. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/CODEOWNERS +0 -0
  51. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
  52. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/ISSUE_TEMPLATE/config.yaml +0 -0
  53. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
  54. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/actions/docgen/action.yaml +0 -0
  55. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/actions/doclint/action.yaml +0 -0
  56. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/actions/docstring-coverage/action.yaml +0 -0
  57. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/actions/e2e-apps/action.yaml +0 -0
  58. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/actions/e2e-examples/action.yaml +0 -0
  59. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/actions/setup-deps/action.yaml +0 -0
  60. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/actions/sync-branches/action.yaml +0 -0
  61. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/actions/trivy/action.yaml +0 -0
  62. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/actions/trivy-container/action.yaml +0 -0
  63. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/actions/unit-tests/action.yaml +0 -0
  64. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/dependabot.yaml +0 -0
  65. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/pull_request_template.md +0 -0
  66. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/scripts/extract_release_notes.py +0 -0
  67. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/scripts/pre_release.py +0 -0
  68. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/scripts/release.py +0 -0
  69. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/scripts/trivy-to-markdown.py +0 -0
  70. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/scripts/update_changelog.py +0 -0
  71. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/AMPM.yml +0 -0
  72. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Accessibility.yml +0 -0
  73. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Acronyms.yml +0 -0
  74. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Adverbs.yml +0 -0
  75. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Auto.yml +0 -0
  76. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Avoid.yml +0 -0
  77. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Contractions.yml +0 -0
  78. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Dashes.yml +0 -0
  79. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/DateFormat.yml +0 -0
  80. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/DateNumbers.yml +0 -0
  81. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/DateOrder.yml +0 -0
  82. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Ellipses.yml +0 -0
  83. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/FirstPerson.yml +0 -0
  84. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Foreign.yml +0 -0
  85. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Gender.yml +0 -0
  86. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/GenderBias.yml +0 -0
  87. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/GeneralURL.yml +0 -0
  88. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/HeadingAcronyms.yml +0 -0
  89. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/HeadingColons.yml +0 -0
  90. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/HeadingPunctuation.yml +0 -0
  91. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Headings.yml +0 -0
  92. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Hyphens.yml +0 -0
  93. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Negative.yml +0 -0
  94. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Ordinal.yml +0 -0
  95. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/OxfordComma.yml +0 -0
  96. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Passive.yml +0 -0
  97. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Percentages.yml +0 -0
  98. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Plurals.yml +0 -0
  99. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Quotes.yml +0 -0
  100. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/RangeTime.yml +0 -0
  101. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Semicolon.yml +0 -0
  102. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/SentenceLength.yml +0 -0
  103. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Spacing.yml +0 -0
  104. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Suspended.yml +0 -0
  105. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Terms.yml +0 -0
  106. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/URLFormat.yml +0 -0
  107. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Units.yml +0 -0
  108. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Vocab.yml +0 -0
  109. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/We.yml +0 -0
  110. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/Wordiness.yml +0 -0
  111. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/Microsoft/meta.json +0 -0
  112. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/config/vocabularies/deviations/accept.txt +0 -0
  113. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/styles/config/vocabularies/deviations/reject.txt +0 -0
  114. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/checks.properties.json +0 -0
  115. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/checks.yaml +0 -0
  116. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/codeql.properties.json +0 -0
  117. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/codeql.yaml +0 -0
  118. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/dependency-review.properties.json +0 -0
  119. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/dependency-review.yml +0 -0
  120. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/stale.properties.json +0 -0
  121. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/stale.yml +0 -0
  122. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/trivy-container.properties.json +0 -0
  123. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/trivy-container.yaml +0 -0
  124. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/trivy.properties.json +0 -0
  125. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflow-templates/trivy.yaml +0 -0
  126. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflows/codeql.yaml +0 -0
  127. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflows/pre-release.yaml +0 -0
  128. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflows/pull_request.yaml +0 -0
  129. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflows/push.yaml +0 -0
  130. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflows/release.yaml.disabled +0 -0
  131. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflows/scale-tests.yaml +0 -0
  132. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflows/schedule.yaml +0 -0
  133. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflows/tag-and-publish.yaml +0 -0
  134. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.github/workflows/trivy-container.yaml +0 -0
  135. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.gitignore +0 -0
  136. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.pre-commit-config.yaml +0 -0
  137. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/.vscode/launch.json +0 -0
  138. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/CODE_OF_CONDUCT.md +0 -0
  139. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/CONTRIBUTING.md +0 -0
  140. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/LICENSE +0 -0
  141. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/NOTICE +0 -0
  142. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/README.md +0 -0
  143. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/SECURITY.md +0 -0
  144. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/__init__.py +0 -0
  145. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/__init__.py +0 -0
  146. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/common/__init__.py +0 -0
  147. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/common/models.py +0 -0
  148. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/common/utils.py +0 -0
  149. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/metadata_extraction/__init__.py +0 -0
  150. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/metadata_extraction/rest.py +0 -0
  151. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/activities/query_extraction/__init__.py +0 -0
  152. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/application/__init__.py +0 -0
  153. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/application/metadata_extraction/sql.py +0 -0
  154. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/clients/__init__.py +0 -0
  155. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/clients/utils.py +0 -0
  156. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/clients/workflow.py +0 -0
  157. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/common/__init__.py +0 -0
  158. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/common/aws_utils.py +0 -0
  159. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/common/dataframe_utils.py +0 -0
  160. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/common/utils.py +0 -0
  161. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/__init__.py +0 -0
  162. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/exporters/__init__.py +0 -0
  163. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/exporters/mkdocs.py +0 -0
  164. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/__init__.py +0 -0
  165. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/export/__init__.py +0 -0
  166. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/export/page.py +0 -0
  167. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/manifest/__init__.py +0 -0
  168. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/manifest/customer.py +0 -0
  169. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/manifest/internal.py +0 -0
  170. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/manifest/metadata.py +0 -0
  171. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/manifest/page.py +0 -0
  172. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/models/manifest/section.py +0 -0
  173. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/parsers/__init__.py +0 -0
  174. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/parsers/directory.py +0 -0
  175. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/docgen/parsers/manifest.py +0 -0
  176. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/handlers/__init__.py +0 -0
  177. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/handlers/sql.py +0 -0
  178. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/inputs/__init__.py +0 -0
  179. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/inputs/iceberg.py +0 -0
  180. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/inputs/json.py +0 -0
  181. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/inputs/parquet.py +0 -0
  182. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/inputs/sql_query.py +0 -0
  183. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/observability/__init__.py +0 -0
  184. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/observability/decorators/observability_decorator.py +0 -0
  185. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/observability/logger_adaptor.py +0 -0
  186. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/observability/metrics_adaptor.py +0 -0
  187. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/observability/traces_adaptor.py +0 -0
  188. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/observability/utils.py +0 -0
  189. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/outputs/__init__.py +0 -0
  190. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/outputs/eventstore.py +0 -0
  191. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/outputs/iceberg.py +0 -0
  192. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/outputs/json.py +0 -0
  193. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/outputs/parquet.py +0 -0
  194. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/outputs/secretstore.py +0 -0
  195. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/server/__init__.py +0 -0
  196. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/server/fastapi/__init__.py +0 -0
  197. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/server/fastapi/middleware/logmiddleware.py +0 -0
  198. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/server/fastapi/middleware/metrics.py +0 -0
  199. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/server/fastapi/models.py +0 -0
  200. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/server/fastapi/routers/__init__.py +0 -0
  201. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/server/fastapi/routers/server.py +0 -0
  202. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/server/fastapi/utils.py +0 -0
  203. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/__init__.py +0 -0
  204. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/e2e/__init__.py +0 -0
  205. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/e2e/base.py +0 -0
  206. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/e2e/client.py +0 -0
  207. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/e2e/conftest.py +0 -0
  208. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/e2e/utils.py +0 -0
  209. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/__init__.py +0 -0
  210. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/__init__.py +0 -0
  211. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/clients/__init__.py +0 -0
  212. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/clients/sql.py +0 -0
  213. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/common/__init__.py +0 -0
  214. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/common/logger.py +0 -0
  215. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/handlers/__init__.py +0 -0
  216. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/__init__.py +0 -0
  217. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/sql_metadata.py +0 -0
  218. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/sql_preflight.py +0 -0
  219. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/inputs/__init__.py +0 -0
  220. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/inputs/json_input.py +0 -0
  221. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/outputs/__init__.py +0 -0
  222. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/outputs/json_output.py +0 -0
  223. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/outputs/statestore.py +0 -0
  224. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/server/__init__.py +0 -0
  225. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/server/fastapi/__init__.py +0 -0
  226. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/sql_client.py +0 -0
  227. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/hypothesis/strategies/temporal.py +0 -0
  228. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/README.md +0 -0
  229. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/__init__.py +0 -0
  230. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/config_loader.py +0 -0
  231. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/data_generator.py +0 -0
  232. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/driver.py +0 -0
  233. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/examples/config.yaml +0 -0
  234. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/output_handler/__init__.py +0 -0
  235. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/output_handler/base.py +0 -0
  236. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/output_handler/csv_handler.py +0 -0
  237. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/output_handler/json_handler.py +0 -0
  238. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/scale_data_generator/output_handler/parquet_handler.py +0 -0
  239. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/test_utils/workflow_monitoring.py +0 -0
  240. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/__init__.py +0 -0
  241. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/atlas/__init__.py +0 -0
  242. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/atlas/sql.py +0 -0
  243. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/common/__init__.py +0 -0
  244. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/common/utils.py +0 -0
  245. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/query/__init__.py +0 -0
  246. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/query/templates/column.yaml +0 -0
  247. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/query/templates/database.yaml +0 -0
  248. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/query/templates/extras-procedure.yaml +0 -0
  249. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/query/templates/function.yaml +0 -0
  250. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/query/templates/schema.yaml +0 -0
  251. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/query/templates/table.yaml +0 -0
  252. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/transformers/query/templates/tag_attachment.yaml +0 -0
  253. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/worker.py +0 -0
  254. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/workflows/__init__.py +0 -0
  255. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/workflows/metadata_extraction/__init__.py +0 -0
  256. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/workflows/query_extraction/__init__.py +0 -0
  257. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/application_sdk/workflows/query_extraction/sql.py +0 -0
  258. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/components/README.md +0 -0
  259. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/components/aws-secrets.yaml +0 -0
  260. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/components/eventstore.yaml +0 -0
  261. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/components/objectstore.yaml +0 -0
  262. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/components/secretstore.yaml +0 -0
  263. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/components/statestore.yaml +0 -0
  264. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/activities.md +0 -0
  265. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/application.md +0 -0
  266. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/application_sql.md +0 -0
  267. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/clients.md +0 -0
  268. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/common.md +0 -0
  269. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/handlers.md +0 -0
  270. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/output_paths.md +0 -0
  271. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/outputs.md +0 -0
  272. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/server.md +0 -0
  273. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/worker.md +0 -0
  274. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/concepts/workflows.md +0 -0
  275. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/configuration.md +0 -0
  276. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/architecture.md +0 -0
  277. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/atlantis.md +0 -0
  278. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/best-practices.md +0 -0
  279. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/getting-started.md +0 -0
  280. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/index.md +0 -0
  281. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/partners.md +0 -0
  282. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/secretstores.md +0 -0
  283. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/sql-application-guide.md +0 -0
  284. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/guides/test-framework.md +0 -0
  285. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/index.md +0 -0
  286. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/setup/LINUX.md +0 -0
  287. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/setup/MAC.md +0 -0
  288. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/setup/WINDOWS.md +0 -0
  289. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/setup/troubleshooting.md +0 -0
  290. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/static/assets/logo.svg +0 -0
  291. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/static/images/phoenix-sdk-featureset.png +0 -0
  292. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/static/javascripts/mathjax.js +0 -0
  293. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/docs/static/stylesheets/extra.css +0 -0
  294. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/docs/mkdocs.yml +0 -0
  295. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/examples/README.md +0 -0
  296. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/examples/application_custom_fastapi.py +0 -0
  297. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/examples/application_fastapi.py +0 -0
  298. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/examples/application_hello_world.py +0 -0
  299. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/examples/application_sql.py +0 -0
  300. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/examples/application_sql_miner.py +0 -0
  301. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/examples/application_sql_with_custom_pyatlan_transformer.py +0 -0
  302. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/examples/application_sql_with_custom_transformer.py +0 -0
  303. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/examples/run_examples.py +0 -0
  304. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/examples/sql_query_templates/database.yaml +0 -0
  305. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/__init__.py +0 -0
  306. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/__init__.py +0 -0
  307. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/activities/__init__.py +0 -0
  308. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/activities/common/__init__.py +0 -0
  309. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/activities/common/test_utils.py +0 -0
  310. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/activities/metadata_extraction/__init__.py +0 -0
  311. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/activities/metadata_extraction/test_sql.py +0 -0
  312. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/activities/query_extraction/__init__.py +0 -0
  313. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/activities/test_activities.py +0 -0
  314. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/application/__init__.py +0 -0
  315. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/application/metadata_extraction/test_sql.py +0 -0
  316. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/application/test_application.py +0 -0
  317. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/clients/__init__.py +0 -0
  318. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/clients/test_async_sql_client.py +0 -0
  319. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/common/test_aws_utils.py +0 -0
  320. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/common/test_utils.py +0 -0
  321. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/docgen/parsers/test_directory_parser.py +0 -0
  322. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/docgen/parsers/test_manifest_parser.py +0 -0
  323. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/__init__.py +0 -0
  324. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/sql/test_auth.py +0 -0
  325. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/sql/test_check_schemas_and_databases.py +0 -0
  326. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/sql/test_extract_allowed_schemas.py +0 -0
  327. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/sql/test_metadata.py +0 -0
  328. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/sql/test_preflight_check.py +0 -0
  329. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/sql/test_prepare_metadata.py +0 -0
  330. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/sql/test_tables_check.py +0 -0
  331. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/handlers/sql/test_validate_filters.py +0 -0
  332. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/inputs/test_json.py +0 -0
  333. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/observability/__init__.py +0 -0
  334. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/observability/test_logger_adaptor.py +0 -0
  335. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/observability/test_metrics_adaptor.py +0 -0
  336. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/observability/test_traces_adaptor.py +0 -0
  337. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/outputs/test_iceberg.py +0 -0
  338. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/outputs/test_json_output.py +0 -0
  339. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/outputs/test_output.py +0 -0
  340. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/server/__init__.py +0 -0
  341. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/server/fastapi/routers/__init__.py +0 -0
  342. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/server/fastapi/routers/server.py +0 -0
  343. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/server/fastapi/test_fastapi.py +0 -0
  344. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/test_worker.py +0 -0
  345. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/__init__.py +0 -0
  346. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/__init__.py +0 -0
  347. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/raw_columns.json +0 -0
  348. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/raw_databases.json +0 -0
  349. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/raw_functions.json +0 -0
  350. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/raw_procedures.json +0 -0
  351. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/raw_schemas.json +0 -0
  352. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/raw_tables.json +0 -0
  353. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/transformed_columns.json +0 -0
  354. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/transformed_databases.json +0 -0
  355. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/transformed_functions.json +0 -0
  356. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/transformed_procedures.json +0 -0
  357. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/transformed_schemas.json +0 -0
  358. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/resources/transformed_tables.json +0 -0
  359. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/test_column.py +0 -0
  360. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/test_database.py +0 -0
  361. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/test_function.py +0 -0
  362. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/test_procedure.py +0 -0
  363. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/test_schema.py +0 -0
  364. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/atlas/test_table.py +0 -0
  365. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/raw/column.json +0 -0
  366. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/raw/database.json +0 -0
  367. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/raw/extras-procedure.json +0 -0
  368. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/raw/function.json +0 -0
  369. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/raw/schema.json +0 -0
  370. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/raw/table.json +0 -0
  371. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/transformed/column.json +0 -0
  372. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/transformed/database.json +0 -0
  373. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/transformed/extras-procedure.json +0 -0
  374. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/transformed/function.json +0 -0
  375. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/transformed/schema.json +0 -0
  376. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/resources/transformed/table.json +0 -0
  377. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/test_sql_transformer.py +0 -0
  378. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/transformers/query/test_sql_transformer_output_validation.py +0 -0
  379. {atlan_application_sdk-0.1.1rc24 → atlan_application_sdk-0.1.1rc25}/tests/unit/workflows/query_extraction/__init__.py +0 -0
  380. {atlan_application_sdk-0.1.1rc24 → 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,14 @@
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
+
3
12
 
4
13
  ## v0.1.1rc24 (August 01, 2025)
5
14
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atlan-application-sdk
3
- Version: 0.1.1rc24
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 APP_TENANT_ID, APPLICATION_NAME, SQL_QUERIES_PATH
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 SecretStoreInput.fetch_secret(
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 SecretStoreInput.fetch_secret(
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)
@@ -414,7 +413,9 @@ class SQLQueryExtractionActivities(ActivitiesInterface):
414
413
 
415
414
  logger.info(f"Last marker: {last_marker}")
416
415
  await ObjectStoreOutput.push_file_to_object_store(
417
- workflow_args["output_prefix"], marker_file_path
416
+ workflow_args["output_prefix"],
417
+ marker_file_path,
418
+ object_store_name=UPSTREAM_OBJECT_STORE_NAME,
418
419
  )
419
420
  logger.info(f"Marker file written to {marker_file_path}")
420
421
 
@@ -444,7 +445,9 @@ class SQLQueryExtractionActivities(ActivitiesInterface):
444
445
  os.makedirs(workflow_args["output_prefix"], exist_ok=True)
445
446
 
446
447
  ObjectStoreInput.download_file_from_object_store(
447
- workflow_args["output_prefix"], marker_file_path
448
+ workflow_args["output_prefix"],
449
+ marker_file_path,
450
+ object_store_name=UPSTREAM_OBJECT_STORE_NAME,
448
451
  )
449
452
 
450
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
@@ -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.resolved_credentials)
123
- aws_access_key_id = self.resolved_credentials.get("username")
124
- aws_secret_access_key = self.resolved_credentials.get("password")
125
- host = self.resolved_credentials.get("host")
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.resolved_credentials.get("port")
138
- region = self.resolved_credentials.get("region")
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.resolved_credentials)
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.resolved_credentials.get("username")
179
- host = self.resolved_credentials.get("host")
180
- port = self.resolved_credentials.get("port")
181
- region = self.resolved_credentials.get("region")
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.resolved_credentials.get(
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.resolved_credentials.get("password")
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.resolved_credentials)
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.resolved_credentials.get(param) or extra.get(param)
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.resolved_credentials.get(key) or extra.get(key)
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