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,544 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: upload-plugin-overview
|
|
3
|
+
title: Upload Plugin Overview
|
|
4
|
+
sidebar_position: 1
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Upload Plugin Overview
|
|
8
|
+
|
|
9
|
+
Upload plugins provide comprehensive file upload and data ingestion operations for processing files into the Synapse platform with metadata support, security validation, and organized data unit generation.
|
|
10
|
+
|
|
11
|
+
## Quick Overview
|
|
12
|
+
|
|
13
|
+
**Category:** Upload
|
|
14
|
+
**Available Actions:** `upload`
|
|
15
|
+
**Execution Method:** Job-based execution
|
|
16
|
+
|
|
17
|
+
## Key Features
|
|
18
|
+
|
|
19
|
+
- **Multi-Path Mode Support**: Upload files from different locations with individual path settings for each asset
|
|
20
|
+
- **Excel Metadata Integration**: Automatic metadata annotation from Excel files
|
|
21
|
+
- **Flexible File Organization**: Single-path or multi-path modes for different use cases
|
|
22
|
+
- **Batch Processing**: Optimized batch processing for large-scale uploads
|
|
23
|
+
- **Progress Tracking**: Real-time progress updates across workflow stages
|
|
24
|
+
- **Security Validation**: Comprehensive file and Excel security checks
|
|
25
|
+
|
|
26
|
+
## Use Cases
|
|
27
|
+
|
|
28
|
+
- Bulk file uploads with metadata annotation
|
|
29
|
+
- Excel-based metadata mapping and validation
|
|
30
|
+
- Recursive directory processing
|
|
31
|
+
- Type-based file organization
|
|
32
|
+
- Batch data unit creation
|
|
33
|
+
- Multi-source dataset uploads (sensors, cameras, annotations from different locations)
|
|
34
|
+
- Secure file processing with size and content validation
|
|
35
|
+
|
|
36
|
+
## Supported Upload Sources
|
|
37
|
+
|
|
38
|
+
- Local file system paths (files and directories)
|
|
39
|
+
- Recursive directory scanning
|
|
40
|
+
- Excel metadata files for enhanced file annotation
|
|
41
|
+
- Mixed file types with automatic organization
|
|
42
|
+
- Distributed data sources with per-asset path configuration
|
|
43
|
+
|
|
44
|
+
## Configuration Modes
|
|
45
|
+
|
|
46
|
+
### Mode 1: Single Path Mode (Default - `use_single_path: true`)
|
|
47
|
+
|
|
48
|
+
All assets share one base directory. The system expects subdirectories for each file specification.
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"name": "Standard Upload",
|
|
53
|
+
"use_single_path": true,
|
|
54
|
+
"path": "/data/experiment",
|
|
55
|
+
"is_recursive": true,
|
|
56
|
+
"storage": 1,
|
|
57
|
+
"data_collection": 5
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Expected Directory Structure:**
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
/data/experiment/
|
|
65
|
+
├── pcd_1/ # Point clouds
|
|
66
|
+
│ └── *.pcd
|
|
67
|
+
├── image_1/ # Images
|
|
68
|
+
│ └── *.jpg
|
|
69
|
+
└── json_meta_1/ # Metadata
|
|
70
|
+
└── *.json
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Mode 2: Multi-Path Mode (`use_single_path: false`)
|
|
74
|
+
|
|
75
|
+
Each asset has its own path and recursive setting. Perfect for distributed data sources.
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"name": "Multi-Source Upload",
|
|
80
|
+
"use_single_path": false,
|
|
81
|
+
"assets": {
|
|
82
|
+
"pcd_1": {
|
|
83
|
+
"path": "/sensors/lidar/scan_001",
|
|
84
|
+
"is_recursive": false
|
|
85
|
+
},
|
|
86
|
+
"image_1": {
|
|
87
|
+
"path": "/sensors/camera/front",
|
|
88
|
+
"is_recursive": true
|
|
89
|
+
},
|
|
90
|
+
"json_meta_1": {
|
|
91
|
+
"path": "/metadata/annotations",
|
|
92
|
+
"is_recursive": false
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
"storage": 1,
|
|
96
|
+
"data_collection": 5
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Optional File Specs:**
|
|
101
|
+
|
|
102
|
+
In multi-path mode, file specifications can be marked as optional in the data collection's file specification template:
|
|
103
|
+
|
|
104
|
+
- **Required specs** (`is_required: true`): Must have an asset path in the `assets` parameter
|
|
105
|
+
- **Optional specs** (`is_required: false`): Can be omitted from `assets` - the system will skip them
|
|
106
|
+
|
|
107
|
+
Example with optional spec omitted:
|
|
108
|
+
|
|
109
|
+
```json
|
|
110
|
+
{
|
|
111
|
+
"name": "Multi-Source Upload",
|
|
112
|
+
"use_single_path": false,
|
|
113
|
+
"assets": {
|
|
114
|
+
"pcd_1": {"path": "/sensors/lidar", "is_recursive": false},
|
|
115
|
+
"image_1": {"path": "/cameras/front", "is_recursive": true}
|
|
116
|
+
// "json_meta_1" is optional and omitted
|
|
117
|
+
},
|
|
118
|
+
"storage": 1,
|
|
119
|
+
"data_collection": 5
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The system logs: `"Skipping optional spec json_meta_1: no asset path configured"`
|
|
124
|
+
|
|
125
|
+
## Basic Usage
|
|
126
|
+
|
|
127
|
+
### CLI Usage
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# Single path mode (traditional)
|
|
131
|
+
synapse plugin run upload '{
|
|
132
|
+
"name": "Dataset Upload",
|
|
133
|
+
"use_single_path": true,
|
|
134
|
+
"path": "/data/training",
|
|
135
|
+
"is_recursive": true,
|
|
136
|
+
"storage": 1,
|
|
137
|
+
"data_collection": 5
|
|
138
|
+
}'
|
|
139
|
+
|
|
140
|
+
# Multi-path mode (advanced)
|
|
141
|
+
synapse plugin run upload '{
|
|
142
|
+
"name": "Multi-Sensor Upload",
|
|
143
|
+
"use_single_path": false,
|
|
144
|
+
"assets": {
|
|
145
|
+
"lidar": {"path": "/sensors/lidar", "is_recursive": true},
|
|
146
|
+
"camera": {"path": "/sensors/camera", "is_recursive": false}
|
|
147
|
+
},
|
|
148
|
+
"storage": 1,
|
|
149
|
+
"data_collection": 5
|
|
150
|
+
}'
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Python API Usage
|
|
154
|
+
|
|
155
|
+
```python
|
|
156
|
+
from synapse_sdk.plugins.categories.upload.actions.upload.action import UploadAction
|
|
157
|
+
|
|
158
|
+
# Configure upload parameters
|
|
159
|
+
params = {
|
|
160
|
+
"name": "Dataset Upload",
|
|
161
|
+
"use_single_path": true,
|
|
162
|
+
"path": "/data/training_images",
|
|
163
|
+
"is_recursive": True,
|
|
164
|
+
"storage": 1,
|
|
165
|
+
"data_collection": 5,
|
|
166
|
+
"max_file_size_mb": 100
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
action = UploadAction(params=params, plugin_config=plugin_config)
|
|
170
|
+
result = action.start()
|
|
171
|
+
|
|
172
|
+
print(f"Uploaded {result['uploaded_files_count']} files")
|
|
173
|
+
print(f"Generated {result['generated_data_units_count']} data units")
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Configuration Parameters
|
|
177
|
+
|
|
178
|
+
### Required Parameters
|
|
179
|
+
|
|
180
|
+
| Parameter | Type | Description | Example |
|
|
181
|
+
| ----------------- | ----- | ------------------ | ------------- |
|
|
182
|
+
| `name` | `str` | Upload name | `"My Upload"` |
|
|
183
|
+
| `storage` | `int` | Storage ID | `1` |
|
|
184
|
+
| `data_collection` | `int` | Data collection ID | `5` |
|
|
185
|
+
|
|
186
|
+
### Mode-Specific Required Parameters
|
|
187
|
+
|
|
188
|
+
**Single Path Mode** (`use_single_path: true`):
|
|
189
|
+
|
|
190
|
+
- `path` (str): Base directory path
|
|
191
|
+
|
|
192
|
+
**Multi-Path Mode** (`use_single_path: false`):
|
|
193
|
+
|
|
194
|
+
- `assets` (dict): Asset-specific configurations with `path` and `is_recursive` per asset
|
|
195
|
+
|
|
196
|
+
### Optional Parameters
|
|
197
|
+
|
|
198
|
+
| Parameter | Type | Default | Description |
|
|
199
|
+
| ------------------------------- | ------------- | ------- | --------------------------------- |
|
|
200
|
+
| `description` | `str \| None` | `None` | Upload description |
|
|
201
|
+
| `project` | `int \| None` | `None` | Project ID |
|
|
202
|
+
| `use_single_path` | `bool` | `true` | Mode toggle |
|
|
203
|
+
| `is_recursive` | `bool` | `true` | Recursive scan (single path mode) |
|
|
204
|
+
| `excel_metadata_path` | `str \| None` | `None` | Excel metadata file path |
|
|
205
|
+
| `max_file_size_mb` | `int` | `50` | Maximum file size in MB |
|
|
206
|
+
| `creating_data_unit_batch_size` | `int` | `100` | Batch size for data units |
|
|
207
|
+
|
|
208
|
+
## Excel Metadata Support
|
|
209
|
+
|
|
210
|
+
The upload plugin provides advanced Excel metadata processing with flexible header support and comprehensive filename matching capabilities.
|
|
211
|
+
|
|
212
|
+
### Specifying Excel Metadata Files
|
|
213
|
+
|
|
214
|
+
You can provide Excel metadata files using the `excel_metadata_path` parameter. The system supports multiple path resolution strategies:
|
|
215
|
+
|
|
216
|
+
1. **Absolute Path**: Full filesystem path to the Excel file
|
|
217
|
+
2. **Storage-Relative Path**: Path relative to the storage's default directory
|
|
218
|
+
3. **Working Directory-Relative Path**: Path relative to the upload working directory (single-path mode only)
|
|
219
|
+
|
|
220
|
+
**Examples:**
|
|
221
|
+
|
|
222
|
+
```json
|
|
223
|
+
{
|
|
224
|
+
"excel_metadata_path": "/data/metadata.xlsx" // Absolute path
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
```json
|
|
229
|
+
{
|
|
230
|
+
"excel_metadata_path": "metadata.xlsx" // Relative to storage default path
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
```json
|
|
235
|
+
{
|
|
236
|
+
"excel_metadata_path": "metadata/dataset_info.xlsx" // Subdirectory in storage
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Path Resolution Order
|
|
241
|
+
|
|
242
|
+
The system resolves Excel metadata paths in the following order:
|
|
243
|
+
|
|
244
|
+
1. **Absolute path**: If the path starts with `/`, it's treated as an absolute filesystem path
|
|
245
|
+
2. **Storage-relative path**: The path is resolved relative to the storage's default path
|
|
246
|
+
3. **Working directory-relative path** (single-path mode): The path is resolved relative to the current working directory
|
|
247
|
+
|
|
248
|
+
This flexible resolution allows you to store metadata files alongside your data in the configured storage location.
|
|
249
|
+
|
|
250
|
+
### Default Metadata Files
|
|
251
|
+
|
|
252
|
+
If no `excel_metadata_path` is specified, the system automatically searches for default metadata files in the working directory (single-path mode only):
|
|
253
|
+
|
|
254
|
+
- `meta.xlsx` (checked first)
|
|
255
|
+
- `meta.xls` (fallback)
|
|
256
|
+
|
|
257
|
+
**Python Example:**
|
|
258
|
+
|
|
259
|
+
```python
|
|
260
|
+
# Explicit path to Excel metadata
|
|
261
|
+
upload_params = {
|
|
262
|
+
"name": "Upload with Metadata",
|
|
263
|
+
"path": "/data/files",
|
|
264
|
+
"storage": 1,
|
|
265
|
+
"data_collection": 5,
|
|
266
|
+
"excel_metadata_path": "metadata/dataset_info.xlsx" // Relative to storage
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
# Using default metadata file (meta.xlsx in working directory)
|
|
270
|
+
upload_params = {
|
|
271
|
+
"name": "Upload with Default Metadata",
|
|
272
|
+
"path": "/data/files",
|
|
273
|
+
"storage": 1,
|
|
274
|
+
"data_collection": 5
|
|
275
|
+
// No excel_metadata_path specified - will use meta.xlsx if present
|
|
276
|
+
}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### Excel Format
|
|
280
|
+
|
|
281
|
+
Both header formats are supported (case-insensitive):
|
|
282
|
+
|
|
283
|
+
**Option 1: "filename" header**
|
|
284
|
+
| filename | category | description | custom_field |
|
|
285
|
+
|----------|----------|-------------|--------------|
|
|
286
|
+
| image1.jpg | nature | Mountain landscape | high_res |
|
|
287
|
+
| image2.png | urban | City skyline | processed |
|
|
288
|
+
|
|
289
|
+
**Option 2: "filename" header**
|
|
290
|
+
| file_name | category | description | custom_field |
|
|
291
|
+
|-----------|----------|-------------|--------------|
|
|
292
|
+
| image1.jpg | nature | Mountain landscape | high_res |
|
|
293
|
+
| image2.png | urban | City skyline | processed |
|
|
294
|
+
|
|
295
|
+
### Filename Matching
|
|
296
|
+
|
|
297
|
+
The system uses a 5-tier priority matching algorithm:
|
|
298
|
+
|
|
299
|
+
1. **Exact stem match** (highest priority): `image1` matches `image1.jpg`
|
|
300
|
+
2. **Exact filename match**: `image1.jpg` matches `image1.jpg`
|
|
301
|
+
3. **Metadata key stem match**: `path/image1.ext` stem matches `image1`
|
|
302
|
+
4. **Partial path matching**: `/uploads/image1.jpg` contains `image1`
|
|
303
|
+
5. **Full path matching**: Complete path matching for complex structures
|
|
304
|
+
|
|
305
|
+
### Security Validation
|
|
306
|
+
|
|
307
|
+
Excel files undergo security validation:
|
|
308
|
+
|
|
309
|
+
```python
|
|
310
|
+
# Default security limits
|
|
311
|
+
max_file_size_mb: 10 # File size limit
|
|
312
|
+
max_rows: 100000 # Row count limit
|
|
313
|
+
max_columns: 50 # Column count limit
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### Configuration
|
|
317
|
+
|
|
318
|
+
Configure Excel security in `config.yaml`:
|
|
319
|
+
|
|
320
|
+
```yaml
|
|
321
|
+
actions:
|
|
322
|
+
upload:
|
|
323
|
+
excel_config:
|
|
324
|
+
max_file_size_mb: 10
|
|
325
|
+
max_rows: 100000
|
|
326
|
+
max_columns: 50
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
## Progress Tracking
|
|
330
|
+
|
|
331
|
+
The upload action tracks progress across three main phases:
|
|
332
|
+
|
|
333
|
+
| Category | Proportion | Description |
|
|
334
|
+
| --------------------- | ---------- | ----------------------------------- |
|
|
335
|
+
| `analyze_collection` | 2% | Parameter validation and setup |
|
|
336
|
+
| `upload_data_files` | 38% | File upload processing |
|
|
337
|
+
| `generate_data_units` | 60% | Data unit creation and finalization |
|
|
338
|
+
|
|
339
|
+
## Common Use Cases
|
|
340
|
+
|
|
341
|
+
### 1. Simple Dataset Upload
|
|
342
|
+
|
|
343
|
+
```json
|
|
344
|
+
{
|
|
345
|
+
"name": "Training Dataset",
|
|
346
|
+
"use_single_path": true,
|
|
347
|
+
"path": "/datasets/training",
|
|
348
|
+
"is_recursive": true,
|
|
349
|
+
"storage": 1,
|
|
350
|
+
"data_collection": 2
|
|
351
|
+
}
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### 2. Multi-Source Sensor Data
|
|
355
|
+
|
|
356
|
+
```json
|
|
357
|
+
{
|
|
358
|
+
"name": "Multi-Camera Dataset",
|
|
359
|
+
"use_single_path": false,
|
|
360
|
+
"assets": {
|
|
361
|
+
"front_camera": { "path": "/cameras/front", "is_recursive": true },
|
|
362
|
+
"rear_camera": { "path": "/cameras/rear", "is_recursive": true },
|
|
363
|
+
"lidar": { "path": "/sensors/lidar", "is_recursive": false }
|
|
364
|
+
},
|
|
365
|
+
"storage": 1,
|
|
366
|
+
"data_collection": 2
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### 3. Dataset with Metadata (Absolute Path)
|
|
371
|
+
|
|
372
|
+
```json
|
|
373
|
+
{
|
|
374
|
+
"name": "Annotated Dataset",
|
|
375
|
+
"use_single_path": true,
|
|
376
|
+
"path": "/data/annotated",
|
|
377
|
+
"is_recursive": true,
|
|
378
|
+
"excel_metadata_path": "/data/metadata.xlsx",
|
|
379
|
+
"storage": 1,
|
|
380
|
+
"data_collection": 5
|
|
381
|
+
}
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
### 4. Dataset with Metadata (Storage-Relative Path)
|
|
385
|
+
|
|
386
|
+
```json
|
|
387
|
+
{
|
|
388
|
+
"name": "Upload with Storage-Relative Metadata",
|
|
389
|
+
"use_single_path": true,
|
|
390
|
+
"path": "/data/uploads",
|
|
391
|
+
"is_recursive": true,
|
|
392
|
+
"excel_metadata_path": "metadata/dataset_info.xlsx",
|
|
393
|
+
"storage": 1,
|
|
394
|
+
"data_collection": 5
|
|
395
|
+
}
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
**Python Example - Using Different Path Types:**
|
|
399
|
+
|
|
400
|
+
```python
|
|
401
|
+
# Example 1: Absolute path
|
|
402
|
+
params = {
|
|
403
|
+
"name": "Upload with Absolute Path Metadata",
|
|
404
|
+
"path": "/data/uploads",
|
|
405
|
+
"excel_metadata_path": "/data/metadata.xlsx",
|
|
406
|
+
"storage": 1,
|
|
407
|
+
"data_collection": 5
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
# Example 2: Storage-relative path
|
|
411
|
+
params = {
|
|
412
|
+
"name": "Upload with Storage-Relative Metadata",
|
|
413
|
+
"path": "/data/uploads",
|
|
414
|
+
"excel_metadata_path": "metadata/info.xlsx", # Relative to storage default path
|
|
415
|
+
"storage": 1,
|
|
416
|
+
"data_collection": 5
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
# Example 3: Using default metadata file
|
|
420
|
+
params = {
|
|
421
|
+
"name": "Upload with Default Metadata",
|
|
422
|
+
"path": "/data/uploads",
|
|
423
|
+
# No excel_metadata_path - will look for meta.xlsx in working directory
|
|
424
|
+
"storage": 1,
|
|
425
|
+
"data_collection": 5
|
|
426
|
+
}
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
## Benefits
|
|
430
|
+
|
|
431
|
+
### For Users
|
|
432
|
+
|
|
433
|
+
- **Flexibility**: Upload files from multiple different locations in a single operation
|
|
434
|
+
- **Granular Control**: Set recursive search per asset, not globally
|
|
435
|
+
- **Organization**: Map complex file structures to data collection specifications
|
|
436
|
+
- **Use Case Support**: Multi-sensor data collection, distributed datasets, heterogeneous sources
|
|
437
|
+
|
|
438
|
+
### For Developers
|
|
439
|
+
|
|
440
|
+
- **Backward Compatible**: Existing code continues to work without changes
|
|
441
|
+
- **Type Safe**: Full Pydantic validation with clear error messages
|
|
442
|
+
- **Maintainable**: Clean separation between single-path and multi-path logic
|
|
443
|
+
- **Extensible**: Easy to add more per-asset configuration options in the future
|
|
444
|
+
|
|
445
|
+
## Next Steps
|
|
446
|
+
|
|
447
|
+
- **For Plugin Developers**: See [BaseUploader Template Guide](./upload-plugin-template.md) for creating custom upload plugins with file processing logic
|
|
448
|
+
- **For SDK/Action Developers**: See [Upload Action Development](./upload-plugin-action.md) for architecture details, strategy patterns, and action internals
|
|
449
|
+
|
|
450
|
+
## Migration Guide
|
|
451
|
+
|
|
452
|
+
### From Legacy to Current Version
|
|
453
|
+
|
|
454
|
+
The upload action maintains 100% backward compatibility. The default behavior (`use_single_path=true`) works identically to the previous version.
|
|
455
|
+
|
|
456
|
+
#### No Migration Required
|
|
457
|
+
|
|
458
|
+
Existing configurations continue to work without changes:
|
|
459
|
+
|
|
460
|
+
```python
|
|
461
|
+
# This legacy usage still works
|
|
462
|
+
params = {
|
|
463
|
+
"name": "My Upload",
|
|
464
|
+
"path": "/data/files",
|
|
465
|
+
"storage": 1,
|
|
466
|
+
"data_collection": 5
|
|
467
|
+
}
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
#### Adopting Multi-Path Mode
|
|
471
|
+
|
|
472
|
+
To use the new multi-path functionality:
|
|
473
|
+
|
|
474
|
+
1. Set `use_single_path: false`
|
|
475
|
+
2. Remove the `path` field (it will be ignored)
|
|
476
|
+
3. Add `assets` dictionary with per-asset configurations
|
|
477
|
+
|
|
478
|
+
```python
|
|
479
|
+
# New multi-path mode
|
|
480
|
+
params = {
|
|
481
|
+
"name": "Multi-Source Upload",
|
|
482
|
+
"use_single_path": false,
|
|
483
|
+
"assets": {
|
|
484
|
+
"pcd_1": {"path": "/sensors/lidar", "is_recursive": false},
|
|
485
|
+
"image_1": {"path": "/cameras/front", "is_recursive": true}
|
|
486
|
+
},
|
|
487
|
+
"storage": 1,
|
|
488
|
+
"data_collection": 5
|
|
489
|
+
}
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
## Troubleshooting
|
|
493
|
+
|
|
494
|
+
### Common Issues
|
|
495
|
+
|
|
496
|
+
#### "No Files Found" Error
|
|
497
|
+
|
|
498
|
+
```bash
|
|
499
|
+
# Check path exists and is readable
|
|
500
|
+
ls -la /path/to/data
|
|
501
|
+
test -r /path/to/data && echo "Readable" || echo "Not readable"
|
|
502
|
+
|
|
503
|
+
# Verify files exist
|
|
504
|
+
find /path/to/data -name "*.jpg" | head -10
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
#### Excel Processing Errors
|
|
508
|
+
|
|
509
|
+
```bash
|
|
510
|
+
# Check file format and size
|
|
511
|
+
file /path/to/metadata.xlsx
|
|
512
|
+
ls -lh /path/to/metadata.xlsx
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
#### Mode Validation Errors
|
|
516
|
+
|
|
517
|
+
- **Single path mode**: Ensure `path` is provided
|
|
518
|
+
- **Multi-path mode**: Ensure `assets` is provided with at least one asset configuration
|
|
519
|
+
|
|
520
|
+
## Best Practices
|
|
521
|
+
|
|
522
|
+
### Directory Organization
|
|
523
|
+
|
|
524
|
+
- Use clear, descriptive directory names
|
|
525
|
+
- Keep reasonable directory sizes (< 10,000 files per directory)
|
|
526
|
+
- Use absolute paths for reliability
|
|
527
|
+
|
|
528
|
+
### Performance Optimization
|
|
529
|
+
|
|
530
|
+
- Enable recursive only when needed
|
|
531
|
+
- Keep Excel files under 5MB for best performance
|
|
532
|
+
- Organize files in balanced directory structures
|
|
533
|
+
|
|
534
|
+
### Security Considerations
|
|
535
|
+
|
|
536
|
+
- Validate all paths before processing
|
|
537
|
+
- Use read-only permissions for source data
|
|
538
|
+
- Set appropriate Excel size limits
|
|
539
|
+
|
|
540
|
+
## Support and Resources
|
|
541
|
+
|
|
542
|
+
- **Action Development Guide**: [Upload Plugin Action Development](./upload-plugin-action.md)
|
|
543
|
+
- **Template Development Guide**: [Upload Plugin Template Development](./upload-plugin-template.md)
|
|
544
|
+
- **API Reference**: See action development documentation for detailed API reference
|