atlan-application-sdk 1.0.2__tar.gz → 1.0.4__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-1.0.4/.github/release_notes.md +7 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/CHANGELOG.md +19 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/PKG-INFO +1 -1
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/activities/__init__.py +4 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/services/objectstore.py +39 -4
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/version.py +1 -1
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/pyproject.toml +1 -1
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/activities/test_activities.py +65 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/services/test_objectstore.py +255 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/uv.lock +1 -1
- atlan_application_sdk-1.0.2/.github/release_notes.md +0 -7
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.cursor/rules/documentation.mdc +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.cursor/rules/exception-handling.mdc +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.cursor/rules/guidelines.mdc +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.cursor/rules/logging.mdc +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.cursor/rules/performance.mdc +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.cursor/rules/setup.mdc +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.cursor/rules/standards.mdc +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.cursor/rules/testing.mdc +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.env.example +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/CODEOWNERS +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/ISSUE_TEMPLATE/config.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/actions/docgen/action.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/actions/doclint/action.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/actions/docstring-coverage/action.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/actions/e2e-apps/action.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/actions/e2e-examples/action.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/actions/setup-deps/action.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/actions/sync-branches/action.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/actions/trivy/action.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/actions/trivy-container/action.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/actions/unit-tests/action.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/dependabot.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/pull_request_template.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/scripts/extract_release_notes.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/scripts/release.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/scripts/trivy-to-markdown.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/scripts/update_changelog.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/AMPM.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Accessibility.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Acronyms.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Adverbs.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Auto.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Avoid.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Contractions.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Dashes.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/DateFormat.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/DateNumbers.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/DateOrder.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Ellipses.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/FirstPerson.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Foreign.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Gender.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/GenderBias.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/GeneralURL.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/HeadingAcronyms.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/HeadingColons.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/HeadingPunctuation.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Headings.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Hyphens.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Negative.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Ordinal.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/OxfordComma.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Passive.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Percentages.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Plurals.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Quotes.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/RangeTime.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Semicolon.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/SentenceLength.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Spacing.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Suspended.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Terms.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/URLFormat.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Units.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Vocab.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/We.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Wordiness.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/meta.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/config/vocabularies/deviations/accept.txt +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/config/vocabularies/deviations/reject.txt +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflow-templates/checks.properties.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflow-templates/checks.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflow-templates/codeql.properties.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflow-templates/codeql.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflow-templates/dependency-review.properties.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflow-templates/dependency-review.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflow-templates/stale.properties.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflow-templates/stale.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflow-templates/trivy-container.properties.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflow-templates/trivy-container.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflow-templates/trivy.properties.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflow-templates/trivy.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflows/codeql.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflows/pull_request.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflows/push.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflows/release.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflows/scale-tests.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflows/schedule.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflows/tag-and-publish.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflows/trivy-container.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/workflows/verify-snyk-status.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.gitignore +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.pre-commit-config.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.vscode/launch.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/CODE_OF_CONDUCT.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/CONTRIBUTING.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/LICENSE +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/NOTICE +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/README.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/SECURITY.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/activities/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/activities/common/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/activities/common/models.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/activities/common/utils.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/activities/lock_management.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/activities/metadata_extraction/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/activities/metadata_extraction/base.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/activities/metadata_extraction/rest.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/activities/metadata_extraction/sql.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/activities/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/activities/query_extraction/sql.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/application/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/application/metadata_extraction/sql.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/clients/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/clients/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/clients/atlan.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/clients/atlan_auth.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/clients/base.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/clients/models.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/clients/redis.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/clients/sql.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/clients/temporal.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/clients/utils.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/clients/workflow.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/common/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/common/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/common/aws_utils.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/common/dapr_utils.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/common/dataframe_utils.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/common/error_codes.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/common/file_converter.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/common/utils.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/constants.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/decorators/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/decorators/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/decorators/locks.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/decorators/mcp_tool.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/docgen/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/docgen/exporters/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/docgen/exporters/mkdocs.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/docgen/models/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/docgen/models/export/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/docgen/models/export/page.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/docgen/models/manifest/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/docgen/models/manifest/customer.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/docgen/models/manifest/internal.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/docgen/models/manifest/metadata.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/docgen/models/manifest/page.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/docgen/models/manifest/section.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/docgen/parsers/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/docgen/parsers/directory.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/docgen/parsers/manifest.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/events/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/events/models.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/handlers/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/handlers/base.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/handlers/sql.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/inputs/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/inputs/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/inputs/iceberg.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/inputs/json.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/inputs/parquet.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/inputs/sql_query.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/interceptors/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/interceptors/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/interceptors/cleanup.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/interceptors/events.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/interceptors/lock.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/observability/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/observability/decorators/observability_decorator.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/observability/logger_adaptor.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/observability/metrics_adaptor.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/observability/observability.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/observability/traces_adaptor.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/observability/utils.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/outputs/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/outputs/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/outputs/iceberg.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/outputs/json.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/outputs/parquet.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/server/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/server/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/server/fastapi/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/server/fastapi/middleware/logmiddleware.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/server/fastapi/middleware/metrics.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/server/fastapi/models.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/server/fastapi/routers/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/server/fastapi/routers/server.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/server/fastapi/utils.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/server/mcp/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/server/mcp/models.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/server/mcp/server.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/services/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/services/atlan_storage.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/services/eventstore.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/services/secretstore.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/services/statestore.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/e2e/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/e2e/base.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/e2e/client.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/e2e/conftest.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/e2e/utils.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/clients/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/clients/sql.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/common/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/common/logger.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/handlers/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/sql_metadata.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/sql_preflight.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/inputs/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/inputs/json_input.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/inputs/parquet_input.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/outputs/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/outputs/json_output.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/outputs/statestore.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/server/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/server/fastapi/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/sql_client.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/hypothesis/strategies/temporal.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/scale_data_generator/README.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/scale_data_generator/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/scale_data_generator/config_loader.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/scale_data_generator/data_generator.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/scale_data_generator/driver.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/scale_data_generator/examples/config.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/scale_data_generator/output_handler/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/scale_data_generator/output_handler/base.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/scale_data_generator/output_handler/csv_handler.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/scale_data_generator/output_handler/json_handler.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/scale_data_generator/output_handler/parquet_handler.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/test_utils/workflow_monitoring.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/transformers/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/transformers/atlas/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/transformers/atlas/sql.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/transformers/common/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/transformers/common/utils.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/transformers/query/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/transformers/query/templates/column.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/transformers/query/templates/database.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/transformers/query/templates/extras-procedure.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/transformers/query/templates/function.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/transformers/query/templates/schema.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/transformers/query/templates/table.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/transformers/query/templates/tag_attachment.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/worker.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/workflows/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/workflows/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/workflows/metadata_extraction/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/workflows/metadata_extraction/sql.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/workflows/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/workflows/query_extraction/sql.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/components/README.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/components/atlan-storage.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/components/aws-secrets.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/components/configuration.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/components/deployment-secrets.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/components/eventstore.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/components/objectstore.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/components/secretstore.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/components/statestore.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/concepts/API.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/concepts/activities.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/concepts/application.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/concepts/application_sql.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/concepts/atlanupload.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/concepts/clients.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/concepts/common.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/concepts/handlers.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/concepts/inputs.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/concepts/mcp.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/concepts/output_paths.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/concepts/outputs.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/concepts/server.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/concepts/services.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/concepts/temporal_auth.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/concepts/worker.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/concepts/workflows.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/configuration.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/guides/architecture.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/guides/atlantis.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/guides/best-practices.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/guides/getting-started.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/guides/index.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/guides/partners.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/guides/secretstores.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/guides/sql-application-guide.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/guides/test-framework.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/index.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/setup/LINUX.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/setup/MAC.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/setup/WINDOWS.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/setup/troubleshooting.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/static/assets/logo.svg +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/static/images/phoenix-sdk-featureset.png +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/static/javascripts/mathjax.js +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/docs/static/stylesheets/extra.css +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/docs/mkdocs.yml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/examples/README.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/examples/application_custom_fastapi.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/examples/application_fastapi.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/examples/application_hello_world.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/examples/application_sql.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/examples/application_sql_miner.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/examples/application_sql_with_custom_pyatlan_transformer.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/examples/application_sql_with_custom_transformer.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/examples/run_examples.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/examples/sql_query_templates/database.yaml +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/conftest.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/activities/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/activities/common/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/activities/common/test_utils.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/activities/metadata_extraction/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/activities/metadata_extraction/test_sql.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/activities/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/activities/test_lock_management.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/application/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/application/metadata_extraction/test_sql.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/application/test_application.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/clients/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/clients/test_async_sql_client.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/clients/test_atlan_auth.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/clients/test_atlan_client.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/clients/test_atlanauth.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/clients/test_base_client.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/clients/test_redis_client.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/clients/test_sql_client.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/clients/test_temporal_client.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/common/test_aws_utils.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/common/test_credential_utils.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/common/test_file_converter.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/common/test_utils.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/common/test_utils_file_discovery.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/decorators/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/decorators/test_mcp_tool.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/docgen/parsers/test_directory_parser.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/docgen/parsers/test_manifest_parser.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/handlers/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/handlers/sql/test_auth.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/handlers/sql/test_check_schemas_and_databases.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/handlers/sql/test_extract_allowed_schemas.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/handlers/sql/test_metadata.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/handlers/sql/test_preflight_check.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/handlers/sql/test_prepare_metadata.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/handlers/sql/test_tables_check.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/handlers/sql/test_validate_filters.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/handlers/test_base_handler.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/inputs/test_base_input.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/inputs/test_json.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/inputs/test_parquet.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/observability/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/observability/test_logger_adaptor.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/observability/test_metrics_adaptor.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/observability/test_traces_adaptor.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/outputs/test_iceberg.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/outputs/test_json_output.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/outputs/test_output.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/outputs/test_parquet_output.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/server/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/server/fastapi/routers/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/server/fastapi/routers/server.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/server/fastapi/test_fastapi.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/server/mcp/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/server/mcp/test_mcp_server.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/services/test_atlan_storage.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/services/test_eventstore.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/services/test_statestore.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/test_worker.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/resources/raw_columns.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/resources/raw_databases.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/resources/raw_functions.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/resources/raw_procedures.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/resources/raw_schemas.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/resources/raw_tables.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/resources/transformed_columns.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/resources/transformed_databases.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/resources/transformed_functions.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/resources/transformed_procedures.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/resources/transformed_schemas.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/resources/transformed_tables.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/test_column.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/test_database.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/test_function.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/test_procedure.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/test_schema.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/atlas/test_table.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/query/resources/raw/column.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/query/resources/raw/database.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/query/resources/raw/extras-procedure.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/query/resources/raw/function.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/query/resources/raw/schema.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/query/resources/raw/table.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/query/resources/transformed/column.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/query/resources/transformed/database.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/query/resources/transformed/extras-procedure.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/query/resources/transformed/function.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/query/resources/transformed/schema.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/query/resources/transformed/table.json +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/query/test_sql_transformer.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/transformers/query/test_sql_transformer_output_validation.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/workflows/metadata_extraction/test_sql_workflow.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/workflows/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/workflows/query_extraction/test_sql.py +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
## v1.0.4 (December 11, 2025)
|
|
2
|
+
|
|
3
|
+
Full Changelog: https://github.com/atlanhq/application-sdk/compare/v1.0.3...v1.0.4
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
- add automatic gRPC message size limit handling for large file uploads (#878) (by @SanilK2108 in [4d76838](https://github.com/atlanhq/application-sdk/commit/4d76838))
|
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v1.0.4 (December 11, 2025)
|
|
4
|
+
|
|
5
|
+
Full Changelog: https://github.com/atlanhq/application-sdk/compare/v1.0.3...v1.0.4
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
- add automatic gRPC message size limit handling for large file uploads (#878) (by @SanilK2108 in [4d76838](https://github.com/atlanhq/application-sdk/commit/4d76838))
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## v1.0.3 (December 09, 2025)
|
|
13
|
+
|
|
14
|
+
Full Changelog: https://github.com/atlanhq/application-sdk/compare/v1.0.2...v1.0.3
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
- handle Azure Blob and GCP response formats in list_files method in objectstore service (#875) (by @hamza-atlan in [19d26a3](https://github.com/atlanhq/application-sdk/commit/19d26a3))
|
|
19
|
+
- error handling on connection failures (#877) (by @sachi-atlan in [8108186](https://github.com/atlanhq/application-sdk/commit/8108186))
|
|
20
|
+
|
|
21
|
+
|
|
3
22
|
## v1.0.2 (December 09, 2025)
|
|
4
23
|
|
|
5
24
|
Full Changelog: https://github.com/atlanhq/application-sdk/compare/v1.0.1...v1.0.2
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atlan-application-sdk
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.4
|
|
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
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/activities/__init__.py
RENAMED
|
@@ -151,6 +151,10 @@ class ActivitiesInterface(ABC, Generic[ActivitiesStateType]):
|
|
|
151
151
|
)
|
|
152
152
|
await self._clean_state()
|
|
153
153
|
raise
|
|
154
|
+
except Exception as err:
|
|
155
|
+
logger.error(f"Error getting state: {str(err)}", exc_info=err)
|
|
156
|
+
await self._clean_state()
|
|
157
|
+
raise
|
|
154
158
|
|
|
155
159
|
async def _clean_state(self):
|
|
156
160
|
"""Remove the state data for the current workflow.
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/application_sdk/services/objectstore.py
RENAMED
|
@@ -85,7 +85,15 @@ class ObjectStore:
|
|
|
85
85
|
|
|
86
86
|
# Extract paths based on response type
|
|
87
87
|
if isinstance(file_list, list):
|
|
88
|
-
|
|
88
|
+
# Handle list format: strings OR Azure Blob/GCP dicts with "Name" field
|
|
89
|
+
paths = []
|
|
90
|
+
for item in file_list:
|
|
91
|
+
if isinstance(item, str):
|
|
92
|
+
paths.append(item)
|
|
93
|
+
elif isinstance(item, dict) and isinstance(item.get("Name"), str):
|
|
94
|
+
paths.append(item["Name"])
|
|
95
|
+
else:
|
|
96
|
+
logger.warning(f"Skipping invalid path entry: {item}")
|
|
89
97
|
elif isinstance(file_list, dict) and "Contents" in file_list:
|
|
90
98
|
paths = [item["Key"] for item in file_list["Contents"] if "Key" in item]
|
|
91
99
|
elif isinstance(file_list, dict):
|
|
@@ -98,6 +106,7 @@ class ObjectStore:
|
|
|
98
106
|
if not isinstance(path, str):
|
|
99
107
|
logger.warning(f"Skipping non-string path: {path}")
|
|
100
108
|
continue
|
|
109
|
+
|
|
101
110
|
valid_list.append(
|
|
102
111
|
path[path.find(prefix) :]
|
|
103
112
|
if prefix and prefix in path
|
|
@@ -460,9 +469,35 @@ class ObjectStore:
|
|
|
460
469
|
Exception: If there's an error with the Dapr binding operation.
|
|
461
470
|
"""
|
|
462
471
|
try:
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
472
|
+
# Calculate data size (handle both bytes and str)
|
|
473
|
+
if isinstance(data, bytes):
|
|
474
|
+
data_size = len(data)
|
|
475
|
+
elif isinstance(data, str):
|
|
476
|
+
data_size = len(data.encode("utf-8"))
|
|
477
|
+
else:
|
|
478
|
+
data_size = 0
|
|
479
|
+
|
|
480
|
+
# Check if data size exceeds DAPR limit and log warning
|
|
481
|
+
if data_size > DAPR_MAX_GRPC_MESSAGE_LENGTH:
|
|
482
|
+
# gRPC adds overhead (headers, metadata, etc.) to messages
|
|
483
|
+
# Add a buffer of 5% or at least 1KB to account for this overhead
|
|
484
|
+
grpc_overhead_buffer = max(int(data_size * 0.05), 1024)
|
|
485
|
+
required_max_length = data_size + grpc_overhead_buffer
|
|
486
|
+
logger.warning(
|
|
487
|
+
f"Data size ({data_size:,} bytes / {data_size / (1024 * 1024):.2f}MB) "
|
|
488
|
+
f"exceeds DAPR_MAX_GRPC_MESSAGE_LENGTH ({DAPR_MAX_GRPC_MESSAGE_LENGTH:,} bytes / "
|
|
489
|
+
f"{DAPR_MAX_GRPC_MESSAGE_LENGTH / (1024 * 1024):.2f}MB). "
|
|
490
|
+
f"Increasing max_grpc_message_length to {required_max_length:,} bytes "
|
|
491
|
+
f"(data size + {grpc_overhead_buffer:,} bytes overhead buffer). "
|
|
492
|
+
f"This may cause issues with Dapr gRPC communication."
|
|
493
|
+
)
|
|
494
|
+
# Set max_grpc_message_length to accommodate the data size plus gRPC overhead
|
|
495
|
+
max_message_length = required_max_length
|
|
496
|
+
else:
|
|
497
|
+
# Data is within limit, use default DAPR limit
|
|
498
|
+
max_message_length = DAPR_MAX_GRPC_MESSAGE_LENGTH
|
|
499
|
+
|
|
500
|
+
with DaprClient(max_grpc_message_length=max_message_length) as client:
|
|
466
501
|
response = client.invoke_binding(
|
|
467
502
|
binding_name=store_name,
|
|
468
503
|
operation=operation,
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/activities/test_activities.py
RENAMED
|
@@ -299,3 +299,68 @@ class TestMockActivities:
|
|
|
299
299
|
state = await mock_activities._get_state(workflow_args)
|
|
300
300
|
assert state.handler is not None
|
|
301
301
|
assert isinstance(state.handler, MockHandler)
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
class MockActivitiesImplementation(ActivitiesInterface):
|
|
305
|
+
"""Minimal concrete implementation for testing base methods."""
|
|
306
|
+
|
|
307
|
+
pass
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
class TestActivitiesInterfaceErrorHandling:
|
|
311
|
+
"""Test error handling in ActivitiesInterface."""
|
|
312
|
+
|
|
313
|
+
@pytest.fixture
|
|
314
|
+
def activities(self):
|
|
315
|
+
return MockActivitiesImplementation()
|
|
316
|
+
|
|
317
|
+
@patch("application_sdk.activities.get_workflow_id")
|
|
318
|
+
async def test_get_state_cleans_up_on_general_exception(
|
|
319
|
+
self, mock_get_workflow_id, activities
|
|
320
|
+
):
|
|
321
|
+
"""Test that _get_state cleans up state if _set_state raises a general Exception."""
|
|
322
|
+
workflow_id = "wf-1"
|
|
323
|
+
mock_get_workflow_id.return_value = workflow_id
|
|
324
|
+
|
|
325
|
+
# Simulate the state being "dirty" (entry created) before _set_state fails.
|
|
326
|
+
async def set_state_side_effect(workflow_args):
|
|
327
|
+
activities._state[workflow_id] = ActivitiesState()
|
|
328
|
+
raise Exception("DB Connection Failed")
|
|
329
|
+
|
|
330
|
+
with patch.object(
|
|
331
|
+
activities, "_set_state", side_effect=set_state_side_effect
|
|
332
|
+
) as mock_set_state:
|
|
333
|
+
# Ensure state is empty initially
|
|
334
|
+
assert workflow_id not in activities._state
|
|
335
|
+
|
|
336
|
+
# Call _get_state, expect exception re-raised
|
|
337
|
+
with pytest.raises(Exception, match="DB Connection Failed"):
|
|
338
|
+
await activities._get_state({})
|
|
339
|
+
|
|
340
|
+
# Verify state was cleaned up (entry removed)
|
|
341
|
+
assert workflow_id not in activities._state
|
|
342
|
+
mock_set_state.assert_called_once()
|
|
343
|
+
|
|
344
|
+
@patch("application_sdk.activities.get_workflow_id")
|
|
345
|
+
async def test_get_state_cleans_up_on_orchestrator_error(
|
|
346
|
+
self, mock_get_workflow_id, activities
|
|
347
|
+
):
|
|
348
|
+
"""Test that _get_state cleans up state if _set_state raises OrchestratorError."""
|
|
349
|
+
workflow_id = "wf-2"
|
|
350
|
+
mock_get_workflow_id.return_value = workflow_id
|
|
351
|
+
|
|
352
|
+
from application_sdk.common.error_codes import OrchestratorError
|
|
353
|
+
|
|
354
|
+
async def set_state_side_effect(workflow_args):
|
|
355
|
+
activities._state[workflow_id] = ActivitiesState()
|
|
356
|
+
raise OrchestratorError(
|
|
357
|
+
OrchestratorError.ORCHESTRATOR_CLIENT_ACTIVITY_ERROR.code,
|
|
358
|
+
"Orchestrator Fail",
|
|
359
|
+
)
|
|
360
|
+
|
|
361
|
+
with patch.object(activities, "_set_state", side_effect=set_state_side_effect):
|
|
362
|
+
with pytest.raises(Exception) as excinfo:
|
|
363
|
+
await activities._get_state({})
|
|
364
|
+
|
|
365
|
+
assert isinstance(excinfo.value, OrchestratorError)
|
|
366
|
+
assert workflow_id not in activities._state
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/tests/unit/services/test_objectstore.py
RENAMED
|
@@ -4,6 +4,7 @@ from unittest.mock import AsyncMock, MagicMock, mock_open, patch
|
|
|
4
4
|
|
|
5
5
|
import pytest
|
|
6
6
|
|
|
7
|
+
from application_sdk.constants import DAPR_MAX_GRPC_MESSAGE_LENGTH
|
|
7
8
|
from application_sdk.services.objectstore import ObjectStore
|
|
8
9
|
|
|
9
10
|
|
|
@@ -301,6 +302,123 @@ class TestObjectStore:
|
|
|
301
302
|
|
|
302
303
|
assert result is None
|
|
303
304
|
|
|
305
|
+
@patch("application_sdk.services.objectstore.DaprClient")
|
|
306
|
+
@patch("application_sdk.services.objectstore.logger")
|
|
307
|
+
async def test_invoke_dapr_binding_with_large_data_warning(
|
|
308
|
+
self, mock_logger: MagicMock, mock_dapr_client: MagicMock
|
|
309
|
+
) -> None:
|
|
310
|
+
"""Test that a warning is logged when data size exceeds DAPR_MAX_GRPC_MESSAGE_LENGTH."""
|
|
311
|
+
|
|
312
|
+
mock_client = MagicMock()
|
|
313
|
+
mock_response = MagicMock()
|
|
314
|
+
mock_response.data = b"response data"
|
|
315
|
+
mock_client.invoke_binding.return_value = mock_response
|
|
316
|
+
mock_dapr_client.return_value.__enter__.return_value = mock_client
|
|
317
|
+
|
|
318
|
+
# Create data that exceeds the DAPR limit
|
|
319
|
+
large_data = b"x" * (DAPR_MAX_GRPC_MESSAGE_LENGTH + 1)
|
|
320
|
+
|
|
321
|
+
result = await ObjectStore._invoke_dapr_binding(
|
|
322
|
+
operation="create",
|
|
323
|
+
metadata={"key": "test"},
|
|
324
|
+
data=large_data,
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
# Verify warning was logged
|
|
328
|
+
mock_logger.warning.assert_called_once()
|
|
329
|
+
warning_call = mock_logger.warning.call_args[0][0]
|
|
330
|
+
assert "exceeds DAPR_MAX_GRPC_MESSAGE_LENGTH" in warning_call
|
|
331
|
+
assert f"{DAPR_MAX_GRPC_MESSAGE_LENGTH + 1:,}" in warning_call
|
|
332
|
+
|
|
333
|
+
# Verify DaprClient was called with increased max_grpc_message_length
|
|
334
|
+
# With 5% buffer: (DAPR_MAX_GRPC_MESSAGE_LENGTH + 1) + 5% of (DAPR_MAX_GRPC_MESSAGE_LENGTH + 1)
|
|
335
|
+
mock_dapr_client.assert_called_once()
|
|
336
|
+
call_kwargs = mock_dapr_client.call_args[1]
|
|
337
|
+
expected_data_size = DAPR_MAX_GRPC_MESSAGE_LENGTH + 1
|
|
338
|
+
expected_buffer = max(
|
|
339
|
+
int(expected_data_size * 0.05), 1024
|
|
340
|
+
) # 5% buffer, min 1KB
|
|
341
|
+
expected_max_length = expected_data_size + expected_buffer
|
|
342
|
+
assert call_kwargs["max_grpc_message_length"] == expected_max_length
|
|
343
|
+
|
|
344
|
+
# Verify the binding was invoked
|
|
345
|
+
mock_client.invoke_binding.assert_called_once()
|
|
346
|
+
assert result == b"response data"
|
|
347
|
+
|
|
348
|
+
@patch("application_sdk.services.objectstore.DaprClient")
|
|
349
|
+
@patch("application_sdk.services.objectstore.logger")
|
|
350
|
+
async def test_invoke_dapr_binding_with_small_data_no_warning(
|
|
351
|
+
self, mock_logger: MagicMock, mock_dapr_client: MagicMock
|
|
352
|
+
) -> None:
|
|
353
|
+
"""Test that no warning is logged when data size is within DAPR_MAX_GRPC_MESSAGE_LENGTH."""
|
|
354
|
+
from application_sdk.constants import DAPR_MAX_GRPC_MESSAGE_LENGTH
|
|
355
|
+
|
|
356
|
+
mock_client = MagicMock()
|
|
357
|
+
mock_response = MagicMock()
|
|
358
|
+
mock_response.data = b"response data"
|
|
359
|
+
mock_client.invoke_binding.return_value = mock_response
|
|
360
|
+
mock_dapr_client.return_value.__enter__.return_value = mock_client
|
|
361
|
+
|
|
362
|
+
# Create data that is within the DAPR limit
|
|
363
|
+
small_data = b"x" * (DAPR_MAX_GRPC_MESSAGE_LENGTH - 1000)
|
|
364
|
+
|
|
365
|
+
result = await ObjectStore._invoke_dapr_binding(
|
|
366
|
+
operation="create",
|
|
367
|
+
metadata={"key": "test"},
|
|
368
|
+
data=small_data,
|
|
369
|
+
)
|
|
370
|
+
|
|
371
|
+
# Verify no warning was logged
|
|
372
|
+
mock_logger.warning.assert_not_called()
|
|
373
|
+
|
|
374
|
+
# Verify DaprClient was called with default max_grpc_message_length
|
|
375
|
+
mock_dapr_client.assert_called_once()
|
|
376
|
+
call_kwargs = mock_dapr_client.call_args[1]
|
|
377
|
+
assert call_kwargs["max_grpc_message_length"] == DAPR_MAX_GRPC_MESSAGE_LENGTH
|
|
378
|
+
|
|
379
|
+
# Verify the binding was invoked
|
|
380
|
+
mock_client.invoke_binding.assert_called_once()
|
|
381
|
+
assert result == b"response data"
|
|
382
|
+
|
|
383
|
+
@patch("application_sdk.services.objectstore.DaprClient")
|
|
384
|
+
@patch("application_sdk.services.objectstore.logger")
|
|
385
|
+
async def test_invoke_dapr_binding_with_string_data(
|
|
386
|
+
self, mock_logger: MagicMock, mock_dapr_client: MagicMock
|
|
387
|
+
) -> None:
|
|
388
|
+
"""Test that string data is properly handled and size is calculated correctly."""
|
|
389
|
+
from application_sdk.constants import DAPR_MAX_GRPC_MESSAGE_LENGTH
|
|
390
|
+
|
|
391
|
+
mock_client = MagicMock()
|
|
392
|
+
mock_response = MagicMock()
|
|
393
|
+
mock_response.data = b"response data"
|
|
394
|
+
mock_client.invoke_binding.return_value = mock_response
|
|
395
|
+
mock_dapr_client.return_value.__enter__.return_value = mock_client
|
|
396
|
+
|
|
397
|
+
# Create a string that when encoded exceeds the DAPR limit
|
|
398
|
+
# Each character in UTF-8 is typically 1 byte, but we'll use a large string
|
|
399
|
+
large_string = "x" * (DAPR_MAX_GRPC_MESSAGE_LENGTH + 1)
|
|
400
|
+
|
|
401
|
+
result = await ObjectStore._invoke_dapr_binding(
|
|
402
|
+
operation="create",
|
|
403
|
+
metadata={"key": "test"},
|
|
404
|
+
data=large_string,
|
|
405
|
+
)
|
|
406
|
+
|
|
407
|
+
# Verify warning was logged
|
|
408
|
+
mock_logger.warning.assert_called_once()
|
|
409
|
+
|
|
410
|
+
# Verify DaprClient was called with increased max_grpc_message_length
|
|
411
|
+
mock_dapr_client.assert_called_once()
|
|
412
|
+
call_kwargs = mock_dapr_client.call_args[1]
|
|
413
|
+
# The encoded string size should be accounted for
|
|
414
|
+
assert (
|
|
415
|
+
call_kwargs["max_grpc_message_length"] >= DAPR_MAX_GRPC_MESSAGE_LENGTH + 1
|
|
416
|
+
)
|
|
417
|
+
|
|
418
|
+
# Verify the binding was invoked
|
|
419
|
+
mock_client.invoke_binding.assert_called_once()
|
|
420
|
+
assert result == b"response data"
|
|
421
|
+
|
|
304
422
|
# @patch("application_sdk.services.objectstore.ObjectStore.list_files", new_callable=AsyncMock)
|
|
305
423
|
# @patch("application_sdk.services.objectstore.ObjectStore._download_file", new_callable=AsyncMock)
|
|
306
424
|
# async def test_download_directory_success(
|
|
@@ -312,3 +430,140 @@ class TestObjectStore:
|
|
|
312
430
|
# destination="/tmp",
|
|
313
431
|
# )
|
|
314
432
|
# assert mock_download_file.await_count == 2
|
|
433
|
+
|
|
434
|
+
@pytest.mark.parametrize(
|
|
435
|
+
"response_json, prefix, expected_paths",
|
|
436
|
+
[
|
|
437
|
+
# 1: Standard List of Strings
|
|
438
|
+
(["file1.txt", "sub/file2.txt"], "", ["file1.txt", "sub/file2.txt"]),
|
|
439
|
+
# 2: AWS S3 Format (Dict with Contents)
|
|
440
|
+
(
|
|
441
|
+
{"Contents": [{"Key": "s3-file.txt"}, {"Key": "folder/s3-file2.txt"}]},
|
|
442
|
+
"",
|
|
443
|
+
["s3-file.txt", "folder/s3-file2.txt"],
|
|
444
|
+
),
|
|
445
|
+
# 3: Azure/GCP Format (List of Dicts with "Name")
|
|
446
|
+
(
|
|
447
|
+
[
|
|
448
|
+
{"Name": "az-blob.txt", "etag": "123"},
|
|
449
|
+
{"Name": "folder/az-blob2.txt"},
|
|
450
|
+
{"Name": "folder/gcs.parquet"},
|
|
451
|
+
],
|
|
452
|
+
"",
|
|
453
|
+
["az-blob.txt", "folder/az-blob2.txt", "folder/gcs.parquet"],
|
|
454
|
+
),
|
|
455
|
+
# 4: Generic Wrapper "files"
|
|
456
|
+
({"files": ["generic1.txt"]}, "", ["generic1.txt"]),
|
|
457
|
+
# 5: Generic Wrapper "keys"
|
|
458
|
+
({"keys": ["key1.txt"]}, "", ["key1.txt"]),
|
|
459
|
+
# 6: Mixed Invalid Types (Integers, None, Boolean)
|
|
460
|
+
(
|
|
461
|
+
["valid.txt", 123, None, True, "valid2.txt"],
|
|
462
|
+
"",
|
|
463
|
+
["valid.txt", "valid2.txt"],
|
|
464
|
+
),
|
|
465
|
+
# 7: Malformed Dictionaries (Missing "Name")
|
|
466
|
+
(
|
|
467
|
+
[{"Name": "valid.txt"}, {"etag": "no-name"}, {"size": 500}],
|
|
468
|
+
"",
|
|
469
|
+
["valid.txt"],
|
|
470
|
+
),
|
|
471
|
+
# 8: Dict with non-string "Name" value (None, int, nested dict)
|
|
472
|
+
(
|
|
473
|
+
[
|
|
474
|
+
{"Name": "valid.txt"},
|
|
475
|
+
{"Name": None},
|
|
476
|
+
{"Name": 123},
|
|
477
|
+
{"Name": {"nested": "dict"}},
|
|
478
|
+
{},
|
|
479
|
+
],
|
|
480
|
+
"",
|
|
481
|
+
["valid.txt"],
|
|
482
|
+
),
|
|
483
|
+
# 9: S3 Items Missing "Key" (Filtered by list comprehension)
|
|
484
|
+
(
|
|
485
|
+
{"Contents": [{"Key": "good.txt"}, {"Size": 500}]},
|
|
486
|
+
"",
|
|
487
|
+
["good.txt"],
|
|
488
|
+
),
|
|
489
|
+
# 10: Unknown Structure (Empty Fallback)
|
|
490
|
+
({"random": "data"}, "", []),
|
|
491
|
+
# 11: Prefix Slicing (Prefix Exists in Path)
|
|
492
|
+
# Logic: Returns substring starting from prefix
|
|
493
|
+
(
|
|
494
|
+
["root/my-folder/image.png"],
|
|
495
|
+
"my-folder",
|
|
496
|
+
["my-folder/image.png"],
|
|
497
|
+
),
|
|
498
|
+
# 12: Prefix Fallback (Prefix NOT in Path)
|
|
499
|
+
# Logic: Returns os.path.basename if prefix is provided but not found
|
|
500
|
+
(
|
|
501
|
+
["other-location/image.png"],
|
|
502
|
+
"my-folder/",
|
|
503
|
+
["image.png"],
|
|
504
|
+
),
|
|
505
|
+
# 13: No Prefix Provided
|
|
506
|
+
# Logic: Returns full original path
|
|
507
|
+
(
|
|
508
|
+
["/full/path/to/file.txt"],
|
|
509
|
+
"",
|
|
510
|
+
["/full/path/to/file.txt"],
|
|
511
|
+
),
|
|
512
|
+
],
|
|
513
|
+
)
|
|
514
|
+
@patch("application_sdk.services.objectstore.ObjectStore._invoke_dapr_binding")
|
|
515
|
+
async def test_list_files_parsing_and_logic(
|
|
516
|
+
self,
|
|
517
|
+
mock_invoke: AsyncMock,
|
|
518
|
+
response_json,
|
|
519
|
+
prefix,
|
|
520
|
+
expected_paths,
|
|
521
|
+
) -> None:
|
|
522
|
+
"""
|
|
523
|
+
1. JSON Structure parsing (List vs Dict vs S3 vs Azure)
|
|
524
|
+
2. Item validation (Skipping invalid types)
|
|
525
|
+
3. Prefix path transformation logic
|
|
526
|
+
"""
|
|
527
|
+
# Arrange
|
|
528
|
+
import orjson
|
|
529
|
+
|
|
530
|
+
mock_invoke.return_value = orjson.dumps(response_json)
|
|
531
|
+
|
|
532
|
+
# Act
|
|
533
|
+
result = await ObjectStore.list_files(prefix=prefix)
|
|
534
|
+
|
|
535
|
+
# Assert
|
|
536
|
+
assert result == expected_paths
|
|
537
|
+
mock_invoke.assert_called_once()
|
|
538
|
+
|
|
539
|
+
@patch("application_sdk.services.objectstore.ObjectStore._invoke_dapr_binding")
|
|
540
|
+
async def test_list_files_empty_response(self, mock_invoke: AsyncMock) -> None:
|
|
541
|
+
"""14: Test handling of empty/None response from Dapr."""
|
|
542
|
+
# Arrange: simulate empty byte response
|
|
543
|
+
mock_invoke.return_value = b""
|
|
544
|
+
|
|
545
|
+
# Act
|
|
546
|
+
result = await ObjectStore.list_files(prefix="test")
|
|
547
|
+
|
|
548
|
+
# Assert
|
|
549
|
+
assert result == []
|
|
550
|
+
|
|
551
|
+
@patch("application_sdk.services.objectstore.ObjectStore._invoke_dapr_binding")
|
|
552
|
+
async def test_list_files_malformed_json(self, mock_invoke: AsyncMock) -> None:
|
|
553
|
+
"""15: Test handling of corrupt JSON response."""
|
|
554
|
+
# Arrange: simulate invalid JSON
|
|
555
|
+
mock_invoke.return_value = b"{invalid-json..."
|
|
556
|
+
|
|
557
|
+
# Act & Assert
|
|
558
|
+
with pytest.raises(Exception): # Expecting JSONDecodeError wrapped or raised
|
|
559
|
+
await ObjectStore.list_files(prefix="test")
|
|
560
|
+
|
|
561
|
+
@patch("application_sdk.services.objectstore.ObjectStore._invoke_dapr_binding")
|
|
562
|
+
async def test_list_files_binding_failure(self, mock_invoke: AsyncMock) -> None:
|
|
563
|
+
"""16: Test handling of Dapr binding exception."""
|
|
564
|
+
# Arrange
|
|
565
|
+
mock_invoke.side_effect = Exception("Network Error")
|
|
566
|
+
|
|
567
|
+
# Act & Assert
|
|
568
|
+
with pytest.raises(Exception, match="Network Error"):
|
|
569
|
+
await ObjectStore.list_files(prefix="test")
|
|
File without changes
|
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.cursor/rules/exception-handling.mdc
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/ISSUE_TEMPLATE/bug_report.yaml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/ISSUE_TEMPLATE/config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/actions/docgen/action.yaml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/actions/doclint/action.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/actions/e2e-apps/action.yaml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/actions/e2e-examples/action.yaml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/actions/setup-deps/action.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/actions/trivy/action.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/actions/unit-tests/action.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/pull_request_template.md
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/scripts/extract_release_notes.py
RENAMED
|
File without changes
|
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/scripts/trivy-to-markdown.py
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/scripts/update_changelog.py
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/AMPM.yml
RENAMED
|
File without changes
|
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Acronyms.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Adverbs.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Auto.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Avoid.yml
RENAMED
|
File without changes
|
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Dashes.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/DateFormat.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/DateNumbers.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/DateOrder.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Ellipses.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/FirstPerson.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Foreign.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Gender.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/GenderBias.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/GeneralURL.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Headings.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Hyphens.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Negative.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Ordinal.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/OxfordComma.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Passive.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Percentages.yml
RENAMED
|
File without changes
|
{atlan_application_sdk-1.0.2 → atlan_application_sdk-1.0.4}/.github/styles/Microsoft/Plurals.yml
RENAMED
|
File without changes
|