atlan-application-sdk 0.1.1rc53__tar.gz → 0.1.1rc54__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.1rc54/.github/release_notes.md +7 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/CHANGELOG.md +9 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/PKG-INFO +1 -1
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/activities/__init__.py +25 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/activities/common/models.py +7 -1
- atlan_application_sdk-0.1.1rc54/application_sdk/common/file_converter.py +99 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/version.py +1 -1
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/pyproject.toml +1 -1
- atlan_application_sdk-0.1.1rc54/tests/unit/common/test_file_converter.py +479 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/uv.lock +1 -1
- atlan_application_sdk-0.1.1rc53/.github/release_notes.md +0 -1
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.cursor/rules/documentation.mdc +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.cursor/rules/exception-handling.mdc +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.cursor/rules/guidelines.mdc +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.cursor/rules/logging.mdc +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.cursor/rules/performance.mdc +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.cursor/rules/setup.mdc +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.cursor/rules/standards.mdc +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.cursor/rules/testing.mdc +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.env.example +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/CODEOWNERS +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/ISSUE_TEMPLATE/config.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/actions/docgen/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/actions/doclint/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/actions/docstring-coverage/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/actions/e2e-apps/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/actions/e2e-examples/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/actions/setup-deps/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/actions/sync-branches/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/actions/trivy/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/actions/trivy-container/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/actions/unit-tests/action.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/dependabot.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/pull_request_template.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/scripts/extract_release_notes.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/scripts/pre_release.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/scripts/release.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/scripts/trivy-to-markdown.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/scripts/update_changelog.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/AMPM.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Accessibility.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Acronyms.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Adverbs.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Auto.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Avoid.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Contractions.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Dashes.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/DateFormat.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/DateNumbers.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/DateOrder.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Ellipses.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/FirstPerson.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Foreign.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Gender.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/GenderBias.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/GeneralURL.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/HeadingAcronyms.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/HeadingColons.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/HeadingPunctuation.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Headings.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Hyphens.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Negative.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Ordinal.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/OxfordComma.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Passive.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Percentages.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Plurals.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Quotes.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/RangeTime.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Semicolon.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/SentenceLength.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Spacing.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Suspended.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Terms.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/URLFormat.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Units.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Vocab.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/We.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/Wordiness.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/Microsoft/meta.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/config/vocabularies/deviations/accept.txt +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/styles/config/vocabularies/deviations/reject.txt +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflow-templates/checks.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflow-templates/checks.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflow-templates/codeql.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflow-templates/codeql.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflow-templates/dependency-review.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflow-templates/dependency-review.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflow-templates/stale.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflow-templates/stale.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflow-templates/trivy-container.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflow-templates/trivy-container.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflow-templates/trivy.properties.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflow-templates/trivy.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflows/codeql.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflows/pre-release.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflows/pull_request.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflows/push.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflows/release.yaml.disabled +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflows/scale-tests.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflows/schedule.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflows/tag-and-publish.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflows/trivy-container.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.github/workflows/verify-snyk-status.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.gitignore +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.pre-commit-config.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/.vscode/launch.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/CODE_OF_CONDUCT.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/CONTRIBUTING.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/LICENSE +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/NOTICE +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/README.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/SECURITY.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/activities/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/activities/common/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/activities/common/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/activities/lock_management.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/activities/metadata_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/activities/metadata_extraction/base.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/activities/metadata_extraction/rest.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/activities/metadata_extraction/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/activities/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/activities/query_extraction/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/application/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/application/metadata_extraction/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/clients/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/clients/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/clients/atlan.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/clients/atlan_auth.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/clients/base.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/clients/models.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/clients/redis.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/clients/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/clients/temporal.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/clients/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/clients/workflow.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/common/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/common/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/common/aws_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/common/dapr_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/common/dataframe_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/common/error_codes.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/common/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/constants.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/decorators/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/decorators/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/decorators/locks.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/decorators/mcp_tool.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/docgen/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/docgen/exporters/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/docgen/exporters/mkdocs.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/docgen/models/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/docgen/models/export/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/docgen/models/export/page.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/docgen/models/manifest/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/docgen/models/manifest/customer.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/docgen/models/manifest/internal.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/docgen/models/manifest/metadata.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/docgen/models/manifest/page.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/docgen/models/manifest/section.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/docgen/parsers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/docgen/parsers/directory.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/docgen/parsers/manifest.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/events/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/events/models.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/handlers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/handlers/base.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/handlers/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/inputs/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/inputs/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/inputs/iceberg.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/inputs/json.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/inputs/parquet.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/inputs/sql_query.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/interceptors/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/interceptors/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/interceptors/cleanup.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/interceptors/events.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/interceptors/lock.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/observability/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/observability/decorators/observability_decorator.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/observability/logger_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/observability/metrics_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/observability/observability.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/observability/traces_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/observability/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/outputs/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/outputs/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/outputs/iceberg.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/outputs/json.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/outputs/parquet.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/server/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/server/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/server/fastapi/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/server/fastapi/middleware/logmiddleware.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/server/fastapi/middleware/metrics.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/server/fastapi/models.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/server/fastapi/routers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/server/fastapi/routers/server.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/server/fastapi/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/server/mcp/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/server/mcp/models.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/server/mcp/server.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/services/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/services/atlan_storage.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/services/eventstore.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/services/objectstore.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/services/secretstore.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/services/statestore.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/e2e/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/e2e/base.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/e2e/client.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/e2e/conftest.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/e2e/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/clients/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/clients/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/common/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/common/logger.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/handlers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/sql_metadata.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/sql_preflight.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/inputs/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/inputs/json_input.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/inputs/parquet_input.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/outputs/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/outputs/json_output.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/outputs/statestore.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/server/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/server/fastapi/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/sql_client.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/hypothesis/strategies/temporal.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/scale_data_generator/README.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/scale_data_generator/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/scale_data_generator/config_loader.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/scale_data_generator/data_generator.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/scale_data_generator/driver.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/scale_data_generator/examples/config.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/scale_data_generator/output_handler/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/scale_data_generator/output_handler/base.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/scale_data_generator/output_handler/csv_handler.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/scale_data_generator/output_handler/json_handler.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/scale_data_generator/output_handler/parquet_handler.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/test_utils/workflow_monitoring.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/transformers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/transformers/atlas/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/transformers/atlas/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/transformers/common/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/transformers/common/utils.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/transformers/query/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/transformers/query/templates/column.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/transformers/query/templates/database.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/transformers/query/templates/extras-procedure.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/transformers/query/templates/function.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/transformers/query/templates/schema.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/transformers/query/templates/table.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/transformers/query/templates/tag_attachment.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/worker.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/workflows/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/workflows/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/workflows/metadata_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/workflows/metadata_extraction/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/workflows/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/application_sdk/workflows/query_extraction/sql.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/components/README.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/components/atlan-storage.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/components/aws-secrets.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/components/configuration.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/components/deployment-secrets.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/components/eventstore.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/components/objectstore.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/components/secretstore.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/components/statestore.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/concepts/API.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/concepts/activities.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/concepts/application.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/concepts/application_sql.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/concepts/atlanupload.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/concepts/clients.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/concepts/common.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/concepts/handlers.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/concepts/inputs.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/concepts/mcp.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/concepts/output_paths.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/concepts/outputs.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/concepts/server.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/concepts/services.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/concepts/temporal_auth.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/concepts/worker.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/concepts/workflows.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/configuration.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/guides/architecture.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/guides/atlantis.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/guides/best-practices.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/guides/getting-started.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/guides/index.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/guides/partners.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/guides/secretstores.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/guides/sql-application-guide.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/guides/test-framework.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/index.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/setup/LINUX.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/setup/MAC.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/setup/WINDOWS.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/setup/troubleshooting.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/static/assets/logo.svg +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/static/images/phoenix-sdk-featureset.png +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/static/javascripts/mathjax.js +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/docs/static/stylesheets/extra.css +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/docs/mkdocs.yml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/examples/README.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/examples/application_custom_fastapi.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/examples/application_fastapi.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/examples/application_hello_world.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/examples/application_sql.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/examples/application_sql_miner.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/examples/application_sql_with_custom_pyatlan_transformer.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/examples/application_sql_with_custom_transformer.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/examples/run_examples.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/examples/sql_query_templates/database.yaml +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/conftest.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/activities/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/activities/common/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/activities/common/test_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/activities/metadata_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/activities/metadata_extraction/test_sql.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/activities/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/activities/test_activities.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/activities/test_lock_management.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/application/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/application/metadata_extraction/test_sql.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/application/test_application.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/clients/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/clients/test_async_sql_client.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/clients/test_atlan_auth.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/clients/test_atlan_client.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/clients/test_atlanauth.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/clients/test_base_client.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/clients/test_redis_client.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/clients/test_sql_client.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/clients/test_temporal_client.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/common/test_aws_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/common/test_credential_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/common/test_utils.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/common/test_utils_file_discovery.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/decorators/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/decorators/test_mcp_tool.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/docgen/parsers/test_directory_parser.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/docgen/parsers/test_manifest_parser.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/handlers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/handlers/sql/test_auth.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/handlers/sql/test_check_schemas_and_databases.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/handlers/sql/test_extract_allowed_schemas.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/handlers/sql/test_metadata.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/handlers/sql/test_preflight_check.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/handlers/sql/test_prepare_metadata.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/handlers/sql/test_tables_check.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/handlers/sql/test_validate_filters.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/handlers/test_base_handler.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/inputs/test_base_input.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/inputs/test_json.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/inputs/test_parquet.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/observability/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/observability/test_logger_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/observability/test_metrics_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/observability/test_traces_adaptor.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/outputs/test_iceberg.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/outputs/test_json_output.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/outputs/test_output.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/outputs/test_parquet_output.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/server/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/server/fastapi/routers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/server/fastapi/routers/server.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/server/fastapi/test_fastapi.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/server/mcp/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/server/mcp/test_mcp_server.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/services/test_atlan_storage.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/services/test_eventstore.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/services/test_objectstore.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/services/test_statestore.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/test_worker.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/resources/raw_columns.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/resources/raw_databases.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/resources/raw_functions.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/resources/raw_procedures.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/resources/raw_schemas.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/resources/raw_tables.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/resources/transformed_columns.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/resources/transformed_databases.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/resources/transformed_functions.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/resources/transformed_procedures.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/resources/transformed_schemas.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/resources/transformed_tables.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/test_column.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/test_database.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/test_function.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/test_procedure.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/test_schema.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/atlas/test_table.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/query/resources/raw/column.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/query/resources/raw/database.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/query/resources/raw/extras-procedure.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/query/resources/raw/function.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/query/resources/raw/schema.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/query/resources/raw/table.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/query/resources/transformed/column.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/query/resources/transformed/database.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/query/resources/transformed/extras-procedure.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/query/resources/transformed/function.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/query/resources/transformed/schema.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/query/resources/transformed/table.json +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/query/test_sql_transformer.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/transformers/query/test_sql_transformer_output_validation.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/workflows/metadata_extraction/test_sql_workflow.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/workflows/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-0.1.1rc53 → atlan_application_sdk-0.1.1rc54}/tests/unit/workflows/query_extraction/test_sql.py +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
## v0.1.1rc54 (October 09, 2025)
|
|
2
|
+
|
|
3
|
+
Full Changelog: https://github.com/atlanhq/application-sdk/compare/v0.1.1rc53...v0.1.1rc54
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
- Add file converter to sdk for QI app Json Support (#778) (by @OnkarVO7 in [177aa06](https://github.com/atlanhq/application-sdk/commit/177aa06))
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.1.1rc54 (October 09, 2025)
|
|
4
|
+
|
|
5
|
+
Full Changelog: https://github.com/atlanhq/application-sdk/compare/v0.1.1rc53...v0.1.1rc54
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
- Add file converter to sdk for QI app Json Support (#778) (by @OnkarVO7 in [177aa06](https://github.com/atlanhq/application-sdk/commit/177aa06))
|
|
10
|
+
|
|
11
|
+
|
|
3
12
|
## v0.1.1rc52 (October 03, 2025)
|
|
4
13
|
|
|
5
14
|
Full Changelog: https://github.com/atlanhq/application-sdk/compare/v0.1.1rc51...v0.1.1rc52
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atlan-application-sdk
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.1rc54
|
|
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
|
|
@@ -20,6 +20,7 @@ from typing import Any, Dict, Generic, Optional, TypeVar
|
|
|
20
20
|
from pydantic import BaseModel
|
|
21
21
|
from temporalio import activity
|
|
22
22
|
|
|
23
|
+
from application_sdk.activities.common.models import ActivityResult
|
|
23
24
|
from application_sdk.activities.common.utils import (
|
|
24
25
|
auto_heartbeater,
|
|
25
26
|
build_output_path,
|
|
@@ -27,6 +28,7 @@ from application_sdk.activities.common.utils import (
|
|
|
27
28
|
get_workflow_run_id,
|
|
28
29
|
)
|
|
29
30
|
from application_sdk.common.error_codes import OrchestratorError
|
|
31
|
+
from application_sdk.common.file_converter import FileType, convert_data_files
|
|
30
32
|
from application_sdk.constants import TEMPORARY_PATH
|
|
31
33
|
from application_sdk.handlers import HandlerInterface
|
|
32
34
|
from application_sdk.observability.logger_adaptor import get_logger
|
|
@@ -268,3 +270,26 @@ class ActivitiesInterface(ABC, Generic[ActivitiesStateType]):
|
|
|
268
270
|
exc_info=e,
|
|
269
271
|
)
|
|
270
272
|
raise
|
|
273
|
+
|
|
274
|
+
@activity.defn
|
|
275
|
+
@auto_heartbeater
|
|
276
|
+
async def convert_files(self, workflow_args: Dict[str, Any]) -> ActivityResult:
|
|
277
|
+
"""
|
|
278
|
+
Convert the input files to the specified output type.
|
|
279
|
+
"""
|
|
280
|
+
converted_files = []
|
|
281
|
+
if workflow_args.get("input_files") and workflow_args.get("output_file_type"):
|
|
282
|
+
converted_files = await convert_data_files(
|
|
283
|
+
workflow_args["input_files"],
|
|
284
|
+
FileType(workflow_args["output_file_type"]),
|
|
285
|
+
)
|
|
286
|
+
return ActivityResult(
|
|
287
|
+
status="success",
|
|
288
|
+
message=f"Successfully converted files to {workflow_args['output_file_type']}",
|
|
289
|
+
metadata={"input_files": converted_files},
|
|
290
|
+
)
|
|
291
|
+
return ActivityResult(
|
|
292
|
+
status="warning",
|
|
293
|
+
message="Unable to get input files or output file type",
|
|
294
|
+
metadata={"input_files": converted_files},
|
|
295
|
+
)
|
|
@@ -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 List, Optional
|
|
7
|
+
from typing import Any, Dict, List, Optional, TypedDict
|
|
8
8
|
|
|
9
9
|
from pydantic import BaseModel
|
|
10
10
|
|
|
@@ -36,3 +36,9 @@ class ActivityStatistics(BaseModel):
|
|
|
36
36
|
chunk_count: int = 0
|
|
37
37
|
partitions: Optional[List[int]] = []
|
|
38
38
|
typename: Optional[str] = None
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class ActivityResult(TypedDict):
|
|
42
|
+
status: str
|
|
43
|
+
message: str
|
|
44
|
+
metadata: Dict[str, Any]
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
from collections import namedtuple
|
|
2
|
+
from enum import Enum
|
|
3
|
+
from typing import List, Optional
|
|
4
|
+
|
|
5
|
+
import pandas as pd
|
|
6
|
+
|
|
7
|
+
from application_sdk.observability.logger_adaptor import get_logger
|
|
8
|
+
|
|
9
|
+
logger = get_logger(__name__)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def enum_register():
|
|
13
|
+
"""
|
|
14
|
+
Helps us register custom function for enum values
|
|
15
|
+
"""
|
|
16
|
+
registry = {}
|
|
17
|
+
|
|
18
|
+
def add(name: str):
|
|
19
|
+
def inner(fn):
|
|
20
|
+
registry[name] = fn
|
|
21
|
+
return fn
|
|
22
|
+
|
|
23
|
+
return inner
|
|
24
|
+
|
|
25
|
+
Register = namedtuple("Register", ["add", "registry"])
|
|
26
|
+
return Register(add, registry)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
file_converter_registry = enum_register()
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# Edit the enums here to add new file types
|
|
33
|
+
class FileType(Enum):
|
|
34
|
+
JSON = "json"
|
|
35
|
+
PARQUET = "parquet"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
# Edit the enums here to add new file conversions
|
|
39
|
+
class ConvertFile(Enum):
|
|
40
|
+
JSON_TO_PARQUET = "json_to_parquet"
|
|
41
|
+
PARQUET_TO_JSON = "parquet_to_json"
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
async def convert_data_files(
|
|
45
|
+
input_file_paths: List[str], output_file_type: FileType
|
|
46
|
+
) -> List[str]:
|
|
47
|
+
"""
|
|
48
|
+
Convert the input files to the specified file type
|
|
49
|
+
Args:
|
|
50
|
+
input_file_paths: List[str] - List of input file paths
|
|
51
|
+
output_file_type: FileType - The file type to convert to
|
|
52
|
+
Returns:
|
|
53
|
+
List[str] - List of converted file paths
|
|
54
|
+
"""
|
|
55
|
+
if not input_file_paths:
|
|
56
|
+
return []
|
|
57
|
+
input_file_type = input_file_paths[0].split(".")[-1]
|
|
58
|
+
convert_file = ConvertFile(f"{input_file_type}_to_{output_file_type.value}")
|
|
59
|
+
converter_func = file_converter_registry.registry.get(convert_file)
|
|
60
|
+
converted_files = []
|
|
61
|
+
try:
|
|
62
|
+
for file in input_file_paths:
|
|
63
|
+
converted_file = converter_func(file)
|
|
64
|
+
if converted_file:
|
|
65
|
+
converted_files.append(converted_file)
|
|
66
|
+
except KeyError:
|
|
67
|
+
raise ValueError(f"No converter found for file type: {convert_file}")
|
|
68
|
+
|
|
69
|
+
return converted_files
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
# Add the main logic here to convert the files here
|
|
73
|
+
@file_converter_registry.add(ConvertFile.JSON_TO_PARQUET)
|
|
74
|
+
def convert_json_to_parquet(file_path: str) -> Optional[str]:
|
|
75
|
+
"""Convert the downloaded files from json to parquet"""
|
|
76
|
+
try:
|
|
77
|
+
logger.info(f"Converting {file_path} to parquet")
|
|
78
|
+
df = pd.read_json(file_path, orient="records", lines=True)
|
|
79
|
+
df = df.loc[:, ~df.where(df.astype(bool)).isna().all(axis=0)]
|
|
80
|
+
parquet_file_path = file_path.replace(".json", ".parquet")
|
|
81
|
+
df.to_parquet(parquet_file_path)
|
|
82
|
+
return parquet_file_path
|
|
83
|
+
except Exception as e:
|
|
84
|
+
logger.error(f"Error converting {file_path} to parquet: {e}")
|
|
85
|
+
return None
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
@file_converter_registry.add(ConvertFile.PARQUET_TO_JSON)
|
|
89
|
+
def convert_parquet_to_json(file_path: str) -> Optional[str]:
|
|
90
|
+
"""Convert the downloaded files from parquet to json"""
|
|
91
|
+
try:
|
|
92
|
+
logger.info(f"Converting {file_path} to json")
|
|
93
|
+
df = pd.read_parquet(file_path)
|
|
94
|
+
json_file_path = file_path.replace(".parquet", ".json")
|
|
95
|
+
df.to_json(json_file_path, orient="records", lines=True)
|
|
96
|
+
return json_file_path
|
|
97
|
+
except Exception as e:
|
|
98
|
+
logger.error(f"Error converting {file_path} to json: {e}")
|
|
99
|
+
return None
|
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Unit tests for the file_converter module.
|
|
3
|
+
|
|
4
|
+
This module contains comprehensive tests for file conversion functionality,
|
|
5
|
+
covering all conversion types, error handling, and edge cases.
|
|
6
|
+
|
|
7
|
+
Test Case Bucketing and Coverage:
|
|
8
|
+
+--------------------------------+-------------+----------------------------------------+
|
|
9
|
+
| Test Category | Test Count | Coverage Description |
|
|
10
|
+
+--------------------------------+-------------+----------------------------------------+
|
|
11
|
+
| convert_data_files Function | 6 | Main public interface testing |
|
|
12
|
+
| JSON to Parquet Conversion | 4 | Success, error, and edge cases |
|
|
13
|
+
| Parquet to JSON Conversion | 4 | Success, error, and edge cases |
|
|
14
|
+
| Registry Integration | 2 | Converter registry functionality |
|
|
15
|
+
| Edge Cases & Error Handling | 3 | Invalid inputs, unknown conversions |
|
|
16
|
+
+--------------------------------+-------------+----------------------------------------+
|
|
17
|
+
| Total Test Cases | 19 | Comprehensive behavioral coverage |
|
|
18
|
+
+--------------------------------+-------------+----------------------------------------+
|
|
19
|
+
|
|
20
|
+
Key Test Areas:
|
|
21
|
+
• Main conversion workflow through convert_data_files
|
|
22
|
+
• Individual converter function behavior
|
|
23
|
+
• Error handling and recovery
|
|
24
|
+
• File path transformation logic
|
|
25
|
+
• Registry integration and lookup
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
from unittest.mock import MagicMock, Mock, patch
|
|
29
|
+
|
|
30
|
+
import pandas as pd
|
|
31
|
+
import pytest
|
|
32
|
+
|
|
33
|
+
from application_sdk.common.file_converter import (
|
|
34
|
+
ConvertFile,
|
|
35
|
+
FileType,
|
|
36
|
+
convert_data_files,
|
|
37
|
+
convert_json_to_parquet,
|
|
38
|
+
convert_parquet_to_json,
|
|
39
|
+
file_converter_registry,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
# Only mark async tests individually
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class TestConvertDataFiles:
|
|
46
|
+
"""Test suite for the main convert_data_files function."""
|
|
47
|
+
|
|
48
|
+
@pytest.mark.asyncio
|
|
49
|
+
async def test_empty_input_list_returns_empty_list(self):
|
|
50
|
+
"""Test that empty input list returns empty list."""
|
|
51
|
+
result = await convert_data_files([], FileType.PARQUET)
|
|
52
|
+
assert result == []
|
|
53
|
+
|
|
54
|
+
@pytest.mark.asyncio
|
|
55
|
+
@patch("application_sdk.common.file_converter.file_converter_registry")
|
|
56
|
+
async def test_successful_conversion_single_file(self, mock_registry):
|
|
57
|
+
"""Test successful conversion of a single file."""
|
|
58
|
+
# Arrange
|
|
59
|
+
mock_converter = Mock(return_value="/path/output.parquet")
|
|
60
|
+
mock_registry.registry.get.return_value = mock_converter
|
|
61
|
+
|
|
62
|
+
input_files = ["/path/input.json"]
|
|
63
|
+
|
|
64
|
+
# Act
|
|
65
|
+
result = await convert_data_files(input_files, FileType.PARQUET)
|
|
66
|
+
|
|
67
|
+
# Assert
|
|
68
|
+
assert result == ["/path/output.parquet"]
|
|
69
|
+
mock_registry.registry.get.assert_called_once_with(ConvertFile.JSON_TO_PARQUET)
|
|
70
|
+
mock_converter.assert_called_once_with("/path/input.json")
|
|
71
|
+
|
|
72
|
+
@pytest.mark.asyncio
|
|
73
|
+
@patch("application_sdk.common.file_converter.file_converter_registry")
|
|
74
|
+
async def test_successful_conversion_multiple_files(self, mock_registry):
|
|
75
|
+
"""Test successful conversion of multiple files."""
|
|
76
|
+
# Arrange
|
|
77
|
+
mock_converter = Mock(
|
|
78
|
+
side_effect=[
|
|
79
|
+
"/path/output1.parquet",
|
|
80
|
+
"/path/output2.parquet",
|
|
81
|
+
"/path/output3.parquet",
|
|
82
|
+
]
|
|
83
|
+
)
|
|
84
|
+
mock_registry.registry.get.return_value = mock_converter
|
|
85
|
+
|
|
86
|
+
input_files = ["/path/input1.json", "/path/input2.json", "/path/input3.json"]
|
|
87
|
+
|
|
88
|
+
# Act
|
|
89
|
+
result = await convert_data_files(input_files, FileType.PARQUET)
|
|
90
|
+
|
|
91
|
+
# Assert
|
|
92
|
+
assert result == [
|
|
93
|
+
"/path/output1.parquet",
|
|
94
|
+
"/path/output2.parquet",
|
|
95
|
+
"/path/output3.parquet",
|
|
96
|
+
]
|
|
97
|
+
assert mock_converter.call_count == 3
|
|
98
|
+
|
|
99
|
+
@pytest.mark.asyncio
|
|
100
|
+
@patch("application_sdk.common.file_converter.file_converter_registry")
|
|
101
|
+
async def test_conversion_with_failed_files_skipped(self, mock_registry):
|
|
102
|
+
"""Test that files returning None are skipped from results."""
|
|
103
|
+
# Arrange
|
|
104
|
+
mock_converter = Mock(
|
|
105
|
+
side_effect=[
|
|
106
|
+
"/path/output1.parquet",
|
|
107
|
+
None, # Failed conversion
|
|
108
|
+
"/path/output3.parquet",
|
|
109
|
+
]
|
|
110
|
+
)
|
|
111
|
+
mock_registry.registry.get.return_value = mock_converter
|
|
112
|
+
|
|
113
|
+
input_files = ["/path/input1.json", "/path/input2.json", "/path/input3.json"]
|
|
114
|
+
|
|
115
|
+
# Act
|
|
116
|
+
result = await convert_data_files(input_files, FileType.PARQUET)
|
|
117
|
+
|
|
118
|
+
# Assert
|
|
119
|
+
assert result == ["/path/output1.parquet", "/path/output3.parquet"]
|
|
120
|
+
assert mock_converter.call_count == 3
|
|
121
|
+
|
|
122
|
+
@pytest.mark.asyncio
|
|
123
|
+
async def test_unsupported_conversion_raises_value_error(self):
|
|
124
|
+
"""Test that unsupported conversion raises ValueError when ConvertFile enum construction fails."""
|
|
125
|
+
input_files = ["/path/input.xyz"]
|
|
126
|
+
|
|
127
|
+
# Act & Assert - This should raise ValueError when trying to construct ConvertFile enum
|
|
128
|
+
with pytest.raises(ValueError):
|
|
129
|
+
await convert_data_files(input_files, FileType.PARQUET)
|
|
130
|
+
|
|
131
|
+
@pytest.mark.asyncio
|
|
132
|
+
@patch("application_sdk.common.file_converter.file_converter_registry")
|
|
133
|
+
async def test_converter_not_found_error(self, mock_registry):
|
|
134
|
+
"""Test that when converter function is None, AttributeError is raised."""
|
|
135
|
+
# Arrange - registry returns None for unknown converter
|
|
136
|
+
mock_registry.registry.get.return_value = None
|
|
137
|
+
|
|
138
|
+
input_files = ["/path/input.json"]
|
|
139
|
+
|
|
140
|
+
# Act & Assert - This should raise AttributeError when trying to call None
|
|
141
|
+
with pytest.raises(TypeError): # calling None() raises TypeError
|
|
142
|
+
await convert_data_files(input_files, FileType.PARQUET)
|
|
143
|
+
|
|
144
|
+
@pytest.mark.asyncio
|
|
145
|
+
@patch("application_sdk.common.file_converter.file_converter_registry")
|
|
146
|
+
async def test_file_extension_detection_from_first_file(self, mock_registry):
|
|
147
|
+
"""Test that file extension is detected from the first file in the list."""
|
|
148
|
+
# Arrange
|
|
149
|
+
mock_converter = Mock(return_value="/path/output.json")
|
|
150
|
+
mock_registry.registry.get.return_value = mock_converter
|
|
151
|
+
|
|
152
|
+
# Mixed file types - should use extension from first file
|
|
153
|
+
input_files = ["/path/input.parquet", "/path/input.json"]
|
|
154
|
+
|
|
155
|
+
# Act
|
|
156
|
+
result = await convert_data_files(input_files, FileType.JSON)
|
|
157
|
+
|
|
158
|
+
# Assert - Should look for parquet_to_json converter based on first file
|
|
159
|
+
assert result == ["/path/output.json", "/path/output.json"]
|
|
160
|
+
mock_registry.registry.get.assert_called_once_with(ConvertFile.PARQUET_TO_JSON)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
class TestConvertJsonToParquet:
|
|
164
|
+
"""Test suite for the convert_json_to_parquet function."""
|
|
165
|
+
|
|
166
|
+
@patch("application_sdk.common.file_converter.pd.read_json")
|
|
167
|
+
def test_successful_json_to_parquet_conversion(self, mock_read_json):
|
|
168
|
+
"""Test successful conversion from JSON to Parquet."""
|
|
169
|
+
# Arrange
|
|
170
|
+
mock_df = MagicMock()
|
|
171
|
+
mock_filtered_df = MagicMock()
|
|
172
|
+
|
|
173
|
+
# Mock the column filtering chain: df.loc[:, ~df.where(df.astype(bool)).isna().all(axis=0)]
|
|
174
|
+
mock_df.where.return_value = mock_df
|
|
175
|
+
mock_df.astype.return_value = mock_df
|
|
176
|
+
mock_df.isna.return_value = mock_df
|
|
177
|
+
mock_df.all.return_value = MagicMock()
|
|
178
|
+
mock_df.loc.__getitem__.return_value = mock_filtered_df
|
|
179
|
+
|
|
180
|
+
mock_read_json.return_value = mock_df
|
|
181
|
+
|
|
182
|
+
file_path = "/path/input.json"
|
|
183
|
+
expected_output = "/path/input.parquet"
|
|
184
|
+
|
|
185
|
+
# Act
|
|
186
|
+
result = convert_json_to_parquet(file_path)
|
|
187
|
+
|
|
188
|
+
# Assert
|
|
189
|
+
assert result == expected_output
|
|
190
|
+
mock_read_json.assert_called_once_with(file_path, orient="records", lines=True)
|
|
191
|
+
mock_filtered_df.to_parquet.assert_called_once_with(expected_output)
|
|
192
|
+
|
|
193
|
+
@patch("application_sdk.common.file_converter.pd.read_json")
|
|
194
|
+
def test_json_to_parquet_read_error_returns_none(self, mock_read_json):
|
|
195
|
+
"""Test that read errors return None and are logged."""
|
|
196
|
+
# Arrange
|
|
197
|
+
mock_read_json.side_effect = Exception("File read error")
|
|
198
|
+
|
|
199
|
+
file_path = "/path/input.json"
|
|
200
|
+
|
|
201
|
+
# Act
|
|
202
|
+
with patch("application_sdk.common.file_converter.logger.error") as mock_logger:
|
|
203
|
+
result = convert_json_to_parquet(file_path)
|
|
204
|
+
|
|
205
|
+
# Assert
|
|
206
|
+
assert result is None
|
|
207
|
+
mock_logger.assert_called_once()
|
|
208
|
+
|
|
209
|
+
@patch("application_sdk.common.file_converter.pd.read_json")
|
|
210
|
+
def test_json_to_parquet_write_error_returns_none(self, mock_read_json):
|
|
211
|
+
"""Test that write errors return None and are logged."""
|
|
212
|
+
# Arrange
|
|
213
|
+
mock_df = MagicMock()
|
|
214
|
+
mock_filtered_df = MagicMock()
|
|
215
|
+
|
|
216
|
+
# Mock the column filtering chain
|
|
217
|
+
mock_df.where.return_value = mock_df
|
|
218
|
+
mock_df.astype.return_value = mock_df
|
|
219
|
+
mock_df.isna.return_value = mock_df
|
|
220
|
+
mock_df.all.return_value = MagicMock()
|
|
221
|
+
mock_df.loc.__getitem__.return_value = mock_filtered_df
|
|
222
|
+
|
|
223
|
+
# Make to_parquet raise an exception
|
|
224
|
+
mock_filtered_df.to_parquet.side_effect = Exception("File write error")
|
|
225
|
+
|
|
226
|
+
mock_read_json.return_value = mock_df
|
|
227
|
+
|
|
228
|
+
file_path = "/path/input.json"
|
|
229
|
+
|
|
230
|
+
# Act
|
|
231
|
+
with patch("application_sdk.common.file_converter.logger.error") as mock_logger:
|
|
232
|
+
result = convert_json_to_parquet(file_path)
|
|
233
|
+
|
|
234
|
+
# Assert
|
|
235
|
+
assert result is None
|
|
236
|
+
mock_logger.assert_called_once()
|
|
237
|
+
|
|
238
|
+
@patch("application_sdk.common.file_converter.pd.read_json")
|
|
239
|
+
def test_json_to_parquet_column_filtering(self, mock_read_json):
|
|
240
|
+
"""Test that empty columns are filtered out during conversion."""
|
|
241
|
+
# Arrange
|
|
242
|
+
mock_df = MagicMock()
|
|
243
|
+
mock_filtered_df = MagicMock()
|
|
244
|
+
|
|
245
|
+
# Mock the column filtering chain
|
|
246
|
+
mock_df.where.return_value = mock_df
|
|
247
|
+
mock_df.astype.return_value = mock_df
|
|
248
|
+
mock_df.isna.return_value = mock_df
|
|
249
|
+
mock_df.all.return_value = MagicMock()
|
|
250
|
+
mock_df.loc.__getitem__.return_value = mock_filtered_df
|
|
251
|
+
|
|
252
|
+
mock_read_json.return_value = mock_df
|
|
253
|
+
|
|
254
|
+
file_path = "/path/input.json"
|
|
255
|
+
|
|
256
|
+
# Act
|
|
257
|
+
convert_json_to_parquet(file_path)
|
|
258
|
+
|
|
259
|
+
# Assert
|
|
260
|
+
# Verify that column filtering logic was applied
|
|
261
|
+
mock_df.where.assert_called_once()
|
|
262
|
+
mock_df.astype.assert_called_once_with(bool)
|
|
263
|
+
mock_df.isna.assert_called_once()
|
|
264
|
+
mock_df.all.assert_called_once_with(axis=0)
|
|
265
|
+
mock_filtered_df.to_parquet.assert_called_once()
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
class TestConvertParquetToJson:
|
|
269
|
+
"""Test suite for the convert_parquet_to_json function."""
|
|
270
|
+
|
|
271
|
+
@patch("application_sdk.common.file_converter.pd.read_parquet")
|
|
272
|
+
def test_successful_parquet_to_json_conversion(self, mock_read_parquet):
|
|
273
|
+
"""Test successful conversion from Parquet to JSON."""
|
|
274
|
+
# Arrange
|
|
275
|
+
mock_df = MagicMock()
|
|
276
|
+
mock_read_parquet.return_value = mock_df
|
|
277
|
+
|
|
278
|
+
file_path = "/path/input.parquet"
|
|
279
|
+
expected_output = "/path/input.json"
|
|
280
|
+
|
|
281
|
+
# Act
|
|
282
|
+
result = convert_parquet_to_json(file_path)
|
|
283
|
+
|
|
284
|
+
# Assert
|
|
285
|
+
assert result == expected_output
|
|
286
|
+
mock_read_parquet.assert_called_once_with(file_path)
|
|
287
|
+
mock_df.to_json.assert_called_once_with(
|
|
288
|
+
expected_output, orient="records", lines=True
|
|
289
|
+
)
|
|
290
|
+
|
|
291
|
+
@patch("application_sdk.common.file_converter.pd.read_parquet")
|
|
292
|
+
def test_parquet_to_json_read_error_returns_none(self, mock_read_parquet):
|
|
293
|
+
"""Test that read errors return None and are logged."""
|
|
294
|
+
# Arrange
|
|
295
|
+
mock_read_parquet.side_effect = Exception("File read error")
|
|
296
|
+
|
|
297
|
+
file_path = "/path/input.parquet"
|
|
298
|
+
|
|
299
|
+
# Act
|
|
300
|
+
with patch("application_sdk.common.file_converter.logger.error") as mock_logger:
|
|
301
|
+
result = convert_parquet_to_json(file_path)
|
|
302
|
+
|
|
303
|
+
# Assert
|
|
304
|
+
assert result is None
|
|
305
|
+
mock_logger.assert_called_once()
|
|
306
|
+
|
|
307
|
+
@patch("application_sdk.common.file_converter.pd.read_parquet")
|
|
308
|
+
def test_parquet_to_json_write_error_returns_none(self, mock_read_parquet):
|
|
309
|
+
"""Test that write errors return None and are logged."""
|
|
310
|
+
# Arrange
|
|
311
|
+
mock_df = MagicMock()
|
|
312
|
+
mock_df.to_json.side_effect = Exception("File write error")
|
|
313
|
+
mock_read_parquet.return_value = mock_df
|
|
314
|
+
|
|
315
|
+
file_path = "/path/input.parquet"
|
|
316
|
+
|
|
317
|
+
# Act
|
|
318
|
+
with patch("application_sdk.common.file_converter.logger.error") as mock_logger:
|
|
319
|
+
result = convert_parquet_to_json(file_path)
|
|
320
|
+
|
|
321
|
+
# Assert
|
|
322
|
+
assert result is None
|
|
323
|
+
mock_logger.assert_called_once()
|
|
324
|
+
|
|
325
|
+
@patch("application_sdk.common.file_converter.pd.read_parquet")
|
|
326
|
+
def test_parquet_to_json_proper_parameters(self, mock_read_parquet):
|
|
327
|
+
"""Test that JSON is written with correct parameters for line-delimited format."""
|
|
328
|
+
# Arrange
|
|
329
|
+
mock_df = MagicMock()
|
|
330
|
+
mock_read_parquet.return_value = mock_df
|
|
331
|
+
|
|
332
|
+
file_path = "/path/input.parquet"
|
|
333
|
+
|
|
334
|
+
# Act
|
|
335
|
+
convert_parquet_to_json(file_path)
|
|
336
|
+
|
|
337
|
+
# Assert
|
|
338
|
+
mock_df.to_json.assert_called_once_with(
|
|
339
|
+
"/path/input.json", orient="records", lines=True
|
|
340
|
+
)
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
class TestRegistryIntegration:
|
|
344
|
+
"""Test suite for registry integration and converter lookup."""
|
|
345
|
+
|
|
346
|
+
def test_json_to_parquet_registered_in_registry(self):
|
|
347
|
+
"""Test that JSON to Parquet converter is properly registered."""
|
|
348
|
+
converter = file_converter_registry.registry.get(ConvertFile.JSON_TO_PARQUET)
|
|
349
|
+
assert converter is not None
|
|
350
|
+
assert converter == convert_json_to_parquet
|
|
351
|
+
|
|
352
|
+
def test_parquet_to_json_registered_in_registry(self):
|
|
353
|
+
"""Test that Parquet to JSON converter is properly registered."""
|
|
354
|
+
converter = file_converter_registry.registry.get(ConvertFile.PARQUET_TO_JSON)
|
|
355
|
+
assert converter is not None
|
|
356
|
+
assert converter == convert_parquet_to_json
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
class TestEdgeCasesAndErrorHandling:
|
|
360
|
+
"""Test suite for edge cases and error handling scenarios."""
|
|
361
|
+
|
|
362
|
+
def test_convert_file_enum_construction_with_valid_types(self):
|
|
363
|
+
"""Test that ConvertFile enum can be constructed with valid type combinations."""
|
|
364
|
+
# These should work based on defined enums
|
|
365
|
+
json_to_parquet = ConvertFile("json_to_parquet")
|
|
366
|
+
parquet_to_json = ConvertFile("parquet_to_json")
|
|
367
|
+
|
|
368
|
+
assert json_to_parquet == ConvertFile.JSON_TO_PARQUET
|
|
369
|
+
assert parquet_to_json == ConvertFile.PARQUET_TO_JSON
|
|
370
|
+
|
|
371
|
+
def test_convert_file_enum_construction_with_invalid_types(self):
|
|
372
|
+
"""Test that ConvertFile enum raises ValueError for unsupported combinations."""
|
|
373
|
+
with pytest.raises(ValueError):
|
|
374
|
+
ConvertFile("csv_to_parquet") # Unsupported conversion
|
|
375
|
+
|
|
376
|
+
with pytest.raises(ValueError):
|
|
377
|
+
ConvertFile("json_to_csv") # Unsupported conversion
|
|
378
|
+
|
|
379
|
+
def test_file_type_enum_values(self):
|
|
380
|
+
"""Test that FileType enum has expected values."""
|
|
381
|
+
assert FileType.JSON.value == "json"
|
|
382
|
+
assert FileType.PARQUET.value == "parquet"
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
class TestFileConverterIntegration:
|
|
386
|
+
"""Integration tests using actual files created during test setup."""
|
|
387
|
+
|
|
388
|
+
@pytest.mark.asyncio
|
|
389
|
+
async def test_convert_real_json_to_parquet(self):
|
|
390
|
+
"""Test converting an actual JSON file to Parquet format."""
|
|
391
|
+
import tempfile
|
|
392
|
+
from pathlib import Path
|
|
393
|
+
|
|
394
|
+
# Arrange - Create a temporary JSON file with test data
|
|
395
|
+
with tempfile.NamedTemporaryFile(mode="w", suffix=".json", delete=False) as f:
|
|
396
|
+
# Write line-delimited JSON as expected by the converter
|
|
397
|
+
f.write(
|
|
398
|
+
'{"id": 1, "name": "Alice", "age": 30, "city": "New York", "active": true}\n'
|
|
399
|
+
)
|
|
400
|
+
f.write(
|
|
401
|
+
'{"id": 2, "name": "Bob", "age": 25, "city": "San Francisco", "active": false}\n'
|
|
402
|
+
)
|
|
403
|
+
f.write(
|
|
404
|
+
'{"id": 3, "name": "Charlie", "age": 35, "city": "Chicago", "active": true}\n'
|
|
405
|
+
)
|
|
406
|
+
json_file_path = f.name
|
|
407
|
+
|
|
408
|
+
try:
|
|
409
|
+
# Act - Convert JSON to Parquet
|
|
410
|
+
result = await convert_data_files([json_file_path], FileType.PARQUET)
|
|
411
|
+
|
|
412
|
+
# Assert - Check conversion succeeded
|
|
413
|
+
assert len(result) == 1
|
|
414
|
+
parquet_file = Path(result[0])
|
|
415
|
+
assert parquet_file.exists()
|
|
416
|
+
assert parquet_file.suffix == ".parquet"
|
|
417
|
+
|
|
418
|
+
# Verify parquet file has data by reading it back
|
|
419
|
+
df = pd.read_parquet(parquet_file)
|
|
420
|
+
assert len(df) == 3 # Should have 3 rows from JSON
|
|
421
|
+
assert "id" in df.columns
|
|
422
|
+
assert "name" in df.columns
|
|
423
|
+
expected_names = {"Alice", "Bob", "Charlie"}
|
|
424
|
+
actual_names = set(df["name"].values)
|
|
425
|
+
assert actual_names == expected_names
|
|
426
|
+
|
|
427
|
+
# Cleanup converted file
|
|
428
|
+
parquet_file.unlink()
|
|
429
|
+
|
|
430
|
+
finally:
|
|
431
|
+
# Cleanup original file
|
|
432
|
+
Path(json_file_path).unlink()
|
|
433
|
+
|
|
434
|
+
@pytest.mark.asyncio
|
|
435
|
+
async def test_convert_real_parquet_to_json(self):
|
|
436
|
+
"""Test converting an actual Parquet file to JSON format."""
|
|
437
|
+
import tempfile
|
|
438
|
+
from pathlib import Path
|
|
439
|
+
|
|
440
|
+
# Arrange - Create a temporary Parquet file with test data
|
|
441
|
+
data = {
|
|
442
|
+
"id": [10, 20, 30],
|
|
443
|
+
"product": ["Laptop", "Mouse", "Keyboard"],
|
|
444
|
+
"price": [999.99, 29.99, 79.99],
|
|
445
|
+
"in_stock": [True, False, True],
|
|
446
|
+
}
|
|
447
|
+
df = pd.DataFrame(data)
|
|
448
|
+
|
|
449
|
+
with tempfile.NamedTemporaryFile(suffix=".parquet", delete=False) as f:
|
|
450
|
+
parquet_file_path = f.name
|
|
451
|
+
|
|
452
|
+
# Save DataFrame to the temporary parquet file
|
|
453
|
+
df.to_parquet(parquet_file_path, index=False)
|
|
454
|
+
|
|
455
|
+
try:
|
|
456
|
+
# Act - Convert Parquet to JSON
|
|
457
|
+
result = await convert_data_files([parquet_file_path], FileType.JSON)
|
|
458
|
+
|
|
459
|
+
# Assert - Check conversion succeeded
|
|
460
|
+
assert len(result) == 1
|
|
461
|
+
json_file = Path(result[0])
|
|
462
|
+
assert json_file.exists()
|
|
463
|
+
assert json_file.suffix == ".json"
|
|
464
|
+
|
|
465
|
+
# Verify JSON file has data by reading it back
|
|
466
|
+
df_result = pd.read_json(json_file, orient="records", lines=True)
|
|
467
|
+
assert len(df_result) == 3 # Should have 3 rows from Parquet
|
|
468
|
+
assert "id" in df_result.columns
|
|
469
|
+
assert "product" in df_result.columns
|
|
470
|
+
expected_products = {"Laptop", "Mouse", "Keyboard"}
|
|
471
|
+
actual_products = set(df_result["product"].values)
|
|
472
|
+
assert actual_products == expected_products
|
|
473
|
+
|
|
474
|
+
# Cleanup converted file
|
|
475
|
+
json_file.unlink()
|
|
476
|
+
|
|
477
|
+
finally:
|
|
478
|
+
# Cleanup original file
|
|
479
|
+
Path(parquet_file_path).unlink()
|