synapse-sdk 1.0.0a13__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 +310 -5
- synapse_sdk/cli/alias/__init__.py +22 -0
- synapse_sdk/cli/alias/create.py +36 -0
- synapse_sdk/cli/alias/dataclass.py +31 -0
- synapse_sdk/cli/alias/default.py +16 -0
- synapse_sdk/cli/alias/delete.py +15 -0
- synapse_sdk/cli/alias/list.py +19 -0
- synapse_sdk/cli/alias/read.py +15 -0
- synapse_sdk/cli/alias/update.py +17 -0
- synapse_sdk/cli/alias/utils.py +61 -0
- 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/__init__.py +33 -0
- synapse_sdk/cli/{create_plugin.py → plugin/create.py} +2 -2
- synapse_sdk/cli/plugin/publish.py +45 -0
- synapse_sdk/{plugins/cli → cli/plugin}/run.py +12 -5
- 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 +41 -12
- synapse_sdk/clients/backend/annotation.py +13 -5
- synapse_sdk/clients/backend/core.py +59 -0
- synapse_sdk/clients/backend/data_collection.py +186 -0
- synapse_sdk/clients/backend/hitl.py +17 -0
- synapse_sdk/clients/backend/integration.py +19 -4
- synapse_sdk/clients/backend/ml.py +10 -7
- synapse_sdk/clients/backend/models.py +78 -0
- synapse_sdk/clients/base.py +381 -34
- synapse_sdk/clients/ray/serve.py +2 -0
- synapse_sdk/clients/validators/collections.py +31 -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 +74 -9
- synapse_sdk/plugins/README.md +1340 -0
- synapse_sdk/plugins/__init__.py +0 -13
- synapse_sdk/plugins/categories/base.py +145 -30
- 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/utils.py +187 -0
- synapse_sdk/plugins/categories/export/templates/config.yaml +21 -0
- synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +390 -0
- synapse_sdk/plugins/categories/export/templates/plugin/export.py +160 -0
- synapse_sdk/plugins/categories/neural_net/actions/deployment.py +29 -14
- synapse_sdk/plugins/categories/neural_net/actions/inference.py +13 -1
- synapse_sdk/plugins/categories/neural_net/actions/train.py +1084 -38
- synapse_sdk/plugins/categories/neural_net/actions/tune.py +534 -0
- synapse_sdk/plugins/categories/neural_net/base/__init__.py +0 -0
- synapse_sdk/plugins/categories/neural_net/base/inference.py +37 -0
- synapse_sdk/plugins/categories/neural_net/templates/config.yaml +30 -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/{export/actions/export.py → pre_annotation/actions/pre_annotation/action.py} +4 -4
- 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/smart_tool/templates/config.yaml +5 -2
- synapse_sdk/plugins/categories/upload/__init__.py +0 -0
- synapse_sdk/plugins/categories/upload/actions/__init__.py +0 -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 +33 -0
- synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +294 -0
- synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +102 -0
- synapse_sdk/plugins/enums.py +3 -1
- synapse_sdk/plugins/models.py +140 -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/config.yaml +1 -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/legacy.py +95 -0
- 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/types.py +19 -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.backup +301 -0
- synapse_sdk/utils/http.py +138 -0
- synapse_sdk/utils/network.py +309 -0
- synapse_sdk/utils/storage/__init__.py +72 -0
- synapse_sdk/utils/storage/providers/__init__.py +183 -0
- synapse_sdk/utils/storage/providers/file_system.py +134 -0
- synapse_sdk/utils/storage/providers/gcp.py +13 -0
- synapse_sdk/utils/storage/providers/http.py +190 -0
- synapse_sdk/utils/storage/providers/s3.py +91 -0
- synapse_sdk/utils/storage/providers/sftp.py +47 -0
- synapse_sdk/utils/storage/registry.py +17 -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.0a13.dist-info → synapse_sdk-2025.11.7.dist-info}/WHEEL +1 -1
- synapse_sdk/clients/backend/dataset.py +0 -51
- synapse_sdk/plugins/categories/import/actions/import.py +0 -10
- synapse_sdk/plugins/cli/__init__.py +0 -21
- synapse_sdk/plugins/cli/publish.py +0 -37
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env +0 -24
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env.dist +0 -24
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/main.py +0 -4
- synapse_sdk/plugins/utils.py +0 -50
- synapse_sdk/utils/file.py +0 -87
- synapse_sdk/utils/storage.py +0 -91
- synapse_sdk-1.0.0a13.dist-info/METADATA +0 -43
- synapse_sdk-1.0.0a13.dist-info/RECORD +0 -111
- /synapse_sdk/{plugins/categories/import → clients/validators}/__init__.py +0 -0
- /synapse_sdk/{plugins/categories/import/actions → devtools}/__init__.py +0 -0
- {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info}/entry_points.txt +0 -0
- {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info/licenses}/LICENSE +0 -0
- {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
# Upload Plugin
|
|
2
|
+
|
|
3
|
+
The Upload Plugin provides comprehensive file and data upload functionality with support for various storage backends, flexible asset path configuration, and Excel metadata integration.
|
|
4
|
+
|
|
5
|
+
## Quick Start Usage
|
|
6
|
+
|
|
7
|
+
### CLI Usage Examples
|
|
8
|
+
|
|
9
|
+
#### Standard Upload (Single Directory)
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
synapse plugin run upload '{
|
|
13
|
+
"name": "Dataset Upload",
|
|
14
|
+
"storage": 1,
|
|
15
|
+
"data_collection": 2,
|
|
16
|
+
"path": "data/dataset",
|
|
17
|
+
"is_recursive": true
|
|
18
|
+
}'
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Note:** Paths starting with `/` are treated as relative to the storage base path.
|
|
22
|
+
For example, if storage base is `/mnt/storage` and path is `/images`, the actual path becomes `/mnt/storage/images`.
|
|
23
|
+
|
|
24
|
+
#### Multi-Path Upload (Different Locations per Asset Type)
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
synapse plugin run upload '{
|
|
28
|
+
"name": "Complex Dataset Upload",
|
|
29
|
+
"storage": 1,
|
|
30
|
+
"data_collection": 2,
|
|
31
|
+
"use_single_path": false,
|
|
32
|
+
"assets": {
|
|
33
|
+
"images": {"path": "images", "is_recursive": true},
|
|
34
|
+
"pointclouds": {"path": "pcd", "is_recursive": false},
|
|
35
|
+
"annotations": {"path": "labels", "is_recursive": true}
|
|
36
|
+
},
|
|
37
|
+
"excel_metadata_path": "/metadata/dataset_info.xlsx"
|
|
38
|
+
}' --debug
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Multi-path mode** (`use_single_path: false`) allows each asset type (spec) to have its own directory configuration.
|
|
42
|
+
|
|
43
|
+
### Common Use Cases
|
|
44
|
+
|
|
45
|
+
#### 1. Simple Dataset Upload (Single-Path Mode)
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"name": "Training Dataset",
|
|
50
|
+
"storage": 1,
|
|
51
|
+
"data_collection": 2,
|
|
52
|
+
"path": "datasets/training",
|
|
53
|
+
"is_recursive": true
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
#### 2. Multi-Source Dataset Upload (Multi-Path Mode)
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"name": "Multi-Camera Dataset",
|
|
62
|
+
"storage": 1,
|
|
63
|
+
"data_collection": 2,
|
|
64
|
+
"use_single_path": false,
|
|
65
|
+
"assets": {
|
|
66
|
+
"front_camera": { "path": "cameras/front", "is_recursive": true },
|
|
67
|
+
"rear_camera": { "path": "cameras/rear", "is_recursive": true },
|
|
68
|
+
"lidar": { "path": "sensors/lidar", "is_recursive": false }
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Note:** In multi-path mode, each asset type (defined in the data collection's file specifications) can have its own path and recursion setting.
|
|
74
|
+
|
|
75
|
+
#### 3. Dataset with Metadata (Single-Path Mode)
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"name": "Annotated Dataset",
|
|
80
|
+
"storage": 1,
|
|
81
|
+
"data_collection": 2,
|
|
82
|
+
"path": "data/annotated",
|
|
83
|
+
"is_recursive": true,
|
|
84
|
+
"excel_metadata_path": "/data/metadata.xlsx"
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Configuration Parameters
|
|
89
|
+
|
|
90
|
+
### Required Parameters
|
|
91
|
+
|
|
92
|
+
| Parameter | Type | Description | Example |
|
|
93
|
+
| ----------------- | ------- | ---------------------------------------------- | -------------- |
|
|
94
|
+
| `name` | string | Display name for the upload | `"My Dataset"` |
|
|
95
|
+
| `storage` | integer | Storage backend ID | `1` |
|
|
96
|
+
| `data_collection` | integer | Collection ID defining file specs | `2` |
|
|
97
|
+
| `path` | string | Base path (single-path mode only) | `"data/train"` |
|
|
98
|
+
| `assets` | object | Asset configurations (multi-path mode only) | See below |
|
|
99
|
+
|
|
100
|
+
**Mode Selection:**
|
|
101
|
+
- **Single-path mode** (default: `use_single_path: true`): Use `path` parameter. All asset types share the same base directory.
|
|
102
|
+
- **Multi-path mode** (`use_single_path: false`): Use `assets` parameter. Each asset type has its own path configuration.
|
|
103
|
+
|
|
104
|
+
### Optional Parameters
|
|
105
|
+
|
|
106
|
+
| Parameter | Type | Default | Description |
|
|
107
|
+
| --------------------- | ------- | ------- | -------------------------------------------------------------------------------- |
|
|
108
|
+
| `description` | string | `null` | Upload description |
|
|
109
|
+
| `project` | integer | `null` | Project ID to associate |
|
|
110
|
+
| `use_single_path` | boolean | `true` | `true` = single-path mode, `false` = multi-path mode |
|
|
111
|
+
| `is_recursive` | boolean | `true` | Recursive file discovery (single-path mode only) |
|
|
112
|
+
| `excel_metadata_path` | string | `null` | **DEPRECATED** - File path to Excel metadata file (use `excel_metadata` instead) |
|
|
113
|
+
| `excel_metadata` | object | `null` | Base64 encoded Excel metadata (recommended) |
|
|
114
|
+
|
|
115
|
+
### Multi-Path Mode: Assets Configuration
|
|
116
|
+
|
|
117
|
+
When `use_single_path: false`, the `assets` parameter maps each asset type to its configuration:
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
{
|
|
121
|
+
"assets": {
|
|
122
|
+
"<spec_name>": {
|
|
123
|
+
"path": "relative/path/to/files",
|
|
124
|
+
"is_recursive": true
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Important Notes:**
|
|
131
|
+
- Asset keys must match the file specification names from your data collection
|
|
132
|
+
- Paths are relative to the storage base path (leading `/` is automatically stripped)
|
|
133
|
+
- Each asset can have independent `is_recursive` settings
|
|
134
|
+
- Required specs must have corresponding asset configurations
|
|
135
|
+
|
|
136
|
+
## Excel Metadata Support
|
|
137
|
+
|
|
138
|
+
The upload plugin provides advanced Excel metadata processing with flexible header support, comprehensive filename matching, and two distinct input methods.
|
|
139
|
+
|
|
140
|
+
### Input Methods
|
|
141
|
+
|
|
142
|
+
There are two separate parameters for providing Excel metadata:
|
|
143
|
+
|
|
144
|
+
#### 1. File Path Method (`excel_metadata_path`) - **DEPRECATED**
|
|
145
|
+
|
|
146
|
+
:::warning Deprecation Notice
|
|
147
|
+
This parameter is **deprecated** and will be removed in a future version.
|
|
148
|
+
Please migrate to using the `excel_metadata` parameter with base64 encoding instead.
|
|
149
|
+
:::
|
|
150
|
+
|
|
151
|
+
**Use case:** Traditional file-based uploads where the Excel file exists on the server's file system.
|
|
152
|
+
|
|
153
|
+
Simple string path to an Excel file:
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"excel_metadata_path": "/data/metadata.xlsx"
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**Advantages:**
|
|
162
|
+
|
|
163
|
+
- Backward compatible with existing implementations
|
|
164
|
+
- Simple and straightforward
|
|
165
|
+
- Direct file system access
|
|
166
|
+
|
|
167
|
+
#### 2. Base64 Encoded Method (`excel_metadata`)
|
|
168
|
+
|
|
169
|
+
**Use case:** Web frontends, APIs, and cloud integrations where files are transmitted as encoded data.
|
|
170
|
+
|
|
171
|
+
Send Excel file as base64-encoded data with original filename:
|
|
172
|
+
|
|
173
|
+
```json
|
|
174
|
+
{
|
|
175
|
+
"excel_metadata": {
|
|
176
|
+
"data": "UEsDBBQABgAIAAAAIQDd4Z...",
|
|
177
|
+
"filename": "metadata.xlsx"
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Advantages:**
|
|
183
|
+
|
|
184
|
+
- No intermediate file storage required
|
|
185
|
+
- Perfect for web upload forms
|
|
186
|
+
- API-friendly JSON payload
|
|
187
|
+
- Automatic temporary file cleanup
|
|
188
|
+
- **This is the recommended method going forward**
|
|
189
|
+
|
|
190
|
+
**Important:** You cannot use both `excel_metadata_path` and `excel_metadata` at the same time
|
|
191
|
+
|
|
192
|
+
**Migration Example:**
|
|
193
|
+
|
|
194
|
+
```python
|
|
195
|
+
import base64
|
|
196
|
+
|
|
197
|
+
# Old way (deprecated)
|
|
198
|
+
params = {
|
|
199
|
+
"excel_metadata_path": "/data/metadata.xlsx"
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
# New way (recommended)
|
|
203
|
+
with open("/data/metadata.xlsx", "rb") as f:
|
|
204
|
+
encoded = base64.b64encode(f.read()).decode("utf-8")
|
|
205
|
+
params = {
|
|
206
|
+
"excel_metadata": {
|
|
207
|
+
"data": encoded,
|
|
208
|
+
"filename": "metadata.xlsx"
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Excel Format Example
|
|
214
|
+
|
|
215
|
+
| filename | category | quality | notes |
|
|
216
|
+
| --------- | ---------- | ------- | ----------------- |
|
|
217
|
+
| sample001 | vehicle | high | Clear visibility |
|
|
218
|
+
| sample002 | pedestrian | medium | Partial occlusion |
|
|
219
|
+
|
|
220
|
+
### Security Limits
|
|
221
|
+
|
|
222
|
+
- Max file size: 10MB
|
|
223
|
+
- Max rows: 10,000
|
|
224
|
+
- Max columns: 50
|
|
225
|
+
|
|
226
|
+
## File Matching Logic
|
|
227
|
+
|
|
228
|
+
Files are matched by **stem name** (filename without extension):
|
|
229
|
+
|
|
230
|
+
- `sample001.jpg` → stem: "sample001"
|
|
231
|
+
- `sample001.pcd` → stem: "sample001"
|
|
232
|
+
- `sample001.json` → stem: "sample001"
|
|
233
|
+
|
|
234
|
+
These files form a single dataset named "sample001".
|
|
235
|
+
|
|
236
|
+
## Troubleshooting Guide
|
|
237
|
+
|
|
238
|
+
### Common Issues
|
|
239
|
+
|
|
240
|
+
#### "No Files Found" Error
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
# Check path exists and is readable
|
|
244
|
+
ls -la /path/to/data
|
|
245
|
+
test -r /path/to/data && echo "Readable" || echo "Not readable"
|
|
246
|
+
|
|
247
|
+
# Verify files exist
|
|
248
|
+
find /path/to/data -name "*.jpg" | head -10
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
#### Excel Processing Errors
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
# Check file format and size
|
|
255
|
+
file /path/to/metadata.xlsx
|
|
256
|
+
ls -lh /path/to/metadata.xlsx
|
|
257
|
+
|
|
258
|
+
# Validate Excel content
|
|
259
|
+
python -c "
|
|
260
|
+
from openpyxl import load_workbook
|
|
261
|
+
wb = load_workbook('/path/to/metadata.xlsx')
|
|
262
|
+
print(f'Sheets: {wb.sheetnames}')
|
|
263
|
+
print(f'Rows: {wb.active.max_row}')
|
|
264
|
+
"
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
#### Upload Failures
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
# Test storage connection
|
|
271
|
+
synapse storage test --storage-id 1
|
|
272
|
+
|
|
273
|
+
# Verify collection configuration
|
|
274
|
+
synapse collection show --id 2
|
|
275
|
+
|
|
276
|
+
# Run with debug mode
|
|
277
|
+
synapse plugin run upload '{}' --debug
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
## Best Practices
|
|
281
|
+
|
|
282
|
+
### Directory Organization
|
|
283
|
+
|
|
284
|
+
- Use clear, descriptive directory names
|
|
285
|
+
- Keep reasonable directory sizes (< 10,000 files)
|
|
286
|
+
- Use absolute paths for reliability
|
|
287
|
+
|
|
288
|
+
### Performance Optimization
|
|
289
|
+
|
|
290
|
+
- Enable recursive only when needed
|
|
291
|
+
- Keep Excel files under 5MB
|
|
292
|
+
- Organize files in balanced directory structures
|
|
293
|
+
|
|
294
|
+
### Security Considerations
|
|
295
|
+
|
|
296
|
+
- Validate all paths before processing
|
|
297
|
+
- Use read-only permissions for source data
|
|
298
|
+
- Set appropriate Excel size limits
|
|
299
|
+
|
|
300
|
+
## Plugin Development
|
|
301
|
+
|
|
302
|
+
### Custom Upload Plugins
|
|
303
|
+
|
|
304
|
+
When developing custom upload plugins, you inherit from `BaseUploader` and override processing methods:
|
|
305
|
+
|
|
306
|
+
```python
|
|
307
|
+
from pathlib import Path
|
|
308
|
+
from typing import List
|
|
309
|
+
from plugin import BaseUploader
|
|
310
|
+
|
|
311
|
+
class MyCustomUploader(BaseUploader):
|
|
312
|
+
def process_files(self, organized_files: List) -> List:
|
|
313
|
+
"""Process files with custom logic."""
|
|
314
|
+
# Implement your custom processing
|
|
315
|
+
processed = []
|
|
316
|
+
for file_group in organized_files:
|
|
317
|
+
# Apply your transformations
|
|
318
|
+
processed.append(self._transform(file_group))
|
|
319
|
+
|
|
320
|
+
return processed
|
|
321
|
+
|
|
322
|
+
def _transform(self, file_group):
|
|
323
|
+
# Your custom transformation logic
|
|
324
|
+
return file_group
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### Available Attributes in Plugin Templates
|
|
328
|
+
|
|
329
|
+
```python
|
|
330
|
+
class BaseUploader:
|
|
331
|
+
# Standard attributes
|
|
332
|
+
self.run # Logger and progress tracking
|
|
333
|
+
self.path: Path | None # Base path (single-path) or None (multi-path)
|
|
334
|
+
self.file_specification: List # File specs from data collection
|
|
335
|
+
self.organized_files: List # Pre-organized files
|
|
336
|
+
self.extra_params: Dict # Custom user parameters
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
**Note:** In multi-path mode, `self.path` is `None` because each asset type has its own path configuration.
|
|
340
|
+
The files in `organized_files` are already discovered and organized from their respective paths.
|
|
341
|
+
|
|
342
|
+
## Advanced Features
|
|
343
|
+
|
|
344
|
+
### Batch Processing
|
|
345
|
+
|
|
346
|
+
The plugin automatically optimizes batch sizes based on dataset size:
|
|
347
|
+
|
|
348
|
+
- Small datasets (< 50 files): batch size 50
|
|
349
|
+
- Large datasets: dynamic batch size (10-100)
|
|
350
|
+
|
|
351
|
+
### Progress Tracking
|
|
352
|
+
|
|
353
|
+
Real-time progress updates with categories:
|
|
354
|
+
|
|
355
|
+
- Collection analysis: 2%
|
|
356
|
+
- File upload: 38%
|
|
357
|
+
- Data unit generation: 60%
|
|
358
|
+
|
|
359
|
+
### Error Handling
|
|
360
|
+
|
|
361
|
+
Comprehensive validation at multiple levels:
|
|
362
|
+
|
|
363
|
+
- Parameter validation (Pydantic)
|
|
364
|
+
- Runtime path validation
|
|
365
|
+
- File format validation
|
|
366
|
+
- Excel security checks
|
|
367
|
+
|
|
368
|
+
## Environment Variables
|
|
369
|
+
|
|
370
|
+
Configure Excel processing limits:
|
|
371
|
+
|
|
372
|
+
```bash
|
|
373
|
+
# File size limits
|
|
374
|
+
EXCEL_MAX_FILE_SIZE_MB=10
|
|
375
|
+
EXCEL_MAX_MEMORY_MB=30
|
|
376
|
+
|
|
377
|
+
# Content limits
|
|
378
|
+
EXCEL_MAX_ROWS=10000
|
|
379
|
+
EXCEL_MAX_COLUMNS=50
|
|
380
|
+
|
|
381
|
+
# String length limits
|
|
382
|
+
EXCEL_MAX_FILENAME_LENGTH=255
|
|
383
|
+
EXCEL_MAX_METADATA_VALUE_LENGTH=1000
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
## Migration Guide
|
|
387
|
+
|
|
388
|
+
### Upgrading from Previous Versions
|
|
389
|
+
|
|
390
|
+
All existing configurations continue to work. New features are additive:
|
|
391
|
+
|
|
392
|
+
#### Test Current Configuration
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
synapse plugin run upload '{}' --debug
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
#### Convert to Explicit Mode
|
|
399
|
+
|
|
400
|
+
```python
|
|
401
|
+
# Add explicit mode setting
|
|
402
|
+
config["use_single_path"] = True # Single-path mode (default)
|
|
403
|
+
# or
|
|
404
|
+
config["use_single_path"] = False # Multi-path mode
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
#### Gradual Migration to Multi-Path Mode
|
|
408
|
+
|
|
409
|
+
```python
|
|
410
|
+
# Start with subset
|
|
411
|
+
test_config = {
|
|
412
|
+
"use_single_path": False, # Enable multi-path mode
|
|
413
|
+
"assets": {
|
|
414
|
+
"test_images": {"path": "existing/path/images", "is_recursive": True}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
# Then migrate all assets
|
|
419
|
+
production_config = {
|
|
420
|
+
"use_single_path": False, # Multi-path mode
|
|
421
|
+
"assets": {
|
|
422
|
+
"images": {"path": "optimized/path1", "is_recursive": True},
|
|
423
|
+
"annotations": {"path": "optimized/path2", "is_recursive": False}
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
**Migration Benefits:**
|
|
429
|
+
- Independent path configuration per asset type
|
|
430
|
+
- Per-asset recursion settings
|
|
431
|
+
- Better organization for complex datasets
|
|
432
|
+
- Clearer separation of concerns
|
|
433
|
+
|
|
434
|
+
## Storage Backend Support
|
|
435
|
+
|
|
436
|
+
The plugin supports multiple storage backends:
|
|
437
|
+
|
|
438
|
+
- **Local filesystem**: Optimized for high I/O
|
|
439
|
+
- **S3/GCS**: Cloud storage with retry logic
|
|
440
|
+
- **SFTP**: Connection pooling for remote servers
|
|
441
|
+
- **HTTP**: Streaming uploads for large files
|
|
442
|
+
|
|
443
|
+
## API Reference
|
|
444
|
+
|
|
445
|
+
### Plugin Class
|
|
446
|
+
|
|
447
|
+
```python
|
|
448
|
+
from synapse import Plugin
|
|
449
|
+
|
|
450
|
+
plugin = Plugin("upload")
|
|
451
|
+
result = plugin.run(config, debug=True)
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
### Result Structure
|
|
455
|
+
|
|
456
|
+
```python
|
|
457
|
+
{
|
|
458
|
+
"status": "success",
|
|
459
|
+
"uploaded_files": 150,
|
|
460
|
+
"data_units_created": 50,
|
|
461
|
+
"errors": [],
|
|
462
|
+
"metadata": {}
|
|
463
|
+
}
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
## Support and Resources
|
|
467
|
+
|
|
468
|
+
- **Documentation**: Full API documentation at [synapse-docs]
|
|
469
|
+
- **Issues**: Report bugs at [issue-tracker]
|
|
470
|
+
- **Examples**: More examples at [examples-repo]
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
actions:
|
|
2
|
+
upload:
|
|
3
|
+
entrypoint: plugin.upload.Uploader
|
|
4
|
+
options:
|
|
5
|
+
supported_data_type: image # A primary data type of synapse backend collection. (e.g. 'image', 'text', 'video', 'pcd', 'audio')
|
|
6
|
+
excel_config: # Configuration for Excel file uploads
|
|
7
|
+
max_file_size_mb: 10
|
|
8
|
+
max_rows: 100000
|
|
9
|
+
max_columns: 50
|
|
10
|
+
ui_schema: # UI schema for the input of extra params
|
|
11
|
+
- $formkit: "radio"
|
|
12
|
+
name: "file_format"
|
|
13
|
+
label: "File Format"
|
|
14
|
+
help: "Select the file format for upload processing"
|
|
15
|
+
required: false
|
|
16
|
+
value: "original"
|
|
17
|
+
options:
|
|
18
|
+
- label: "Keep Original"
|
|
19
|
+
value: "original"
|
|
20
|
+
- label: "Convert to JPEG"
|
|
21
|
+
value: "jpeg"
|
|
22
|
+
- label: "Convert to PNG"
|
|
23
|
+
value: "png"
|
|
24
|
+
- $formkit: "checkbox"
|
|
25
|
+
name: "include_metadata"
|
|
26
|
+
label: "Include Metadata"
|
|
27
|
+
help: "Include file metadata during upload"
|
|
28
|
+
value: true
|
|
29
|
+
- $formkit: "text"
|
|
30
|
+
name: "custom_tag"
|
|
31
|
+
label: "Custom Tag"
|
|
32
|
+
help: "Add a custom tag to uploaded files"
|
|
33
|
+
placeholder: "Enter custom tag"
|