atlan-application-sdk 0.1.1rc36__tar.gz → 0.1.1rc37__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.1rc37/.github/release_notes.md +7 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/CHANGELOG.md +9 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/PKG-INFO +1 -1
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/activities/common/models.py +2 -1
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/inputs/parquet.py +4 -4
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/outputs/__init__.py +24 -1
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/outputs/json.py +57 -38
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/outputs/parquet.py +116 -18
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/version.py +1 -1
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/workflows/metadata_extraction/sql.py +18 -5
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/pyproject.toml +1 -1
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/inputs/test_parquet.py +4 -1
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/outputs/test_output.py +12 -3
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/workflows/metadata_extraction/test_sql_workflow.py +17 -14
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/uv.lock +1 -1
- atlan_application_sdk-0.1.1rc36/.github/release_notes.md +0 -9
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.cursor/rules/documentation.mdc +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.cursor/rules/exception-handling.mdc +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.cursor/rules/guidelines.mdc +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.cursor/rules/logging.mdc +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.cursor/rules/performance.mdc +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.cursor/rules/setup.mdc +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.cursor/rules/standards.mdc +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.cursor/rules/testing.mdc +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.env.example +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/CODEOWNERS +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/ISSUE_TEMPLATE/config.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/actions/docgen/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/actions/doclint/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/actions/docstring-coverage/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/actions/e2e-apps/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/actions/e2e-examples/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/actions/setup-deps/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/actions/sync-branches/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/actions/trivy/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/actions/trivy-container/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/actions/unit-tests/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/dependabot.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/pull_request_template.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/scripts/extract_release_notes.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/scripts/pre_release.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/scripts/release.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/scripts/trivy-to-markdown.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/scripts/update_changelog.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/AMPM.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Accessibility.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Acronyms.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Adverbs.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Auto.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Avoid.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Contractions.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Dashes.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/DateFormat.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/DateNumbers.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/DateOrder.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Ellipses.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/FirstPerson.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Foreign.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Gender.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/GenderBias.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/GeneralURL.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/HeadingAcronyms.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/HeadingColons.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/HeadingPunctuation.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Headings.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Hyphens.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Negative.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Ordinal.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/OxfordComma.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Passive.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Percentages.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Plurals.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Quotes.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/RangeTime.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Semicolon.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/SentenceLength.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Spacing.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Suspended.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Terms.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/URLFormat.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Units.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Vocab.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/We.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/Wordiness.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/Microsoft/meta.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/config/vocabularies/deviations/accept.txt +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/styles/config/vocabularies/deviations/reject.txt +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflow-templates/checks.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflow-templates/checks.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflow-templates/codeql.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflow-templates/codeql.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflow-templates/dependency-review.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflow-templates/dependency-review.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflow-templates/stale.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflow-templates/stale.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflow-templates/trivy-container.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflow-templates/trivy-container.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflow-templates/trivy.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflow-templates/trivy.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflows/codeql.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflows/pre-release.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflows/pull_request.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflows/push.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflows/release.yaml.disabled +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflows/scale-tests.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflows/schedule.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflows/tag-and-publish.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflows/trivy-container.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.github/workflows/verify-snyk-status.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.gitignore +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.pre-commit-config.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/.vscode/launch.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/CODE_OF_CONDUCT.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/CONTRIBUTING.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/LICENSE +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/NOTICE +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/README.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/SECURITY.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/activities/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/activities/common/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/activities/common/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/activities/lock_management.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/activities/metadata_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/activities/metadata_extraction/base.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/activities/metadata_extraction/rest.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/activities/metadata_extraction/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/activities/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/activities/query_extraction/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/application/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/application/metadata_extraction/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/clients/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/clients/async_atlan.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/clients/atlan.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/clients/atlan_auth.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/clients/base.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/clients/redis.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/clients/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/clients/temporal.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/clients/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/clients/workflow.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/common/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/common/aws_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/common/dapr_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/common/dataframe_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/common/error_codes.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/common/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/constants.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/decorators/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/decorators/locks.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/docgen/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/docgen/exporters/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/docgen/exporters/mkdocs.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/docgen/models/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/docgen/models/export/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/docgen/models/export/page.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/docgen/models/manifest/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/docgen/models/manifest/customer.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/docgen/models/manifest/internal.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/docgen/models/manifest/metadata.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/docgen/models/manifest/page.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/docgen/models/manifest/section.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/docgen/parsers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/docgen/parsers/directory.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/docgen/parsers/manifest.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/events/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/events/models.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/handlers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/handlers/base.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/handlers/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/inputs/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/inputs/iceberg.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/inputs/json.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/inputs/sql_query.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/interceptors/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/interceptors/events.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/interceptors/lock.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/observability/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/observability/decorators/observability_decorator.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/observability/logger_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/observability/metrics_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/observability/observability.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/observability/traces_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/observability/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/outputs/iceberg.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/server/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/server/fastapi/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/server/fastapi/middleware/logmiddleware.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/server/fastapi/middleware/metrics.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/server/fastapi/models.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/server/fastapi/routers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/server/fastapi/routers/server.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/server/fastapi/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/services/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/services/atlan_storage.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/services/eventstore.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/services/objectstore.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/services/secretstore.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/services/statestore.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/e2e/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/e2e/base.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/e2e/client.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/e2e/conftest.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/e2e/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/clients/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/clients/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/common/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/common/logger.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/handlers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/sql_metadata.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/sql_preflight.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/inputs/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/inputs/json_input.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/inputs/parquet_input.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/outputs/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/outputs/json_output.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/outputs/statestore.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/server/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/server/fastapi/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/sql_client.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/hypothesis/strategies/temporal.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/scale_data_generator/README.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/scale_data_generator/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/scale_data_generator/config_loader.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/scale_data_generator/data_generator.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/scale_data_generator/driver.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/scale_data_generator/examples/config.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/scale_data_generator/output_handler/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/scale_data_generator/output_handler/base.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/scale_data_generator/output_handler/csv_handler.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/scale_data_generator/output_handler/json_handler.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/scale_data_generator/output_handler/parquet_handler.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/test_utils/workflow_monitoring.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/transformers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/transformers/atlas/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/transformers/atlas/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/transformers/common/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/transformers/common/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/transformers/query/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/transformers/query/templates/column.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/transformers/query/templates/database.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/transformers/query/templates/extras-procedure.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/transformers/query/templates/function.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/transformers/query/templates/schema.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/transformers/query/templates/table.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/transformers/query/templates/tag_attachment.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/worker.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/workflows/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/workflows/metadata_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/workflows/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/workflows/query_extraction/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/components/README.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/components/atlan-storage.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/components/aws-secrets.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/components/deployment-secrets.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/components/eventstore.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/components/objectstore.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/components/secretstore.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/components/statestore.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/concepts/activities.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/concepts/application.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/concepts/application_sql.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/concepts/atlanupload.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/concepts/clients.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/concepts/common.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/concepts/handlers.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/concepts/inputs.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/concepts/output_paths.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/concepts/outputs.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/concepts/server.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/concepts/services.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/concepts/temporal_auth.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/concepts/worker.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/concepts/workflows.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/configuration.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/guides/architecture.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/guides/atlantis.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/guides/best-practices.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/guides/getting-started.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/guides/index.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/guides/partners.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/guides/secretstores.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/guides/sql-application-guide.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/guides/test-framework.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/index.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/setup/LINUX.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/setup/MAC.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/setup/WINDOWS.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/setup/troubleshooting.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/static/assets/logo.svg +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/static/images/phoenix-sdk-featureset.png +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/static/javascripts/mathjax.js +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/docs/static/stylesheets/extra.css +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/docs/mkdocs.yml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/examples/README.md +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/examples/application_custom_fastapi.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/examples/application_fastapi.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/examples/application_hello_world.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/examples/application_sql.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/examples/application_sql_miner.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/examples/application_sql_with_custom_pyatlan_transformer.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/examples/application_sql_with_custom_transformer.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/examples/run_examples.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/examples/sql_query_templates/database.yaml +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/conftest.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/activities/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/activities/common/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/activities/common/test_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/activities/metadata_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/activities/metadata_extraction/test_sql.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/activities/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/activities/test_activities.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/activities/test_lock_management.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/application/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/application/metadata_extraction/test_sql.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/application/test_application.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/clients/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/clients/test_async_atlan.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/clients/test_async_sql_client.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/clients/test_atlan_auth.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/clients/test_atlan_client.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/clients/test_atlanauth.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/clients/test_base_client.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/clients/test_redis_client.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/clients/test_sql_client.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/clients/test_temporal_client.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/common/test_aws_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/common/test_credential_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/common/test_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/docgen/parsers/test_directory_parser.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/docgen/parsers/test_manifest_parser.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/handlers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/handlers/sql/test_auth.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/handlers/sql/test_check_schemas_and_databases.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/handlers/sql/test_extract_allowed_schemas.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/handlers/sql/test_metadata.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/handlers/sql/test_preflight_check.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/handlers/sql/test_prepare_metadata.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/handlers/sql/test_tables_check.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/handlers/sql/test_validate_filters.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/handlers/test_base_handler.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/inputs/test_json.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/observability/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/observability/test_logger_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/observability/test_metrics_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/observability/test_traces_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/outputs/test_iceberg.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/outputs/test_json_output.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/server/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/server/fastapi/routers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/server/fastapi/routers/server.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/server/fastapi/test_fastapi.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/services/test_atlan_storage.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/services/test_eventstore.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/services/test_objectstore.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/services/test_statestore.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/test_worker.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/resources/raw_columns.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/resources/raw_databases.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/resources/raw_functions.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/resources/raw_procedures.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/resources/raw_schemas.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/resources/raw_tables.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/resources/transformed_columns.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/resources/transformed_databases.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/resources/transformed_functions.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/resources/transformed_procedures.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/resources/transformed_schemas.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/resources/transformed_tables.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/test_column.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/test_database.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/test_function.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/test_procedure.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/test_schema.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/atlas/test_table.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/query/resources/raw/column.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/query/resources/raw/database.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/query/resources/raw/extras-procedure.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/query/resources/raw/function.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/query/resources/raw/schema.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/query/resources/raw/table.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/query/resources/transformed/column.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/query/resources/transformed/database.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/query/resources/transformed/extras-procedure.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/query/resources/transformed/function.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/query/resources/transformed/schema.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/query/resources/transformed/table.json +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/query/test_sql_transformer.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/transformers/query/test_sql_transformer_output_validation.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/workflows/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/tests/unit/workflows/query_extraction/test_sql.py +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
## v0.1.1rc37 (September 03, 2025)
|
|
2
|
+
|
|
3
|
+
Full Changelog: https://github.com/atlanhq/application-sdk/compare/v0.1.1rc36...v0.1.1rc37
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- add file size-based chunking to JsonOutput (#650) (by @Nishchith Shetty in [7e7685b](https://github.com/atlanhq/application-sdk/commit/7e7685b))
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.1.1rc37 (September 03, 2025)
|
|
4
|
+
|
|
5
|
+
Full Changelog: https://github.com/atlanhq/application-sdk/compare/v0.1.1rc36...v0.1.1rc37
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- add file size-based chunking to JsonOutput (#650) (by @Nishchith Shetty in [7e7685b](https://github.com/atlanhq/application-sdk/commit/7e7685b))
|
|
10
|
+
|
|
11
|
+
|
|
3
12
|
|
|
4
13
|
## v0.1.1rc36 (September 01, 2025)
|
|
5
14
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atlan-application-sdk
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.1rc37
|
|
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
|
|
@@ -4,7 +4,7 @@ This module contains Pydantic models used to represent various data structures
|
|
|
4
4
|
needed by activities, such as statistics and configuration.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
from typing import Optional
|
|
7
|
+
from typing import List, Optional
|
|
8
8
|
|
|
9
9
|
from pydantic import BaseModel
|
|
10
10
|
|
|
@@ -34,4 +34,5 @@ class ActivityStatistics(BaseModel):
|
|
|
34
34
|
|
|
35
35
|
total_record_count: int = 0
|
|
36
36
|
chunk_count: int = 0
|
|
37
|
+
partitions: Optional[List[int]] = []
|
|
37
38
|
typename: Optional[str] = None
|
|
@@ -10,7 +10,7 @@ from application_sdk.services.objectstore import ObjectStore
|
|
|
10
10
|
logger = get_logger(__name__)
|
|
11
11
|
|
|
12
12
|
if TYPE_CHECKING:
|
|
13
|
-
import daft
|
|
13
|
+
import daft # type: ignore
|
|
14
14
|
import pandas as pd
|
|
15
15
|
|
|
16
16
|
|
|
@@ -136,7 +136,7 @@ class ParquetInput(Input):
|
|
|
136
136
|
daft.DataFrame: Combined daft dataframe from all parquet files.
|
|
137
137
|
"""
|
|
138
138
|
try:
|
|
139
|
-
import daft
|
|
139
|
+
import daft # type: ignore
|
|
140
140
|
|
|
141
141
|
if self.file_names:
|
|
142
142
|
path = f"{self.path}/{self.file_names[0].split('/')[0]}"
|
|
@@ -161,11 +161,11 @@ class ParquetInput(Input):
|
|
|
161
161
|
a batch of data from the parquet file(s).
|
|
162
162
|
"""
|
|
163
163
|
try:
|
|
164
|
-
import daft
|
|
164
|
+
import daft # type: ignore
|
|
165
165
|
|
|
166
166
|
if self.file_names:
|
|
167
167
|
for file_name in self.file_names:
|
|
168
|
-
path = f"{self.path}/{file_name
|
|
168
|
+
path = f"{self.path}/{file_name}"
|
|
169
169
|
if self.input_prefix and path:
|
|
170
170
|
await self.download_files(path)
|
|
171
171
|
yield daft.read_parquet(path)
|
|
@@ -13,6 +13,7 @@ from typing import (
|
|
|
13
13
|
Dict,
|
|
14
14
|
Generator,
|
|
15
15
|
List,
|
|
16
|
+
Literal,
|
|
16
17
|
Optional,
|
|
17
18
|
Union,
|
|
18
19
|
cast,
|
|
@@ -31,7 +32,7 @@ logger = get_logger(__name__)
|
|
|
31
32
|
activity.logger = logger
|
|
32
33
|
|
|
33
34
|
if TYPE_CHECKING:
|
|
34
|
-
import daft
|
|
35
|
+
import daft # type: ignore
|
|
35
36
|
import pandas as pd
|
|
36
37
|
|
|
37
38
|
|
|
@@ -52,6 +53,27 @@ class Output(ABC):
|
|
|
52
53
|
output_prefix: str
|
|
53
54
|
total_record_count: int
|
|
54
55
|
chunk_count: int
|
|
56
|
+
statistics: List[int] = []
|
|
57
|
+
|
|
58
|
+
def estimate_dataframe_file_size(
|
|
59
|
+
self, dataframe: "pd.DataFrame", file_type: Literal["json", "parquet"]
|
|
60
|
+
) -> int:
|
|
61
|
+
"""Estimate File size of a DataFrame by sampling a few records."""
|
|
62
|
+
if len(dataframe) == 0:
|
|
63
|
+
return 0
|
|
64
|
+
|
|
65
|
+
# Sample up to 10 records to estimate average size
|
|
66
|
+
sample_size = min(10, len(dataframe))
|
|
67
|
+
sample = dataframe.head(sample_size)
|
|
68
|
+
if file_type == "json":
|
|
69
|
+
sample_file = sample.to_json(orient="records", lines=True)
|
|
70
|
+
else:
|
|
71
|
+
sample_file = sample.to_parquet(index=False, compression="snappy")
|
|
72
|
+
if sample_file is not None:
|
|
73
|
+
avg_record_size = len(sample_file) / sample_size
|
|
74
|
+
return int(avg_record_size * len(dataframe))
|
|
75
|
+
|
|
76
|
+
return 0
|
|
55
77
|
|
|
56
78
|
def process_null_fields(
|
|
57
79
|
self,
|
|
@@ -217,6 +239,7 @@ class Output(ABC):
|
|
|
217
239
|
statistics = {
|
|
218
240
|
"total_record_count": self.total_record_count,
|
|
219
241
|
"chunk_count": self.chunk_count,
|
|
242
|
+
"partitions": self.statistics,
|
|
220
243
|
}
|
|
221
244
|
|
|
222
245
|
# Write the statistics to a json file
|
{atlan_application_sdk-0.1.1rc36 → atlan_application_sdk-0.1.1rc37}/application_sdk/outputs/json.py
RENAMED
|
@@ -6,6 +6,7 @@ import orjson
|
|
|
6
6
|
from temporalio import activity
|
|
7
7
|
|
|
8
8
|
from application_sdk.activities.common.utils import get_object_store_prefix
|
|
9
|
+
from application_sdk.constants import DAPR_MAX_GRPC_MESSAGE_LENGTH
|
|
9
10
|
from application_sdk.observability.logger_adaptor import get_logger
|
|
10
11
|
from application_sdk.observability.metrics_adaptor import MetricType, get_metrics
|
|
11
12
|
from application_sdk.outputs import Output
|
|
@@ -15,7 +16,7 @@ logger = get_logger(__name__)
|
|
|
15
16
|
activity.logger = logger
|
|
16
17
|
|
|
17
18
|
if TYPE_CHECKING:
|
|
18
|
-
import daft
|
|
19
|
+
import daft # type: ignore
|
|
19
20
|
import pandas as pd
|
|
20
21
|
|
|
21
22
|
|
|
@@ -32,7 +33,7 @@ def path_gen(chunk_start: int | None, chunk_count: int) -> str:
|
|
|
32
33
|
if chunk_start is None:
|
|
33
34
|
return f"{str(chunk_count)}.json"
|
|
34
35
|
else:
|
|
35
|
-
return f"{
|
|
36
|
+
return f"chunk-{chunk_start}-part{chunk_count}.json"
|
|
36
37
|
|
|
37
38
|
|
|
38
39
|
def convert_datetime_to_epoch(data: Any) -> Any:
|
|
@@ -124,6 +125,10 @@ class JsonOutput(Output):
|
|
|
124
125
|
self.chunk_size = chunk_size or 100000
|
|
125
126
|
self.buffer: List[Union["pd.DataFrame", "daft.DataFrame"]] = [] # noqa: F821
|
|
126
127
|
self.current_buffer_size = 0
|
|
128
|
+
self.current_buffer_size_bytes = 0 # Track estimated buffer size in bytes
|
|
129
|
+
self.max_file_size_bytes = int(
|
|
130
|
+
DAPR_MAX_GRPC_MESSAGE_LENGTH * 0.9
|
|
131
|
+
) # 90% of DAPR limit as safety buffer
|
|
127
132
|
self.path_gen = path_gen
|
|
128
133
|
self.start_marker = start_marker
|
|
129
134
|
self.end_marker = end_marker
|
|
@@ -172,8 +177,21 @@ class JsonOutput(Output):
|
|
|
172
177
|
]
|
|
173
178
|
|
|
174
179
|
for chunk in chunks:
|
|
180
|
+
# Estimate size of this chunk
|
|
181
|
+
chunk_size_bytes = self.estimate_dataframe_file_size(chunk, "json")
|
|
182
|
+
|
|
183
|
+
# Check if adding this chunk would exceed size limit
|
|
184
|
+
if (
|
|
185
|
+
self.current_buffer_size_bytes + chunk_size_bytes
|
|
186
|
+
> self.max_file_size_bytes
|
|
187
|
+
and self.current_buffer_size > 0
|
|
188
|
+
):
|
|
189
|
+
# Flush current buffer before adding this chunk
|
|
190
|
+
await self._flush_buffer()
|
|
191
|
+
|
|
175
192
|
self.buffer.append(chunk)
|
|
176
193
|
self.current_buffer_size += len(chunk)
|
|
194
|
+
self.current_buffer_size_bytes += chunk_size_bytes
|
|
177
195
|
|
|
178
196
|
if self.current_buffer_size >= partition:
|
|
179
197
|
await self._flush_buffer()
|
|
@@ -237,45 +255,19 @@ class JsonOutput(Output):
|
|
|
237
255
|
row, preserve_fields, null_to_empty_dict_fields
|
|
238
256
|
)
|
|
239
257
|
# Serialize the row and add it to the buffer
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
)
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
output_file_name = f"{self.output_path}/{self.path_gen(self.chunk_start, self.chunk_count)}"
|
|
250
|
-
with open(output_file_name, "w") as f:
|
|
251
|
-
f.writelines(buffer)
|
|
252
|
-
buffer.clear() # Clear the buffer
|
|
253
|
-
|
|
254
|
-
# Record chunk metrics
|
|
255
|
-
self.metrics.record_metric(
|
|
256
|
-
name="json_chunks_written",
|
|
257
|
-
value=1,
|
|
258
|
-
metric_type=MetricType.COUNTER,
|
|
259
|
-
labels={"type": "daft"},
|
|
260
|
-
description="Number of chunks written to JSON files",
|
|
261
|
-
)
|
|
258
|
+
serialized_row = orjson.dumps(
|
|
259
|
+
cleaned_row, option=orjson.OPT_APPEND_NEWLINE
|
|
260
|
+
).decode("utf-8")
|
|
261
|
+
buffer.append(serialized_row)
|
|
262
|
+
self.current_buffer_size_bytes += len(serialized_row)
|
|
263
|
+
if (self.chunk_size and len(buffer) >= self.chunk_size) or (
|
|
264
|
+
self.current_buffer_size_bytes > self.max_file_size_bytes
|
|
265
|
+
):
|
|
266
|
+
await self.flush_daft_buffer(buffer)
|
|
262
267
|
|
|
263
268
|
# Write any remaining rows in the buffer
|
|
264
269
|
if buffer:
|
|
265
|
-
self.
|
|
266
|
-
output_file_name = f"{self.output_path}/{self.path_gen(self.chunk_start, self.chunk_count)}"
|
|
267
|
-
with open(output_file_name, "w") as f:
|
|
268
|
-
f.writelines(buffer)
|
|
269
|
-
buffer.clear()
|
|
270
|
-
|
|
271
|
-
# Record chunk metrics
|
|
272
|
-
self.metrics.record_metric(
|
|
273
|
-
name="json_chunks_written",
|
|
274
|
-
value=1,
|
|
275
|
-
metric_type=MetricType.COUNTER,
|
|
276
|
-
labels={"type": "daft"},
|
|
277
|
-
description="Number of chunks written to JSON files",
|
|
278
|
-
)
|
|
270
|
+
await self.flush_daft_buffer(buffer)
|
|
279
271
|
|
|
280
272
|
# Record metrics for successful write
|
|
281
273
|
self.metrics.record_metric(
|
|
@@ -303,6 +295,32 @@ class JsonOutput(Output):
|
|
|
303
295
|
)
|
|
304
296
|
logger.error(f"Error writing daft dataframe to json: {str(e)}")
|
|
305
297
|
|
|
298
|
+
async def flush_daft_buffer(self, buffer: List[str]):
|
|
299
|
+
"""Flush the current buffer to a JSON file.
|
|
300
|
+
|
|
301
|
+
This method combines all DataFrames in the buffer, writes them to a JSON file,
|
|
302
|
+
and uploads the file to the object store.
|
|
303
|
+
"""
|
|
304
|
+
self.chunk_count += 1
|
|
305
|
+
output_file_name = (
|
|
306
|
+
f"{self.output_path}/{self.path_gen(self.chunk_start, self.chunk_count)}"
|
|
307
|
+
)
|
|
308
|
+
with open(output_file_name, "w") as f:
|
|
309
|
+
f.writelines(buffer)
|
|
310
|
+
buffer.clear() # Clear the buffer
|
|
311
|
+
|
|
312
|
+
self.current_buffer_size = 0
|
|
313
|
+
self.current_buffer_size_bytes = 0
|
|
314
|
+
|
|
315
|
+
# Record chunk metrics
|
|
316
|
+
self.metrics.record_metric(
|
|
317
|
+
name="json_chunks_written",
|
|
318
|
+
value=1,
|
|
319
|
+
metric_type=MetricType.COUNTER,
|
|
320
|
+
labels={"type": "daft"},
|
|
321
|
+
description="Number of chunks written to JSON files",
|
|
322
|
+
)
|
|
323
|
+
|
|
306
324
|
async def _flush_buffer(self):
|
|
307
325
|
"""Flush the current buffer to a JSON file.
|
|
308
326
|
|
|
@@ -353,6 +371,7 @@ class JsonOutput(Output):
|
|
|
353
371
|
|
|
354
372
|
self.buffer.clear()
|
|
355
373
|
self.current_buffer_size = 0
|
|
374
|
+
self.current_buffer_size_bytes = 0
|
|
356
375
|
|
|
357
376
|
except Exception as e:
|
|
358
377
|
# Record metrics for failed write
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import os
|
|
2
|
-
from typing import TYPE_CHECKING, Literal, Optional
|
|
2
|
+
from typing import TYPE_CHECKING, List, Literal, Optional, Union
|
|
3
3
|
|
|
4
4
|
from temporalio import activity
|
|
5
5
|
|
|
6
6
|
from application_sdk.activities.common.utils import get_object_store_prefix
|
|
7
|
+
from application_sdk.constants import DAPR_MAX_GRPC_MESSAGE_LENGTH
|
|
7
8
|
from application_sdk.observability.logger_adaptor import get_logger
|
|
8
9
|
from application_sdk.observability.metrics_adaptor import MetricType, get_metrics
|
|
9
10
|
from application_sdk.outputs import Output
|
|
@@ -13,7 +14,7 @@ logger = get_logger(__name__)
|
|
|
13
14
|
activity.logger = logger
|
|
14
15
|
|
|
15
16
|
if TYPE_CHECKING:
|
|
16
|
-
import daft
|
|
17
|
+
import daft # type: ignore
|
|
17
18
|
import pandas as pd
|
|
18
19
|
|
|
19
20
|
|
|
@@ -46,6 +47,7 @@ class ParquetOutput(Output):
|
|
|
46
47
|
typename: Optional[str] = None,
|
|
47
48
|
write_mode: Literal["append", "overwrite", "overwrite-partitions"] = "append",
|
|
48
49
|
chunk_size: Optional[int] = 100000,
|
|
50
|
+
buffer_size: Optional[int] = 100000,
|
|
49
51
|
total_record_count: int = 0,
|
|
50
52
|
chunk_count: int = 0,
|
|
51
53
|
chunk_start: Optional[int] = None,
|
|
@@ -78,11 +80,19 @@ class ParquetOutput(Output):
|
|
|
78
80
|
self.typename = typename
|
|
79
81
|
self.write_mode = write_mode
|
|
80
82
|
self.chunk_size = chunk_size
|
|
83
|
+
self.buffer_size = buffer_size
|
|
84
|
+
self.buffer: List[Union["pd.DataFrame", "daft.DataFrame"]] = [] # noqa: F821
|
|
81
85
|
self.total_record_count = total_record_count
|
|
82
86
|
self.chunk_count = chunk_count
|
|
87
|
+
self.current_buffer_size = 0
|
|
88
|
+
self.current_buffer_size_bytes = 0 # Track estimated buffer size in bytes
|
|
89
|
+
self.max_file_size_bytes = int(
|
|
90
|
+
DAPR_MAX_GRPC_MESSAGE_LENGTH * 0.9
|
|
91
|
+
) # 90% of DAPR limit as safety buffer
|
|
83
92
|
self.chunk_start = chunk_start
|
|
84
93
|
self.start_marker = start_marker
|
|
85
94
|
self.end_marker = end_marker
|
|
95
|
+
self.statistics = []
|
|
86
96
|
self.metrics = get_metrics()
|
|
87
97
|
|
|
88
98
|
# Create output directory
|
|
@@ -117,7 +127,7 @@ class ParquetOutput(Output):
|
|
|
117
127
|
if chunk_start is None:
|
|
118
128
|
return f"{str(chunk_count)}.parquet"
|
|
119
129
|
else:
|
|
120
|
-
return f"{str(chunk_start
|
|
130
|
+
return f"chunk-{str(chunk_start)}-part{str(chunk_count)}.parquet"
|
|
121
131
|
|
|
122
132
|
async def write_dataframe(self, dataframe: "pd.DataFrame"):
|
|
123
133
|
"""Write a pandas DataFrame to Parquet files and upload to object store.
|
|
@@ -126,20 +136,46 @@ class ParquetOutput(Output):
|
|
|
126
136
|
dataframe (pd.DataFrame): The DataFrame to write.
|
|
127
137
|
"""
|
|
128
138
|
try:
|
|
139
|
+
chunk_part = 0
|
|
129
140
|
if len(dataframe) == 0:
|
|
130
141
|
return
|
|
131
142
|
|
|
132
|
-
#
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
# Write the dataframe to parquet using pandas native method
|
|
138
|
-
dataframe.to_parquet(
|
|
139
|
-
file_path,
|
|
140
|
-
index=False,
|
|
141
|
-
compression="snappy", # Using snappy compression by default
|
|
143
|
+
# Split the DataFrame into chunks
|
|
144
|
+
partition = (
|
|
145
|
+
self.chunk_size
|
|
146
|
+
if self.chunk_start is None
|
|
147
|
+
else min(self.chunk_size, self.buffer_size)
|
|
142
148
|
)
|
|
149
|
+
chunks = [
|
|
150
|
+
dataframe[i : i + partition] # type: ignore
|
|
151
|
+
for i in range(0, len(dataframe), partition)
|
|
152
|
+
]
|
|
153
|
+
|
|
154
|
+
for chunk in chunks:
|
|
155
|
+
# Estimate size of this chunk
|
|
156
|
+
chunk_size_bytes = self.estimate_dataframe_file_size(chunk, "parquet")
|
|
157
|
+
|
|
158
|
+
# Check if adding this chunk would exceed size limit
|
|
159
|
+
if (
|
|
160
|
+
self.current_buffer_size_bytes + chunk_size_bytes
|
|
161
|
+
> self.max_file_size_bytes
|
|
162
|
+
and self.current_buffer_size > 0
|
|
163
|
+
):
|
|
164
|
+
# Flush current buffer before adding this chunk
|
|
165
|
+
chunk_part += 1
|
|
166
|
+
await self._flush_buffer(chunk_part)
|
|
167
|
+
|
|
168
|
+
self.buffer.append(chunk)
|
|
169
|
+
self.current_buffer_size += len(chunk)
|
|
170
|
+
self.current_buffer_size_bytes += chunk_size_bytes
|
|
171
|
+
|
|
172
|
+
if self.current_buffer_size >= partition: # type: ignore
|
|
173
|
+
chunk_part += 1
|
|
174
|
+
await self._flush_buffer(chunk_part)
|
|
175
|
+
|
|
176
|
+
if self.buffer and self.current_buffer_size > 0:
|
|
177
|
+
chunk_part += 1
|
|
178
|
+
await self._flush_buffer(chunk_part)
|
|
143
179
|
|
|
144
180
|
# Record metrics for successful write
|
|
145
181
|
self.metrics.record_metric(
|
|
@@ -159,11 +195,8 @@ class ParquetOutput(Output):
|
|
|
159
195
|
description="Number of chunks written to Parquet files",
|
|
160
196
|
)
|
|
161
197
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
source=file_path,
|
|
165
|
-
destination=get_object_store_prefix(file_path),
|
|
166
|
-
)
|
|
198
|
+
self.chunk_count += 1
|
|
199
|
+
self.statistics.append(chunk_part)
|
|
167
200
|
except Exception as e:
|
|
168
201
|
# Record metrics for failed write
|
|
169
202
|
self.metrics.record_metric(
|
|
@@ -245,3 +278,68 @@ class ParquetOutput(Output):
|
|
|
245
278
|
str: The full path of the output file.
|
|
246
279
|
"""
|
|
247
280
|
return self.output_path
|
|
281
|
+
|
|
282
|
+
async def _flush_buffer(self, chunk_part):
|
|
283
|
+
"""Flush the current buffer to a Parquet file.
|
|
284
|
+
|
|
285
|
+
This method combines all DataFrames in the buffer, writes them to a Parquet file,
|
|
286
|
+
and uploads the file to the object store.
|
|
287
|
+
|
|
288
|
+
Note:
|
|
289
|
+
If the buffer is empty or has no records, the method returns without writing.
|
|
290
|
+
"""
|
|
291
|
+
import pandas as pd
|
|
292
|
+
|
|
293
|
+
if not self.buffer or not self.current_buffer_size:
|
|
294
|
+
return
|
|
295
|
+
|
|
296
|
+
if not all(isinstance(df, pd.DataFrame) for df in self.buffer):
|
|
297
|
+
raise TypeError(
|
|
298
|
+
"_flush_buffer encountered non-DataFrame elements in buffer. This should not happen."
|
|
299
|
+
)
|
|
300
|
+
|
|
301
|
+
try:
|
|
302
|
+
# Now it's safe to cast for pd.concat
|
|
303
|
+
pd_buffer: List[pd.DataFrame] = self.buffer # type: ignore
|
|
304
|
+
combined_dataframe = pd.concat(pd_buffer)
|
|
305
|
+
|
|
306
|
+
# Write DataFrame to Parquet file
|
|
307
|
+
if not combined_dataframe.empty:
|
|
308
|
+
self.total_record_count += len(combined_dataframe)
|
|
309
|
+
output_file_name = (
|
|
310
|
+
f"{self.output_path}/{self.path_gen(self.chunk_count, chunk_part)}"
|
|
311
|
+
)
|
|
312
|
+
combined_dataframe.to_parquet(
|
|
313
|
+
output_file_name, index=False, compression="snappy"
|
|
314
|
+
)
|
|
315
|
+
|
|
316
|
+
# Record chunk metrics
|
|
317
|
+
self.metrics.record_metric(
|
|
318
|
+
name="parquet_chunks_written",
|
|
319
|
+
value=1,
|
|
320
|
+
metric_type=MetricType.COUNTER,
|
|
321
|
+
labels={"type": "pandas"},
|
|
322
|
+
description="Number of chunks written to Parquet files",
|
|
323
|
+
)
|
|
324
|
+
|
|
325
|
+
# Push the file to the object store
|
|
326
|
+
await ObjectStore.upload_file(
|
|
327
|
+
source=output_file_name,
|
|
328
|
+
destination=get_object_store_prefix(output_file_name),
|
|
329
|
+
)
|
|
330
|
+
|
|
331
|
+
self.buffer.clear()
|
|
332
|
+
self.current_buffer_size = 0
|
|
333
|
+
self.current_buffer_size_bytes = 0
|
|
334
|
+
|
|
335
|
+
except Exception as e:
|
|
336
|
+
# Record metrics for failed write
|
|
337
|
+
self.metrics.record_metric(
|
|
338
|
+
name="parquet_write_errors",
|
|
339
|
+
value=1,
|
|
340
|
+
metric_type=MetricType.COUNTER,
|
|
341
|
+
labels={"type": "pandas", "error": str(e)},
|
|
342
|
+
description="Number of errors while writing to Parquet files",
|
|
343
|
+
)
|
|
344
|
+
logger.error(f"Error flushing buffer to parquet: {str(e)}")
|
|
345
|
+
raise e
|
|
@@ -107,7 +107,11 @@ class BaseSQLMetadataExtractionWorkflow(MetadataExtractionWorkflow):
|
|
|
107
107
|
activity_statistics = ActivityStatistics.model_validate(raw_statistics)
|
|
108
108
|
transform_activities: List[Any] = []
|
|
109
109
|
|
|
110
|
-
if
|
|
110
|
+
if (
|
|
111
|
+
activity_statistics is None
|
|
112
|
+
or activity_statistics.chunk_count == 0
|
|
113
|
+
or not activity_statistics.partitions
|
|
114
|
+
):
|
|
111
115
|
# to handle the case where the fetch_fn returns None or no chunks
|
|
112
116
|
return
|
|
113
117
|
|
|
@@ -115,7 +119,9 @@ class BaseSQLMetadataExtractionWorkflow(MetadataExtractionWorkflow):
|
|
|
115
119
|
raise ValueError("Invalid typename")
|
|
116
120
|
|
|
117
121
|
batches, chunk_starts = self.get_transform_batches(
|
|
118
|
-
activity_statistics.chunk_count,
|
|
122
|
+
activity_statistics.chunk_count,
|
|
123
|
+
activity_statistics.typename,
|
|
124
|
+
activity_statistics.partitions,
|
|
119
125
|
)
|
|
120
126
|
|
|
121
127
|
for i in range(len(batches)):
|
|
@@ -144,7 +150,9 @@ class BaseSQLMetadataExtractionWorkflow(MetadataExtractionWorkflow):
|
|
|
144
150
|
total_record_count += metadata_model.total_record_count
|
|
145
151
|
chunk_count += metadata_model.chunk_count
|
|
146
152
|
|
|
147
|
-
def get_transform_batches(
|
|
153
|
+
def get_transform_batches(
|
|
154
|
+
self, chunk_count: int, typename: str, partitions: List[int]
|
|
155
|
+
):
|
|
148
156
|
"""Get batches for parallel transformation processing.
|
|
149
157
|
|
|
150
158
|
Args:
|
|
@@ -159,12 +167,17 @@ class BaseSQLMetadataExtractionWorkflow(MetadataExtractionWorkflow):
|
|
|
159
167
|
batches: List[List[str]] = []
|
|
160
168
|
chunk_start_numbers: List[int] = []
|
|
161
169
|
|
|
162
|
-
for i in
|
|
170
|
+
for i, partition in enumerate(partitions):
|
|
163
171
|
# Track starting chunk number (which is just i)
|
|
164
172
|
chunk_start_numbers.append(i)
|
|
165
173
|
|
|
166
174
|
# Each batch contains exactly one chunk
|
|
167
|
-
batches.append(
|
|
175
|
+
batches.append(
|
|
176
|
+
[
|
|
177
|
+
f"{typename}/chunk-{i}-part{file+1}.parquet"
|
|
178
|
+
for file in range(partition)
|
|
179
|
+
]
|
|
180
|
+
)
|
|
168
181
|
|
|
169
182
|
return batches, chunk_start_numbers
|
|
170
183
|
|
|
@@ -620,7 +620,10 @@ async def test_get_batched_daft_dataframe_with_file_names(monkeypatch) -> None:
|
|
|
620
620
|
"glob.glob", return_value=[]
|
|
621
621
|
), patch("application_sdk.services.objectstore.ObjectStore.download_file"):
|
|
622
622
|
path = "/data"
|
|
623
|
-
file_names = [
|
|
623
|
+
file_names = [
|
|
624
|
+
"one.parquet",
|
|
625
|
+
"two.parquet",
|
|
626
|
+
] # Note: .json extension gets replaced
|
|
624
627
|
input_prefix = "remote"
|
|
625
628
|
|
|
626
629
|
parquet_input = ParquetInput(
|
|
@@ -107,11 +107,12 @@ class TestOutput:
|
|
|
107
107
|
"""Test write_statistics successful case."""
|
|
108
108
|
self.output.total_record_count = 100
|
|
109
109
|
self.output.chunk_count = 5
|
|
110
|
+
self.output.statistics = [1, 2, 1, 2, 1]
|
|
110
111
|
|
|
111
112
|
# Mock the open function, orjson.dumps, and object store upload
|
|
112
113
|
with patch("builtins.open", mock_open()) as mock_file, patch(
|
|
113
114
|
"orjson.dumps",
|
|
114
|
-
return_value=b'{"total_record_count": 100, "chunk_count": 5}',
|
|
115
|
+
return_value=b'{"total_record_count": 100, "chunk_count": 5, "partitions": [1,2,1,2,1]}',
|
|
115
116
|
) as mock_orjson, patch(
|
|
116
117
|
"application_sdk.outputs.get_object_store_prefix",
|
|
117
118
|
return_value="path/statistics.json.ignore",
|
|
@@ -123,10 +124,18 @@ class TestOutput:
|
|
|
123
124
|
stats = await self.output.write_statistics()
|
|
124
125
|
|
|
125
126
|
# Assertions
|
|
126
|
-
assert stats == {
|
|
127
|
+
assert stats == {
|
|
128
|
+
"total_record_count": 100,
|
|
129
|
+
"chunk_count": 5,
|
|
130
|
+
"partitions": [1, 2, 1, 2, 1],
|
|
131
|
+
}
|
|
127
132
|
mock_file.assert_called_once_with("/test/path/statistics.json.ignore", "w")
|
|
128
133
|
mock_orjson.assert_called_once_with(
|
|
129
|
-
{
|
|
134
|
+
{
|
|
135
|
+
"total_record_count": 100,
|
|
136
|
+
"chunk_count": 5,
|
|
137
|
+
"partitions": [1, 2, 1, 2, 1],
|
|
138
|
+
}
|
|
130
139
|
)
|
|
131
140
|
# Verify the upload call
|
|
132
141
|
mock_push.assert_awaited_once()
|