synapse-sdk 1.0.0a35__py3-none-any.whl → 2025.11.7__py3-none-any.whl
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.
Potentially problematic release.
This version of synapse-sdk might be problematic. Click here for more details.
- synapse_sdk/__init__.py +24 -0
- synapse_sdk/cli/__init__.py +308 -5
- synapse_sdk/cli/alias/utils.py +1 -1
- synapse_sdk/cli/code_server.py +687 -0
- synapse_sdk/cli/config.py +440 -0
- synapse_sdk/cli/devtools.py +90 -0
- synapse_sdk/cli/plugin/publish.py +23 -15
- synapse_sdk/clients/agent/__init__.py +9 -3
- synapse_sdk/clients/agent/container.py +133 -0
- synapse_sdk/clients/agent/core.py +19 -0
- synapse_sdk/clients/agent/ray.py +298 -9
- synapse_sdk/clients/backend/__init__.py +28 -12
- synapse_sdk/clients/backend/annotation.py +9 -1
- synapse_sdk/clients/backend/core.py +31 -4
- synapse_sdk/clients/backend/data_collection.py +186 -0
- synapse_sdk/clients/backend/hitl.py +1 -1
- synapse_sdk/clients/backend/integration.py +4 -3
- synapse_sdk/clients/backend/ml.py +1 -1
- synapse_sdk/clients/backend/models.py +35 -1
- synapse_sdk/clients/base.py +309 -36
- synapse_sdk/clients/ray/serve.py +2 -0
- synapse_sdk/devtools/__init__.py +0 -0
- synapse_sdk/devtools/config.py +94 -0
- synapse_sdk/devtools/docs/.gitignore +20 -0
- synapse_sdk/devtools/docs/README.md +41 -0
- synapse_sdk/devtools/docs/blog/2019-05-28-first-blog-post.md +12 -0
- synapse_sdk/devtools/docs/blog/2019-05-29-long-blog-post.md +44 -0
- synapse_sdk/devtools/docs/blog/2021-08-01-mdx-blog-post.mdx +24 -0
- synapse_sdk/devtools/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg +0 -0
- synapse_sdk/devtools/docs/blog/2021-08-26-welcome/index.md +29 -0
- synapse_sdk/devtools/docs/blog/authors.yml +25 -0
- synapse_sdk/devtools/docs/blog/tags.yml +19 -0
- synapse_sdk/devtools/docs/docs/api/clients/agent.md +43 -0
- synapse_sdk/devtools/docs/docs/api/clients/annotation-mixin.md +378 -0
- synapse_sdk/devtools/docs/docs/api/clients/backend.md +420 -0
- synapse_sdk/devtools/docs/docs/api/clients/base.md +257 -0
- synapse_sdk/devtools/docs/docs/api/clients/core-mixin.md +477 -0
- synapse_sdk/devtools/docs/docs/api/clients/data-collection-mixin.md +422 -0
- synapse_sdk/devtools/docs/docs/api/clients/hitl-mixin.md +554 -0
- synapse_sdk/devtools/docs/docs/api/clients/index.md +391 -0
- synapse_sdk/devtools/docs/docs/api/clients/integration-mixin.md +571 -0
- synapse_sdk/devtools/docs/docs/api/clients/ml-mixin.md +578 -0
- synapse_sdk/devtools/docs/docs/api/clients/ray.md +342 -0
- synapse_sdk/devtools/docs/docs/api/index.md +52 -0
- synapse_sdk/devtools/docs/docs/api/plugins/categories.md +43 -0
- synapse_sdk/devtools/docs/docs/api/plugins/models.md +114 -0
- synapse_sdk/devtools/docs/docs/api/plugins/utils.md +328 -0
- synapse_sdk/devtools/docs/docs/categories.md +0 -0
- synapse_sdk/devtools/docs/docs/cli-usage.md +280 -0
- synapse_sdk/devtools/docs/docs/concepts/index.md +38 -0
- synapse_sdk/devtools/docs/docs/configuration.md +83 -0
- synapse_sdk/devtools/docs/docs/contributing.md +306 -0
- synapse_sdk/devtools/docs/docs/examples/index.md +29 -0
- synapse_sdk/devtools/docs/docs/faq.md +179 -0
- synapse_sdk/devtools/docs/docs/features/converters/index.md +455 -0
- synapse_sdk/devtools/docs/docs/features/index.md +24 -0
- synapse_sdk/devtools/docs/docs/features/utils/file.md +415 -0
- synapse_sdk/devtools/docs/docs/features/utils/network.md +378 -0
- synapse_sdk/devtools/docs/docs/features/utils/storage.md +57 -0
- synapse_sdk/devtools/docs/docs/features/utils/types.md +51 -0
- synapse_sdk/devtools/docs/docs/installation.md +94 -0
- synapse_sdk/devtools/docs/docs/introduction.md +47 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/neural-net-plugins/train-action-overview.md +814 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
- synapse_sdk/devtools/docs/docs/plugins/export-plugins.md +1092 -0
- synapse_sdk/devtools/docs/docs/plugins/plugins.md +852 -0
- synapse_sdk/devtools/docs/docs/quickstart.md +78 -0
- synapse_sdk/devtools/docs/docs/troubleshooting.md +519 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/_category_.json +8 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/congratulations.md +23 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-blog-post.md +34 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-document.md +57 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-page.md +43 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/deploy-your-site.md +31 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/markdown-features.mdx +152 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/_category_.json +7 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/img/docsVersionDropdown.png +0 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/img/localeDropdown.png +0 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/manage-docs-versions.md +55 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/translate-your-site.md +88 -0
- synapse_sdk/devtools/docs/docusaurus.config.ts +148 -0
- synapse_sdk/devtools/docs/i18n/ko/code.json +325 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/agent.md +43 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/annotation-mixin.md +289 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/backend.md +420 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/base.md +257 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/core-mixin.md +417 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/data-collection-mixin.md +356 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/hitl-mixin.md +192 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/index.md +391 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/integration-mixin.md +479 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ml-mixin.md +284 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ray.md +342 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/index.md +52 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/plugins/models.md +114 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/categories.md +0 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/cli-usage.md +280 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/concepts/index.md +38 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/configuration.md +83 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/contributing.md +306 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/examples/index.md +29 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/faq.md +179 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/converters/index.md +30 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/index.md +24 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/file.md +415 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/network.md +378 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/storage.md +60 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/types.md +51 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/installation.md +94 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/introduction.md +47 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/neural-net-plugins/train-action-overview.md +815 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/export-plugins.md +1092 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/plugins.md +117 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/quickstart.md +78 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/troubleshooting.md +519 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current.json +34 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/footer.json +42 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/navbar.json +18 -0
- synapse_sdk/devtools/docs/package-lock.json +18784 -0
- synapse_sdk/devtools/docs/package.json +48 -0
- synapse_sdk/devtools/docs/sidebars.ts +122 -0
- synapse_sdk/devtools/docs/src/components/HomepageFeatures/index.tsx +71 -0
- synapse_sdk/devtools/docs/src/components/HomepageFeatures/styles.module.css +11 -0
- synapse_sdk/devtools/docs/src/css/custom.css +30 -0
- synapse_sdk/devtools/docs/src/pages/index.module.css +23 -0
- synapse_sdk/devtools/docs/src/pages/index.tsx +21 -0
- synapse_sdk/devtools/docs/src/pages/markdown-page.md +7 -0
- synapse_sdk/devtools/docs/static/.nojekyll +0 -0
- synapse_sdk/devtools/docs/static/img/docusaurus-social-card.jpg +0 -0
- synapse_sdk/devtools/docs/static/img/docusaurus.png +0 -0
- synapse_sdk/devtools/docs/static/img/favicon.ico +0 -0
- synapse_sdk/devtools/docs/static/img/logo.png +0 -0
- synapse_sdk/devtools/docs/static/img/undraw_docusaurus_mountain.svg +171 -0
- synapse_sdk/devtools/docs/static/img/undraw_docusaurus_react.svg +170 -0
- synapse_sdk/devtools/docs/static/img/undraw_docusaurus_tree.svg +40 -0
- synapse_sdk/devtools/docs/tsconfig.json +8 -0
- synapse_sdk/devtools/server.py +41 -0
- synapse_sdk/devtools/streamlit_app/__init__.py +5 -0
- synapse_sdk/devtools/streamlit_app/app.py +128 -0
- synapse_sdk/devtools/streamlit_app/services/__init__.py +11 -0
- synapse_sdk/devtools/streamlit_app/services/job_service.py +233 -0
- synapse_sdk/devtools/streamlit_app/services/plugin_service.py +236 -0
- synapse_sdk/devtools/streamlit_app/services/serve_service.py +95 -0
- synapse_sdk/devtools/streamlit_app/ui/__init__.py +15 -0
- synapse_sdk/devtools/streamlit_app/ui/config_tab.py +76 -0
- synapse_sdk/devtools/streamlit_app/ui/deployment_tab.py +66 -0
- synapse_sdk/devtools/streamlit_app/ui/http_tab.py +125 -0
- synapse_sdk/devtools/streamlit_app/ui/jobs_tab.py +573 -0
- synapse_sdk/devtools/streamlit_app/ui/serve_tab.py +346 -0
- synapse_sdk/devtools/streamlit_app/ui/status_bar.py +118 -0
- synapse_sdk/devtools/streamlit_app/utils/__init__.py +40 -0
- synapse_sdk/devtools/streamlit_app/utils/json_viewer.py +197 -0
- synapse_sdk/devtools/streamlit_app/utils/log_formatter.py +38 -0
- synapse_sdk/devtools/streamlit_app/utils/styles.py +241 -0
- synapse_sdk/devtools/streamlit_app/utils/ui_components.py +289 -0
- synapse_sdk/devtools/streamlit_app.py +10 -0
- synapse_sdk/loggers.py +65 -7
- synapse_sdk/plugins/README.md +1340 -0
- synapse_sdk/plugins/categories/base.py +73 -11
- synapse_sdk/plugins/categories/data_validation/actions/validation.py +72 -0
- synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +33 -5
- synapse_sdk/plugins/categories/export/actions/__init__.py +3 -0
- synapse_sdk/plugins/categories/export/actions/export/__init__.py +28 -0
- synapse_sdk/plugins/categories/export/actions/export/action.py +165 -0
- synapse_sdk/plugins/categories/export/actions/export/enums.py +113 -0
- synapse_sdk/plugins/categories/export/actions/export/exceptions.py +53 -0
- synapse_sdk/plugins/categories/export/actions/export/models.py +74 -0
- synapse_sdk/plugins/categories/export/actions/export/run.py +195 -0
- synapse_sdk/plugins/categories/export/actions/{export.py → export/utils.py} +47 -82
- synapse_sdk/plugins/categories/export/templates/config.yaml +19 -1
- synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +390 -0
- synapse_sdk/plugins/categories/export/templates/plugin/export.py +153 -129
- synapse_sdk/plugins/categories/neural_net/actions/deployment.py +9 -62
- synapse_sdk/plugins/categories/neural_net/actions/train.py +1062 -32
- synapse_sdk/plugins/categories/neural_net/actions/tune.py +534 -0
- synapse_sdk/plugins/categories/neural_net/templates/config.yaml +27 -5
- synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +26 -10
- synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +4 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation/__init__.py +3 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation/action.py +10 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/__init__.py +28 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/action.py +145 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/enums.py +269 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/exceptions.py +14 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/factory.py +76 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/models.py +97 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/orchestrator.py +250 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/run.py +64 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/__init__.py +17 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/annotation.py +287 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/base.py +170 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/extraction.py +83 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/metrics.py +87 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/preprocessor.py +127 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/validation.py +143 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task.py +966 -0
- synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +19 -0
- synapse_sdk/plugins/categories/pre_annotation/templates/plugin/to_task.py +40 -0
- synapse_sdk/plugins/categories/upload/actions/upload/__init__.py +19 -0
- synapse_sdk/plugins/categories/upload/actions/upload/action.py +232 -0
- synapse_sdk/plugins/categories/upload/actions/upload/context.py +185 -0
- synapse_sdk/plugins/categories/upload/actions/upload/enums.py +471 -0
- synapse_sdk/plugins/categories/upload/actions/upload/exceptions.py +36 -0
- synapse_sdk/plugins/categories/upload/actions/upload/factory.py +138 -0
- synapse_sdk/plugins/categories/upload/actions/upload/models.py +203 -0
- synapse_sdk/plugins/categories/upload/actions/upload/orchestrator.py +183 -0
- synapse_sdk/plugins/categories/upload/actions/upload/registry.py +113 -0
- synapse_sdk/plugins/categories/upload/actions/upload/run.py +179 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/base.py +107 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/cleanup.py +62 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/collection.py +63 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/generate.py +84 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/initialize.py +82 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/metadata.py +235 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/organize.py +203 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/upload.py +97 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/validate.py +71 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/base.py +82 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/batch.py +39 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/single.py +29 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/flat.py +258 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/recursive.py +281 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/excel.py +174 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/none.py +16 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/sync.py +84 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/default.py +60 -0
- synapse_sdk/plugins/categories/upload/actions/upload/utils.py +250 -0
- synapse_sdk/plugins/categories/upload/templates/README.md +470 -0
- synapse_sdk/plugins/categories/upload/templates/config.yaml +29 -2
- synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +294 -0
- synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +88 -30
- synapse_sdk/plugins/models.py +122 -16
- synapse_sdk/plugins/templates/plugin-config-schema.json +406 -0
- synapse_sdk/plugins/templates/schema.json +491 -0
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +1 -1
- synapse_sdk/plugins/utils/__init__.py +46 -0
- synapse_sdk/plugins/utils/actions.py +119 -0
- synapse_sdk/plugins/utils/config.py +203 -0
- synapse_sdk/plugins/{utils.py → utils/legacy.py} +26 -46
- synapse_sdk/plugins/utils/ray_gcs.py +66 -0
- synapse_sdk/plugins/utils/registry.py +58 -0
- synapse_sdk/shared/__init__.py +25 -0
- synapse_sdk/shared/enums.py +93 -0
- synapse_sdk/utils/converters/__init__.py +240 -0
- synapse_sdk/utils/converters/coco/__init__.py +0 -0
- synapse_sdk/utils/converters/coco/from_dm.py +322 -0
- synapse_sdk/utils/converters/coco/to_dm.py +215 -0
- synapse_sdk/utils/converters/dm/__init__.py +56 -0
- synapse_sdk/utils/converters/dm/from_v1.py +627 -0
- synapse_sdk/utils/converters/dm/to_v1.py +367 -0
- synapse_sdk/utils/converters/pascal/__init__.py +0 -0
- synapse_sdk/utils/converters/pascal/from_dm.py +244 -0
- synapse_sdk/utils/converters/pascal/to_dm.py +214 -0
- synapse_sdk/utils/converters/yolo/__init__.py +0 -0
- synapse_sdk/utils/converters/yolo/from_dm.py +384 -0
- synapse_sdk/utils/converters/yolo/to_dm.py +267 -0
- synapse_sdk/utils/dataset.py +46 -0
- synapse_sdk/utils/encryption.py +158 -0
- synapse_sdk/utils/file/__init__.py +39 -0
- synapse_sdk/utils/file/archive.py +32 -0
- synapse_sdk/utils/file/checksum.py +56 -0
- synapse_sdk/utils/file/chunking.py +31 -0
- synapse_sdk/utils/file/download.py +385 -0
- synapse_sdk/utils/file/encoding.py +40 -0
- synapse_sdk/utils/file/io.py +22 -0
- synapse_sdk/utils/file/video/__init__.py +29 -0
- synapse_sdk/utils/file/video/transcode.py +307 -0
- synapse_sdk/utils/{file.py → file.py.backup} +84 -2
- synapse_sdk/utils/http.py +138 -0
- synapse_sdk/utils/network.py +293 -0
- synapse_sdk/utils/storage/__init__.py +36 -2
- synapse_sdk/utils/storage/providers/__init__.py +141 -0
- synapse_sdk/utils/storage/providers/file_system.py +134 -0
- synapse_sdk/utils/storage/providers/http.py +190 -0
- synapse_sdk/utils/storage/providers/s3.py +54 -6
- synapse_sdk/utils/storage/providers/sftp.py +31 -0
- synapse_sdk/utils/storage/registry.py +6 -0
- synapse_sdk-2025.11.7.dist-info/METADATA +122 -0
- synapse_sdk-2025.11.7.dist-info/RECORD +386 -0
- {synapse_sdk-1.0.0a35.dist-info → synapse_sdk-2025.11.7.dist-info}/WHEEL +1 -1
- synapse_sdk/clients/backend/dataset.py +0 -102
- synapse_sdk/plugins/categories/upload/actions/upload.py +0 -293
- synapse_sdk-1.0.0a35.dist-info/METADATA +0 -47
- synapse_sdk-1.0.0a35.dist-info/RECORD +0 -137
- {synapse_sdk-1.0.0a35.dist-info → synapse_sdk-2025.11.7.dist-info}/entry_points.txt +0 -0
- {synapse_sdk-1.0.0a35.dist-info → synapse_sdk-2025.11.7.dist-info}/licenses/LICENSE +0 -0
- {synapse_sdk-1.0.0a35.dist-info → synapse_sdk-2025.11.7.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
from typing import Annotated, Literal
|
|
2
|
+
|
|
3
|
+
from pydantic import AfterValidator, BaseModel, field_validator
|
|
4
|
+
from pydantic_core import PydanticCustomError
|
|
5
|
+
|
|
6
|
+
from synapse_sdk.clients.exceptions import ClientError
|
|
7
|
+
from synapse_sdk.i18n import gettext as _
|
|
8
|
+
from synapse_sdk.utils.pydantic.validators import non_blank
|
|
9
|
+
|
|
10
|
+
from .utils import TargetHandlerFactory
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ExportParams(BaseModel):
|
|
14
|
+
"""Export action parameter validation model.
|
|
15
|
+
|
|
16
|
+
Defines and validates all parameters required for export operations.
|
|
17
|
+
Uses Pydantic for type validation and custom validators to ensure
|
|
18
|
+
storage and filter resources exist before processing.
|
|
19
|
+
|
|
20
|
+
Attributes:
|
|
21
|
+
name (str): Human-readable name for the export operation
|
|
22
|
+
description (str | None): Optional description of the export
|
|
23
|
+
storage (int): Storage ID where exported data will be saved
|
|
24
|
+
save_original_file (bool): Whether to save the original file
|
|
25
|
+
path (str): File system path where exported data will be saved
|
|
26
|
+
target (str): The target source to export data from (assignment, ground_truth, task)
|
|
27
|
+
filter (dict): Filter criteria to apply when retrieving data
|
|
28
|
+
extra_params (dict | None): Additional parameters for export customization.
|
|
29
|
+
Example: {"include_metadata": True, "compression": "gzip"}
|
|
30
|
+
|
|
31
|
+
Validation:
|
|
32
|
+
- name: Must be non-blank after validation
|
|
33
|
+
- storage: Must exist and be accessible via client API
|
|
34
|
+
- target: Must be one of the supported target types
|
|
35
|
+
- filter: Must be valid for the specified target type
|
|
36
|
+
|
|
37
|
+
Example:
|
|
38
|
+
>>> params = ExportParams(
|
|
39
|
+
... name="Assignment Export",
|
|
40
|
+
... storage=1,
|
|
41
|
+
... path="/exports/assignments",
|
|
42
|
+
... target="assignment",
|
|
43
|
+
... filter={"project": 123}
|
|
44
|
+
... )
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
name: Annotated[str, AfterValidator(non_blank)]
|
|
48
|
+
description: str | None = None
|
|
49
|
+
storage: int
|
|
50
|
+
save_original_file: bool = True
|
|
51
|
+
path: str
|
|
52
|
+
target: Literal['assignment', 'ground_truth', 'task']
|
|
53
|
+
filter: dict
|
|
54
|
+
extra_params: dict | None = None
|
|
55
|
+
|
|
56
|
+
@field_validator('storage')
|
|
57
|
+
@staticmethod
|
|
58
|
+
def check_storage_exists(value, info):
|
|
59
|
+
action = info.context['action']
|
|
60
|
+
client = action.client
|
|
61
|
+
try:
|
|
62
|
+
client.get_storage(value)
|
|
63
|
+
except ClientError:
|
|
64
|
+
raise PydanticCustomError('client_error', _('Unable to get storage from Synapse backend.'))
|
|
65
|
+
return value
|
|
66
|
+
|
|
67
|
+
@field_validator('filter')
|
|
68
|
+
@staticmethod
|
|
69
|
+
def check_filter_by_target(value, info):
|
|
70
|
+
action = info.context['action']
|
|
71
|
+
client = action.client
|
|
72
|
+
target = action.params['target']
|
|
73
|
+
handler = TargetHandlerFactory.get_handler(target)
|
|
74
|
+
return handler.validate_filter(value, client)
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
from synapse_sdk.plugins.models import Run
|
|
8
|
+
from synapse_sdk.shared.enums import Context
|
|
9
|
+
|
|
10
|
+
from .enums import LOG_MESSAGES, ExportStatus, LogCode
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ExportRun(Run):
|
|
14
|
+
"""Export-specific run management class.
|
|
15
|
+
|
|
16
|
+
Extends the base Run class with export-specific logging capabilities
|
|
17
|
+
and event tracking. Provides type-safe logging using LogCode enums
|
|
18
|
+
and specialized methods for tracking export progress.
|
|
19
|
+
|
|
20
|
+
Manages logging for export events, data files, and export targets
|
|
21
|
+
throughout the export lifecycle. Each log entry includes status,
|
|
22
|
+
timestamps, and relevant metadata.
|
|
23
|
+
|
|
24
|
+
Attributes:
|
|
25
|
+
Inherits all attributes from base Run class plus export-specific
|
|
26
|
+
logging methods and nested model classes for structured logging.
|
|
27
|
+
|
|
28
|
+
Example:
|
|
29
|
+
>>> run = ExportRun(job_id, context)
|
|
30
|
+
>>> run.log_message_with_code(LogCode.EXPORT_STARTED)
|
|
31
|
+
>>> run.log_export_event(LogCode.RESULTS_RETRIEVED, target_id, count)
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
class ExportEventLog(BaseModel):
|
|
35
|
+
"""Model for export event log entries.
|
|
36
|
+
|
|
37
|
+
Records significant events during export processing with
|
|
38
|
+
target identification and status information.
|
|
39
|
+
|
|
40
|
+
Attributes:
|
|
41
|
+
target_id (int): The ID of the export target
|
|
42
|
+
info (str | None): Optional additional information
|
|
43
|
+
status (Context): Event status/severity level
|
|
44
|
+
created (str): Timestamp when event occurred
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
target_id: int
|
|
48
|
+
info: str | None = None
|
|
49
|
+
status: Context
|
|
50
|
+
created: str
|
|
51
|
+
|
|
52
|
+
class DataFileLog(BaseModel):
|
|
53
|
+
"""Model for data file export log entries.
|
|
54
|
+
|
|
55
|
+
Tracks the export status of individual data files during
|
|
56
|
+
export operations.
|
|
57
|
+
|
|
58
|
+
Attributes:
|
|
59
|
+
target_id (int): The ID of the target being exported
|
|
60
|
+
data_file_info (str | None): JSON information about the data file
|
|
61
|
+
status (ExportStatus): Export status (SUCCESS/FAILED/STAND_BY)
|
|
62
|
+
error (str | None): Error message if export failed
|
|
63
|
+
created (str): Timestamp when log entry was created
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
target_id: int
|
|
67
|
+
data_file_info: str | None
|
|
68
|
+
status: ExportStatus
|
|
69
|
+
error: str | None = None
|
|
70
|
+
created: str
|
|
71
|
+
|
|
72
|
+
class MetricsRecord(BaseModel):
|
|
73
|
+
"""Model for export metrics tracking.
|
|
74
|
+
|
|
75
|
+
Records count-based metrics for monitoring export
|
|
76
|
+
progress and success rates.
|
|
77
|
+
|
|
78
|
+
Attributes:
|
|
79
|
+
stand_by (int): Number of items waiting to be processed
|
|
80
|
+
failed (int): Number of items that failed processing
|
|
81
|
+
success (int): Number of items successfully processed
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
stand_by: int
|
|
85
|
+
failed: int
|
|
86
|
+
success: int
|
|
87
|
+
|
|
88
|
+
def log_message_with_code(self, code: LogCode, *args, level: Optional[Context] = None):
|
|
89
|
+
"""Log message using predefined code with type safety.
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
code (LogCode): The log message code
|
|
93
|
+
*args: Arguments to format the message
|
|
94
|
+
level (Context | None): Optional context level override
|
|
95
|
+
"""
|
|
96
|
+
if code not in LOG_MESSAGES:
|
|
97
|
+
self.log_message(f'Unknown log code: {code}')
|
|
98
|
+
return
|
|
99
|
+
|
|
100
|
+
log_config = LOG_MESSAGES[code]
|
|
101
|
+
message = log_config['message'].format(*args) if args else log_config['message']
|
|
102
|
+
log_level = level or log_config['level'] or Context.INFO
|
|
103
|
+
|
|
104
|
+
# Always call log_message for basic logging
|
|
105
|
+
if log_level:
|
|
106
|
+
self.log_message(message, context=log_level.value)
|
|
107
|
+
else:
|
|
108
|
+
self.log_message(message)
|
|
109
|
+
|
|
110
|
+
def log_file(
|
|
111
|
+
self, log_type: str, target_id: int, data_file_info: dict, status: ExportStatus, error: str | None = None
|
|
112
|
+
):
|
|
113
|
+
"""Log export file information.
|
|
114
|
+
|
|
115
|
+
Args:
|
|
116
|
+
log_type (str): The type of log ('export_data_file' or 'export_original_file').
|
|
117
|
+
target_id (int): The ID of the data file.
|
|
118
|
+
data_file_info (dict): The JSON info of the data file.
|
|
119
|
+
status (ExportStatus): The status of the data file.
|
|
120
|
+
error (str | None): The error message, if any.
|
|
121
|
+
"""
|
|
122
|
+
now = datetime.now().isoformat()
|
|
123
|
+
self.log(
|
|
124
|
+
log_type,
|
|
125
|
+
self.DataFileLog(
|
|
126
|
+
target_id=target_id,
|
|
127
|
+
data_file_info=json.dumps(data_file_info),
|
|
128
|
+
status=status.value,
|
|
129
|
+
error=error,
|
|
130
|
+
created=now,
|
|
131
|
+
).model_dump(),
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
def log_export_event(self, code: LogCode, target_id: int, *args, level: Context | None = None):
|
|
135
|
+
"""Log export event using predefined code.
|
|
136
|
+
|
|
137
|
+
Args:
|
|
138
|
+
code (str): The log message code.
|
|
139
|
+
target_id (int): The ID of the export target.
|
|
140
|
+
*args: Arguments to format the message.
|
|
141
|
+
level (Context | None): Optional context level override.
|
|
142
|
+
"""
|
|
143
|
+
# Call log_message_with_code to handle the basic logging
|
|
144
|
+
self.log_message_with_code(code, *args, level=level)
|
|
145
|
+
|
|
146
|
+
# Also log the event for export-specific tracking
|
|
147
|
+
if code not in LOG_MESSAGES:
|
|
148
|
+
now = datetime.now().isoformat()
|
|
149
|
+
self.log(
|
|
150
|
+
'export_event',
|
|
151
|
+
self.ExportEventLog(
|
|
152
|
+
target_id=target_id, info=f'Unknown log code: {code}', status=Context.DANGER, created=now
|
|
153
|
+
).model_dump(),
|
|
154
|
+
)
|
|
155
|
+
return
|
|
156
|
+
|
|
157
|
+
log_config = LOG_MESSAGES[code]
|
|
158
|
+
message = log_config['message'].format(*args) if args else log_config['message']
|
|
159
|
+
log_level = level or log_config['level'] or Context.INFO
|
|
160
|
+
|
|
161
|
+
now = datetime.now().isoformat()
|
|
162
|
+
self.log(
|
|
163
|
+
'export_event',
|
|
164
|
+
self.ExportEventLog(info=message, status=log_level, target_id=target_id, created=now).model_dump(),
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
def log_metrics(self, record: MetricsRecord, category: str):
|
|
168
|
+
"""Log export metrics.
|
|
169
|
+
|
|
170
|
+
Args:
|
|
171
|
+
record (MetricsRecord): The metrics record to log.
|
|
172
|
+
category (str): The category of the metrics.
|
|
173
|
+
"""
|
|
174
|
+
record = self.MetricsRecord.model_validate(record)
|
|
175
|
+
self.set_metrics(value=record.model_dump(), category=category)
|
|
176
|
+
|
|
177
|
+
def export_log_json_file(
|
|
178
|
+
self,
|
|
179
|
+
target_id: int,
|
|
180
|
+
data_file_info: dict,
|
|
181
|
+
status: ExportStatus = ExportStatus.STAND_BY,
|
|
182
|
+
error: str | None = None,
|
|
183
|
+
):
|
|
184
|
+
"""Log export json data file."""
|
|
185
|
+
self.log_file('export_data_file', target_id, data_file_info, status, error)
|
|
186
|
+
|
|
187
|
+
def export_log_original_file(
|
|
188
|
+
self,
|
|
189
|
+
target_id: int,
|
|
190
|
+
data_file_info: dict,
|
|
191
|
+
status: ExportStatus = ExportStatus.STAND_BY,
|
|
192
|
+
error: str | None = None,
|
|
193
|
+
):
|
|
194
|
+
"""Log export origin data file."""
|
|
195
|
+
self.log_file('export_original_file', target_id, data_file_info, status, error)
|
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any
|
|
3
3
|
|
|
4
|
-
from pydantic import BaseModel, field_validator
|
|
5
4
|
from pydantic_core import PydanticCustomError
|
|
6
5
|
|
|
7
6
|
from synapse_sdk.clients.exceptions import ClientError
|
|
8
7
|
from synapse_sdk.i18n import gettext as _
|
|
9
|
-
from synapse_sdk.plugins.categories.base import Action
|
|
10
|
-
from synapse_sdk.plugins.categories.decorators import register_action
|
|
11
|
-
from synapse_sdk.plugins.enums import PluginCategory, RunMethod
|
|
12
|
-
from synapse_sdk.utils.storage import get_pathlib
|
|
13
8
|
|
|
14
9
|
|
|
15
10
|
class ExportTargetHandler(ABC):
|
|
@@ -66,6 +61,12 @@ class ExportTargetHandler(ABC):
|
|
|
66
61
|
|
|
67
62
|
|
|
68
63
|
class AssignmentExportTargetHandler(ExportTargetHandler):
|
|
64
|
+
"""Handler for assignment target exports.
|
|
65
|
+
|
|
66
|
+
Implements ExportTargetHandler interface for assignment-specific
|
|
67
|
+
export operations including validation, data retrieval, and processing.
|
|
68
|
+
"""
|
|
69
|
+
|
|
69
70
|
def validate_filter(self, value: dict, client: Any):
|
|
70
71
|
if 'project' not in value:
|
|
71
72
|
raise PydanticCustomError('missing_field', _('Project is required for Assignment.'))
|
|
@@ -88,6 +89,12 @@ class AssignmentExportTargetHandler(ExportTargetHandler):
|
|
|
88
89
|
|
|
89
90
|
|
|
90
91
|
class GroundTruthExportTargetHandler(ExportTargetHandler):
|
|
92
|
+
"""Handler for ground truth target exports.
|
|
93
|
+
|
|
94
|
+
Implements ExportTargetHandler interface for ground truth dataset
|
|
95
|
+
export operations including validation, data retrieval, and processing.
|
|
96
|
+
"""
|
|
97
|
+
|
|
91
98
|
def validate_filter(self, value: dict, client: Any):
|
|
92
99
|
if 'ground_truth_dataset_version' not in value:
|
|
93
100
|
raise PydanticCustomError('missing_field', _('Ground Truth dataset version is required.'))
|
|
@@ -107,11 +114,17 @@ class GroundTruthExportTargetHandler(ExportTargetHandler):
|
|
|
107
114
|
yield {
|
|
108
115
|
'data': result['data'],
|
|
109
116
|
'files': result['data_unit']['files'][files_key],
|
|
110
|
-
'id': result['
|
|
117
|
+
'id': result['id'],
|
|
111
118
|
}
|
|
112
119
|
|
|
113
120
|
|
|
114
121
|
class TaskExportTargetHandler(ExportTargetHandler):
|
|
122
|
+
"""Handler for task target exports.
|
|
123
|
+
|
|
124
|
+
Implements ExportTargetHandler interface for task-specific
|
|
125
|
+
export operations including validation, data retrieval, and processing.
|
|
126
|
+
"""
|
|
127
|
+
|
|
115
128
|
def validate_filter(self, value: dict, client: Any):
|
|
116
129
|
if 'project' not in value:
|
|
117
130
|
raise PydanticCustomError('missing_field', _('Project is required for Task.'))
|
|
@@ -122,7 +135,7 @@ class TaskExportTargetHandler(ExportTargetHandler):
|
|
|
122
135
|
return value
|
|
123
136
|
|
|
124
137
|
def get_results(self, client: Any, filters: dict):
|
|
125
|
-
filters['expand'] = 'data_unit'
|
|
138
|
+
filters['expand'] = ['data_unit', 'assignment', 'workshop']
|
|
126
139
|
return client.list_tasks(params=filters, list_all=True)
|
|
127
140
|
|
|
128
141
|
def get_export_item(self, results):
|
|
@@ -136,8 +149,34 @@ class TaskExportTargetHandler(ExportTargetHandler):
|
|
|
136
149
|
|
|
137
150
|
|
|
138
151
|
class TargetHandlerFactory:
|
|
152
|
+
"""Factory class for creating export target handlers.
|
|
153
|
+
|
|
154
|
+
Provides a centralized way to create appropriate target handlers
|
|
155
|
+
based on the target type. Supports assignment, ground_truth, and task targets.
|
|
156
|
+
|
|
157
|
+
Example:
|
|
158
|
+
>>> handler = TargetHandlerFactory.get_handler('assignment')
|
|
159
|
+
>>> isinstance(handler, AssignmentExportTargetHandler)
|
|
160
|
+
True
|
|
161
|
+
"""
|
|
162
|
+
|
|
139
163
|
@staticmethod
|
|
140
164
|
def get_handler(target: str) -> ExportTargetHandler:
|
|
165
|
+
"""Get the appropriate target handler for the given target type.
|
|
166
|
+
|
|
167
|
+
Args:
|
|
168
|
+
target (str): The target type ('assignment', 'ground_truth', 'task')
|
|
169
|
+
|
|
170
|
+
Returns:
|
|
171
|
+
ExportTargetHandler: The appropriate handler instance
|
|
172
|
+
|
|
173
|
+
Raises:
|
|
174
|
+
ValueError: If the target type is not supported
|
|
175
|
+
|
|
176
|
+
Example:
|
|
177
|
+
>>> handler = TargetHandlerFactory.get_handler('assignment')
|
|
178
|
+
>>> handler.validate_filter({'project': 123}, client)
|
|
179
|
+
"""
|
|
141
180
|
if target == 'assignment':
|
|
142
181
|
return AssignmentExportTargetHandler()
|
|
143
182
|
elif target == 'ground_truth':
|
|
@@ -146,77 +185,3 @@ class TargetHandlerFactory:
|
|
|
146
185
|
return TaskExportTargetHandler()
|
|
147
186
|
else:
|
|
148
187
|
raise ValueError(f'Unknown target: {target}')
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
class ExportParams(BaseModel):
|
|
152
|
-
"""
|
|
153
|
-
Parameters for the export action.
|
|
154
|
-
|
|
155
|
-
Attributes:
|
|
156
|
-
storage (int): The storage ID to save the exported data.
|
|
157
|
-
save_original_file (bool): Whether to save the original file.
|
|
158
|
-
path (str): The path to save the exported data.
|
|
159
|
-
target (str): The target source to export data from. (ex. ground_truth, assignment, task)
|
|
160
|
-
filter (dict): The filter criteria to apply.
|
|
161
|
-
"""
|
|
162
|
-
|
|
163
|
-
storage: int
|
|
164
|
-
save_original_file: bool = True
|
|
165
|
-
path: str
|
|
166
|
-
target: Literal['assignment', 'ground_truth', 'task']
|
|
167
|
-
filter: dict
|
|
168
|
-
|
|
169
|
-
@field_validator('storage')
|
|
170
|
-
@staticmethod
|
|
171
|
-
def check_storage_exists(value, info):
|
|
172
|
-
action = info.context['action']
|
|
173
|
-
client = action.client
|
|
174
|
-
try:
|
|
175
|
-
client.get_storage(value)
|
|
176
|
-
except ClientError:
|
|
177
|
-
raise PydanticCustomError('client_error', _('Unable to get storage from Synapse backend.'))
|
|
178
|
-
return value
|
|
179
|
-
|
|
180
|
-
@field_validator('filter')
|
|
181
|
-
@staticmethod
|
|
182
|
-
def check_filter_by_target(value, info):
|
|
183
|
-
action = info.context['action']
|
|
184
|
-
client = action.client
|
|
185
|
-
target = action.params['target']
|
|
186
|
-
handler = TargetHandlerFactory.get_handler(target)
|
|
187
|
-
return handler.validate_filter(value, client)
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
@register_action
|
|
191
|
-
class ExportAction(Action):
|
|
192
|
-
name = 'export'
|
|
193
|
-
category = PluginCategory.EXPORT
|
|
194
|
-
method = RunMethod.JOB
|
|
195
|
-
params_model = ExportParams
|
|
196
|
-
progress_categories = {
|
|
197
|
-
'dataset_conversion': {
|
|
198
|
-
'proportion': 100,
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
def get_filtered_results(self, filters, handler):
|
|
203
|
-
"""Get filtered target results."""
|
|
204
|
-
try:
|
|
205
|
-
result_list = handler.get_results(self.client, filters)
|
|
206
|
-
results = result_list[0]
|
|
207
|
-
count = result_list[1]
|
|
208
|
-
except ClientError:
|
|
209
|
-
raise PydanticCustomError('client_error', _('Unable to get Ground Truth dataset.'))
|
|
210
|
-
return results, count
|
|
211
|
-
|
|
212
|
-
def start(self):
|
|
213
|
-
filters = {'expand': 'data', **self.params['filter']}
|
|
214
|
-
target = self.params['target']
|
|
215
|
-
handler = TargetHandlerFactory.get_handler(target)
|
|
216
|
-
|
|
217
|
-
self.params['results'], self.params['count'] = self.get_filtered_results(filters, handler)
|
|
218
|
-
export_items = handler.get_export_item(self.params['results'])
|
|
219
|
-
|
|
220
|
-
storage = self.client.get_storage(self.params['storage'])
|
|
221
|
-
pathlib_cwd = get_pathlib(storage, self.params['path'])
|
|
222
|
-
return self.entrypoint(self.run, export_items, pathlib_cwd, **self.params)
|
|
@@ -1,3 +1,21 @@
|
|
|
1
1
|
actions:
|
|
2
2
|
export:
|
|
3
|
-
entrypoint: plugin.export.
|
|
3
|
+
entrypoint: plugin.export.Exporter
|
|
4
|
+
# Filter to only export action specific annotation types (e.g., only export image annotations project)
|
|
5
|
+
# Supported types: image, video, audio, text, pcd, prompt
|
|
6
|
+
annotation_types:
|
|
7
|
+
- image
|
|
8
|
+
- video
|
|
9
|
+
- audio
|
|
10
|
+
- text
|
|
11
|
+
- pcd
|
|
12
|
+
- prompt
|
|
13
|
+
|
|
14
|
+
# Filter to only export specific data types (e.g., only export image data)
|
|
15
|
+
# Supported types: image, video, audio, text, pcd
|
|
16
|
+
data_types:
|
|
17
|
+
- image
|
|
18
|
+
- video
|
|
19
|
+
- audio
|
|
20
|
+
- text
|
|
21
|
+
- pcd
|