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,420 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: backend
|
|
3
|
+
title: BackendClient
|
|
4
|
+
sidebar_position: 1
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# BackendClient
|
|
8
|
+
|
|
9
|
+
Main client for interacting with the Synapse backend API.
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
The `BackendClient` provides comprehensive access to all backend operations including data management, plugin execution, annotations, and machine learning workflows. It aggregates functionality from multiple specialized mixins:
|
|
14
|
+
|
|
15
|
+
- **AnnotationClientMixin**: Task and annotation management
|
|
16
|
+
- **CoreClientMixin**: File upload and core operations
|
|
17
|
+
- **DataCollectionClientMixin**: Data collection and file management
|
|
18
|
+
- **HITLClientMixin**: Human-in-the-loop assignment operations
|
|
19
|
+
- **IntegrationClientMixin**: Plugin and job management
|
|
20
|
+
- **MLClientMixin**: Machine learning models and ground truth operations
|
|
21
|
+
|
|
22
|
+
## Constructor
|
|
23
|
+
|
|
24
|
+
```python
|
|
25
|
+
BackendClient(
|
|
26
|
+
base_url: str,
|
|
27
|
+
api_token: str = None,
|
|
28
|
+
agent_token: str = None,
|
|
29
|
+
timeout: dict = None
|
|
30
|
+
)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Parameters
|
|
34
|
+
|
|
35
|
+
- **base_url** (`str`): The base URL of the Synapse backend API
|
|
36
|
+
- **api_token** (`str`, optional): API authentication token. Can also be set via `SYNAPSE_API_TOKEN` environment variable
|
|
37
|
+
- **agent_token** (`str`, optional): Agent authentication token. Can also be set via `SYNAPSE_AGENT_TOKEN` environment variable
|
|
38
|
+
- **timeout** (`dict`, optional): Custom timeout settings. Defaults to `{'connect': 5, 'read': 30}`
|
|
39
|
+
|
|
40
|
+
### Example
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
from synapse_sdk.clients.backend import BackendClient
|
|
44
|
+
|
|
45
|
+
# Create client with explicit token
|
|
46
|
+
client = BackendClient(
|
|
47
|
+
base_url="https://api.synapse.sh",
|
|
48
|
+
api_token="your-api-token"
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
# Or use environment variables
|
|
52
|
+
import os
|
|
53
|
+
os.environ['SYNAPSE_API_TOKEN'] = "your-api-token"
|
|
54
|
+
client = BackendClient(base_url="https://api.synapse.sh")
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## API Methods
|
|
58
|
+
|
|
59
|
+
### Annotation Operations
|
|
60
|
+
|
|
61
|
+
#### `get_project(pk)`
|
|
62
|
+
|
|
63
|
+
Get project details by ID.
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
project = client.get_project(123)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
#### `get_task(pk, params)`
|
|
70
|
+
|
|
71
|
+
Get task details with optional parameters.
|
|
72
|
+
|
|
73
|
+
```python
|
|
74
|
+
task = client.get_task(456, params={'expand': 'data_unit'})
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
#### `annotate_task_data(pk, data)`
|
|
78
|
+
|
|
79
|
+
Submit annotation data for a task.
|
|
80
|
+
|
|
81
|
+
```python
|
|
82
|
+
result = client.annotate_task_data(456, {
|
|
83
|
+
'annotations': [
|
|
84
|
+
{'type': 'bbox', 'coordinates': [10, 10, 100, 100]}
|
|
85
|
+
]
|
|
86
|
+
})
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### `list_tasks(params=None, url_conversion=None, list_all=False)`
|
|
90
|
+
|
|
91
|
+
List tasks with filtering and pagination.
|
|
92
|
+
|
|
93
|
+
```python
|
|
94
|
+
# Get tasks for a project
|
|
95
|
+
tasks = client.list_tasks(params={'project': 123})
|
|
96
|
+
|
|
97
|
+
# Get all tasks (handles pagination automatically)
|
|
98
|
+
all_tasks = client.list_tasks(list_all=True)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
#### `create_tasks(data)`
|
|
102
|
+
|
|
103
|
+
Create new tasks.
|
|
104
|
+
|
|
105
|
+
```python
|
|
106
|
+
new_tasks = client.create_tasks([
|
|
107
|
+
{'project': 123, 'data_unit': 789},
|
|
108
|
+
{'project': 123, 'data_unit': 790}
|
|
109
|
+
])
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
#### `set_tags_tasks(data, params=None)`
|
|
113
|
+
|
|
114
|
+
Set tags for multiple tasks.
|
|
115
|
+
|
|
116
|
+
```python
|
|
117
|
+
client.set_tags_tasks({
|
|
118
|
+
'task_ids': [456, 457],
|
|
119
|
+
'tag_ids': [1, 2, 3]
|
|
120
|
+
})
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Core Operations
|
|
124
|
+
|
|
125
|
+
#### `create_chunked_upload(file_path)`
|
|
126
|
+
|
|
127
|
+
Upload large files using chunked upload for optimal performance.
|
|
128
|
+
|
|
129
|
+
```python
|
|
130
|
+
from pathlib import Path
|
|
131
|
+
|
|
132
|
+
result = client.create_chunked_upload(Path('/path/to/large_file.zip'))
|
|
133
|
+
print(f"Upload completed: {result}")
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Features:**
|
|
137
|
+
|
|
138
|
+
- Uses 50MB chunks for optimal performance
|
|
139
|
+
- Automatic retry and resume capability
|
|
140
|
+
- MD5 integrity verification
|
|
141
|
+
- Progress tracking support
|
|
142
|
+
|
|
143
|
+
### Data Collection Operations
|
|
144
|
+
|
|
145
|
+
#### `list_data_collection()`
|
|
146
|
+
|
|
147
|
+
List all available data collections.
|
|
148
|
+
|
|
149
|
+
```python
|
|
150
|
+
collections = client.list_data_collection()
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
#### `get_data_collection(data_collection_id)`
|
|
154
|
+
|
|
155
|
+
Get detailed information about a specific data collection.
|
|
156
|
+
|
|
157
|
+
```python
|
|
158
|
+
collection = client.get_data_collection(123)
|
|
159
|
+
file_specs = collection['file_specifications']
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
#### `create_data_file(file_path, use_chunked_upload=False)`
|
|
163
|
+
|
|
164
|
+
Create and upload a data file to the backend.
|
|
165
|
+
|
|
166
|
+
```python
|
|
167
|
+
from pathlib import Path
|
|
168
|
+
|
|
169
|
+
# Regular upload
|
|
170
|
+
data_file = client.create_data_file(Path('/path/to/file.jpg'))
|
|
171
|
+
|
|
172
|
+
# Chunked upload for large files
|
|
173
|
+
large_file = client.create_data_file(
|
|
174
|
+
Path('/path/to/large_file.zip'),
|
|
175
|
+
use_chunked_upload=True
|
|
176
|
+
)
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
#### `upload_data_file(organized_file, collection_id, use_chunked_upload=False)`
|
|
180
|
+
|
|
181
|
+
Upload organized file data to a collection.
|
|
182
|
+
|
|
183
|
+
```python
|
|
184
|
+
result = client.upload_data_file(
|
|
185
|
+
organized_file={'files': {...}, 'meta': {...}},
|
|
186
|
+
collection_id=123,
|
|
187
|
+
use_chunked_upload=False
|
|
188
|
+
)
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
#### `create_data_units(uploaded_files)`
|
|
192
|
+
|
|
193
|
+
Create data units from uploaded files.
|
|
194
|
+
|
|
195
|
+
```python
|
|
196
|
+
data_units = client.create_data_units([
|
|
197
|
+
{'id': 1, 'file': {...}},
|
|
198
|
+
{'id': 2, 'file': {...}}
|
|
199
|
+
])
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### HITL (Human-in-the-Loop) Operations
|
|
203
|
+
|
|
204
|
+
#### `get_assignment(pk)`
|
|
205
|
+
|
|
206
|
+
Get assignment details by ID.
|
|
207
|
+
|
|
208
|
+
```python
|
|
209
|
+
assignment = client.get_assignment(789)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
#### `list_assignments(params=None, url_conversion=None, list_all=False)`
|
|
213
|
+
|
|
214
|
+
List assignments with filtering options.
|
|
215
|
+
|
|
216
|
+
```python
|
|
217
|
+
# Get assignments for a project
|
|
218
|
+
assignments = client.list_assignments(params={'project': 123})
|
|
219
|
+
|
|
220
|
+
# Get all assignments
|
|
221
|
+
all_assignments = client.list_assignments(list_all=True)
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
#### `set_tags_assignments(data, params=None)`
|
|
225
|
+
|
|
226
|
+
Set tags for multiple assignments.
|
|
227
|
+
|
|
228
|
+
```python
|
|
229
|
+
client.set_tags_assignments({
|
|
230
|
+
'assignment_ids': [789, 790],
|
|
231
|
+
'tag_ids': [1, 2]
|
|
232
|
+
})
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Integration Operations
|
|
236
|
+
|
|
237
|
+
#### `health_check_agent(token)`
|
|
238
|
+
|
|
239
|
+
Check agent health status.
|
|
240
|
+
|
|
241
|
+
```python
|
|
242
|
+
status = client.health_check_agent('agent-token-123')
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
#### `get_plugin(pk)` / `create_plugin(data)` / `update_plugin(pk, data)`
|
|
246
|
+
|
|
247
|
+
Manage plugins.
|
|
248
|
+
|
|
249
|
+
```python
|
|
250
|
+
# Get plugin
|
|
251
|
+
plugin = client.get_plugin(123)
|
|
252
|
+
|
|
253
|
+
# Create plugin
|
|
254
|
+
new_plugin = client.create_plugin({
|
|
255
|
+
'name': 'My Plugin',
|
|
256
|
+
'description': 'Plugin description'
|
|
257
|
+
})
|
|
258
|
+
|
|
259
|
+
# Update plugin
|
|
260
|
+
updated = client.update_plugin(123, {'description': 'Updated description'})
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
#### `run_plugin(pk, data)`
|
|
264
|
+
|
|
265
|
+
Execute a plugin with provided data.
|
|
266
|
+
|
|
267
|
+
```python
|
|
268
|
+
result = client.run_plugin(123, {
|
|
269
|
+
'parameters': {'input': 'value'},
|
|
270
|
+
'context': {...}
|
|
271
|
+
})
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
#### Plugin Release Management
|
|
275
|
+
|
|
276
|
+
```python
|
|
277
|
+
# Create plugin release
|
|
278
|
+
release = client.create_plugin_release({
|
|
279
|
+
'plugin': 123,
|
|
280
|
+
'version': '1.0.0',
|
|
281
|
+
'file': open('/path/to/plugin.zip', 'rb')
|
|
282
|
+
})
|
|
283
|
+
|
|
284
|
+
# Get release details
|
|
285
|
+
release_info = client.get_plugin_release(456)
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
#### Job Management
|
|
289
|
+
|
|
290
|
+
```python
|
|
291
|
+
# List jobs
|
|
292
|
+
jobs = client.list_jobs(params={'status': 'running'})
|
|
293
|
+
|
|
294
|
+
# Get job details
|
|
295
|
+
job = client.get_job(789, params={'expand': 'logs'})
|
|
296
|
+
|
|
297
|
+
# Update job status
|
|
298
|
+
client.update_job(789, {'status': 'completed'})
|
|
299
|
+
|
|
300
|
+
# Get job console logs
|
|
301
|
+
logs = client.list_job_console_logs(789)
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
#### Storage Operations
|
|
305
|
+
|
|
306
|
+
```python
|
|
307
|
+
# List storages
|
|
308
|
+
storages = client.list_storages()
|
|
309
|
+
|
|
310
|
+
# Get storage details
|
|
311
|
+
storage = client.get_storage(123)
|
|
312
|
+
|
|
313
|
+
# Create storage
|
|
314
|
+
new_storage = client.create_storage({
|
|
315
|
+
'name': 'My Storage',
|
|
316
|
+
'provider': 'amazon_s3',
|
|
317
|
+
'configuration': {...}
|
|
318
|
+
})
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### Machine Learning Operations
|
|
322
|
+
|
|
323
|
+
#### `list_models(params=None)` / `get_model(pk, params=None, url_conversion=None)`
|
|
324
|
+
|
|
325
|
+
Manage ML models.
|
|
326
|
+
|
|
327
|
+
```python
|
|
328
|
+
# List models
|
|
329
|
+
models = client.list_models(params={'project': 123})
|
|
330
|
+
|
|
331
|
+
# Get model details
|
|
332
|
+
model = client.get_model(456, params={'expand': 'metrics'})
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
#### `create_model(data)`
|
|
336
|
+
|
|
337
|
+
Create a new ML model with file upload.
|
|
338
|
+
|
|
339
|
+
```python
|
|
340
|
+
new_model = client.create_model({
|
|
341
|
+
'name': 'My Model',
|
|
342
|
+
'project': 123,
|
|
343
|
+
'file': '/path/to/model.pkl'
|
|
344
|
+
})
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
#### Ground Truth Operations
|
|
348
|
+
|
|
349
|
+
```python
|
|
350
|
+
# List ground truth events
|
|
351
|
+
events = client.list_ground_truth_events(
|
|
352
|
+
params={'ground_truth_dataset_versions': [123]},
|
|
353
|
+
list_all=True
|
|
354
|
+
)
|
|
355
|
+
|
|
356
|
+
# Get ground truth version
|
|
357
|
+
version = client.get_ground_truth_version(123)
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
## Storage Models
|
|
361
|
+
|
|
362
|
+
The backend client includes predefined models for storage operations:
|
|
363
|
+
|
|
364
|
+
### StorageCategory
|
|
365
|
+
|
|
366
|
+
- `INTERNAL`: Internal storage systems
|
|
367
|
+
- `EXTERNAL`: External storage providers
|
|
368
|
+
|
|
369
|
+
### StorageProvider
|
|
370
|
+
|
|
371
|
+
- `AMAZON_S3`: Amazon S3
|
|
372
|
+
- `AZURE`: Microsoft Azure Blob Storage
|
|
373
|
+
- `DIGITAL_OCEAN`: DigitalOcean Spaces
|
|
374
|
+
- `FILE_SYSTEM`: Local file system
|
|
375
|
+
- `FTP` / `SFTP`: FTP protocols
|
|
376
|
+
- `MINIO`: MinIO storage
|
|
377
|
+
- `GCP`: Google Cloud Storage
|
|
378
|
+
|
|
379
|
+
## Error Handling
|
|
380
|
+
|
|
381
|
+
All API methods may raise `ClientError` exceptions for various error conditions:
|
|
382
|
+
|
|
383
|
+
```python
|
|
384
|
+
from synapse_sdk.clients.exceptions import ClientError
|
|
385
|
+
|
|
386
|
+
try:
|
|
387
|
+
project = client.get_project(999)
|
|
388
|
+
except ClientError as e:
|
|
389
|
+
print(f"API Error: {e}")
|
|
390
|
+
print(f"Status Code: {e.status_code}")
|
|
391
|
+
print(f"Response: {e.response}")
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
## Pagination
|
|
395
|
+
|
|
396
|
+
Methods supporting `list_all=True` will automatically handle pagination:
|
|
397
|
+
|
|
398
|
+
```python
|
|
399
|
+
# Manual pagination
|
|
400
|
+
tasks_page1 = client.list_tasks(params={'page': 1, 'page_size': 100})
|
|
401
|
+
|
|
402
|
+
# Automatic pagination (recommended)
|
|
403
|
+
all_tasks = client.list_tasks(list_all=True)
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
## URL Conversion
|
|
407
|
+
|
|
408
|
+
Some methods support URL conversion for file fields:
|
|
409
|
+
|
|
410
|
+
```python
|
|
411
|
+
# Custom URL conversion
|
|
412
|
+
tasks = client.list_tasks(
|
|
413
|
+
url_conversion={'files': lambda url: f"https://cdn.example.com{url}"}
|
|
414
|
+
)
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
## See Also
|
|
418
|
+
|
|
419
|
+
- [AgentClient](./agent.md) - For agent-specific operations
|
|
420
|
+
- [BaseClient](./base.md) - Base client implementation
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: base
|
|
3
|
+
title: BaseClient
|
|
4
|
+
sidebar_position: 3
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# BaseClient
|
|
8
|
+
|
|
9
|
+
Base class for all Synapse SDK clients providing core HTTP operations and pagination.
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
The `BaseClient` provides common functionality for HTTP operations, error handling, request management, and pagination used by all other clients. It implements efficient pagination handling with automatic file URL conversion capabilities.
|
|
14
|
+
|
|
15
|
+
## Features
|
|
16
|
+
|
|
17
|
+
- HTTP request handling with retry logic
|
|
18
|
+
- Automatic timeout management
|
|
19
|
+
- Efficient pagination with generators
|
|
20
|
+
- File URL to local path conversion
|
|
21
|
+
- Pydantic model validation
|
|
22
|
+
- Connection pooling
|
|
23
|
+
|
|
24
|
+
## Core HTTP Methods
|
|
25
|
+
|
|
26
|
+
The BaseClient provides low-level HTTP methods that are used internally by all client mixins:
|
|
27
|
+
|
|
28
|
+
- `_get()` - GET requests with optional response model validation
|
|
29
|
+
- `_post()` - POST requests with request/response validation
|
|
30
|
+
- `_put()` - PUT requests with model validation
|
|
31
|
+
- `_patch()` - PATCH requests with model validation
|
|
32
|
+
- `_delete()` - DELETE requests with model validation
|
|
33
|
+
|
|
34
|
+
These methods are typically not called directly. Instead, use the higher-level methods provided by client mixins.
|
|
35
|
+
|
|
36
|
+
## Pagination Methods
|
|
37
|
+
|
|
38
|
+
### `_list(path, url_conversion=None, list_all=False, params=None, **kwargs)`
|
|
39
|
+
|
|
40
|
+
List resources from a paginated API endpoint with optional automatic pagination and file URL conversion.
|
|
41
|
+
|
|
42
|
+
**Parameters:**
|
|
43
|
+
|
|
44
|
+
- `path` (str): URL path to request
|
|
45
|
+
- `url_conversion` (dict, optional): Configuration for converting file URLs to local paths
|
|
46
|
+
- Structure: `{'files_fields': ['field1', 'field2'], 'is_list': True}`
|
|
47
|
+
- Automatically downloads files and replaces URLs with local paths
|
|
48
|
+
- `list_all` (bool): If True, returns all results across all pages using a generator
|
|
49
|
+
- `params` (dict, optional): Query parameters (filters, sorting, etc.)
|
|
50
|
+
- `**kwargs`: Additional request arguments
|
|
51
|
+
|
|
52
|
+
**Returns:**
|
|
53
|
+
|
|
54
|
+
- If `list_all=False`: Dict with `results`, `count`, `next`, `previous`
|
|
55
|
+
- If `list_all=True`: Tuple of `(generator, total_count)`
|
|
56
|
+
|
|
57
|
+
**Examples:**
|
|
58
|
+
|
|
59
|
+
```python
|
|
60
|
+
# Get first page only
|
|
61
|
+
response = client._list('api/tasks/')
|
|
62
|
+
tasks = response['results'] # First page of tasks
|
|
63
|
+
total = response['count'] # Total number of tasks
|
|
64
|
+
|
|
65
|
+
# Get all results using generator (memory efficient)
|
|
66
|
+
generator, total_count = client._list('api/tasks/', list_all=True)
|
|
67
|
+
all_tasks = list(generator) # Fetches all pages automatically
|
|
68
|
+
|
|
69
|
+
# With filters
|
|
70
|
+
params = {'status': 'pending', 'priority': 'high'}
|
|
71
|
+
response = client._list('api/tasks/', params=params)
|
|
72
|
+
|
|
73
|
+
# With url_conversion for file fields
|
|
74
|
+
url_conversion = {'files_fields': ['files'], 'is_list': True}
|
|
75
|
+
generator, count = client._list(
|
|
76
|
+
'api/data_units/',
|
|
77
|
+
url_conversion=url_conversion,
|
|
78
|
+
list_all=True,
|
|
79
|
+
params={'status': 'active'}
|
|
80
|
+
)
|
|
81
|
+
# File URLs in 'files' field are automatically downloaded and converted to local paths
|
|
82
|
+
for unit in generator:
|
|
83
|
+
print(unit['files']) # Local file paths, not URLs
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### `_list_all(path, url_conversion=None, params=None, **kwargs)`
|
|
87
|
+
|
|
88
|
+
Generator that yields all results from a paginated API endpoint.
|
|
89
|
+
|
|
90
|
+
This method is called internally by `_list()` when `list_all=True`. It handles pagination automatically by following `next` URLs and uses an iterative approach (while loop) instead of recursion to avoid stack overflow with deep pagination.
|
|
91
|
+
|
|
92
|
+
**Key Improvements (SYN-5757):**
|
|
93
|
+
|
|
94
|
+
1. **No duplicate page_size**: The `page_size` parameter is only added to the first request. Subsequent requests use the `next` URL directly, which already contains all necessary parameters.
|
|
95
|
+
|
|
96
|
+
2. **Proper params handling**: User-specified query parameters are correctly passed to the first request and preserved through pagination via the `next` URL.
|
|
97
|
+
|
|
98
|
+
3. **url_conversion on all pages**: URL conversion is applied to every page, not just the first one.
|
|
99
|
+
|
|
100
|
+
4. **Iterative instead of recursive**: Uses a while loop instead of recursion for better memory efficiency and to prevent stack overflow on large datasets.
|
|
101
|
+
|
|
102
|
+
**Parameters:**
|
|
103
|
+
|
|
104
|
+
- `path` (str): Initial URL path
|
|
105
|
+
- `url_conversion` (dict, optional): Applied to all pages
|
|
106
|
+
- `params` (dict, optional): Query parameters for first request only
|
|
107
|
+
- `**kwargs`: Additional request arguments
|
|
108
|
+
|
|
109
|
+
**Yields:**
|
|
110
|
+
|
|
111
|
+
Individual result items from all pages, fetched lazily.
|
|
112
|
+
|
|
113
|
+
**Examples:**
|
|
114
|
+
|
|
115
|
+
```python
|
|
116
|
+
# Basic: iterate through all tasks
|
|
117
|
+
for task in client._list_all('api/tasks/'):
|
|
118
|
+
process_task(task)
|
|
119
|
+
|
|
120
|
+
# With filters
|
|
121
|
+
params = {'status': 'pending'}
|
|
122
|
+
for task in client._list_all('api/tasks/', params=params):
|
|
123
|
+
print(task['id'])
|
|
124
|
+
|
|
125
|
+
# With url_conversion for nested file fields
|
|
126
|
+
url_conversion = {'files_fields': ['data.files', 'metadata.attachments'], 'is_list': True}
|
|
127
|
+
for item in client._list_all('api/items/', url_conversion=url_conversion):
|
|
128
|
+
print(item['data']['files']) # Local paths
|
|
129
|
+
|
|
130
|
+
# Collect all results (memory intensive for large datasets)
|
|
131
|
+
all_results = list(client._list_all('api/tasks/'))
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## URL Conversion for File Downloads
|
|
135
|
+
|
|
136
|
+
The `url_conversion` parameter enables automatic downloading of files referenced by URLs in API responses. This is particularly useful when working with data units, tasks, or any resources that include file references.
|
|
137
|
+
|
|
138
|
+
### URL Conversion Structure
|
|
139
|
+
|
|
140
|
+
```python
|
|
141
|
+
url_conversion = {
|
|
142
|
+
'files_fields': ['files', 'images', 'data.attachments'], # Field paths
|
|
143
|
+
'is_list': True # Whether processing a list of items
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
- `files_fields`: List of field paths (supports dot notation for nested fields)
|
|
148
|
+
- `is_list`: Set to `True` for paginated list responses
|
|
149
|
+
|
|
150
|
+
### How It Works
|
|
151
|
+
|
|
152
|
+
1. API returns responses with file URLs
|
|
153
|
+
2. `url_conversion` identifies fields containing URLs
|
|
154
|
+
3. Files are downloaded automatically to a temporary directory
|
|
155
|
+
4. URLs are replaced with local file paths
|
|
156
|
+
5. Your code receives responses with local paths instead of URLs
|
|
157
|
+
|
|
158
|
+
### Examples
|
|
159
|
+
|
|
160
|
+
```python
|
|
161
|
+
# Simple file field
|
|
162
|
+
url_conversion = {'files_fields': ['image_url'], 'is_list': True}
|
|
163
|
+
generator, count = client._list(
|
|
164
|
+
'api/photos/',
|
|
165
|
+
url_conversion=url_conversion,
|
|
166
|
+
list_all=True
|
|
167
|
+
)
|
|
168
|
+
for photo in generator:
|
|
169
|
+
# photo['image_url'] is now a local Path object, not a URL
|
|
170
|
+
with open(photo['image_url'], 'rb') as f:
|
|
171
|
+
process_image(f)
|
|
172
|
+
|
|
173
|
+
# Multiple file fields
|
|
174
|
+
url_conversion = {
|
|
175
|
+
'files_fields': ['thumbnail', 'full_image', 'raw_data'],
|
|
176
|
+
'is_list': True
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
# Nested fields using dot notation
|
|
180
|
+
url_conversion = {
|
|
181
|
+
'files_fields': ['data.files', 'metadata.preview', 'annotations.image'],
|
|
182
|
+
'is_list': True
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
# With async download for better performance
|
|
186
|
+
from synapse_sdk.utils.file import files_url_to_path_from_objs
|
|
187
|
+
|
|
188
|
+
results = client._list('api/data_units/')['results']
|
|
189
|
+
files_url_to_path_from_objs(
|
|
190
|
+
results,
|
|
191
|
+
files_fields=['files'],
|
|
192
|
+
is_list=True,
|
|
193
|
+
is_async=True # Download all files concurrently
|
|
194
|
+
)
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Performance Considerations
|
|
198
|
+
|
|
199
|
+
### Memory Efficiency
|
|
200
|
+
|
|
201
|
+
When working with large datasets, use generators instead of loading all results into memory:
|
|
202
|
+
|
|
203
|
+
```python
|
|
204
|
+
# ❌ Memory intensive - loads all results
|
|
205
|
+
all_tasks = list(client._list('api/tasks/', list_all=True)[0])
|
|
206
|
+
|
|
207
|
+
# ✅ Memory efficient - processes one at a time
|
|
208
|
+
generator, _ = client._list('api/tasks/', list_all=True)
|
|
209
|
+
for task in generator:
|
|
210
|
+
process_task(task)
|
|
211
|
+
# Task is processed and can be garbage collected
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Pagination Best Practices
|
|
215
|
+
|
|
216
|
+
1. **Use list_all=True** for datasets larger than one page
|
|
217
|
+
2. **Set appropriate page_size** in params if default (100) isn't optimal
|
|
218
|
+
3. **Use url_conversion** only when you need to process files
|
|
219
|
+
4. **Consider async downloads** for multiple files per item
|
|
220
|
+
|
|
221
|
+
```python
|
|
222
|
+
# Optimal pagination for large dataset
|
|
223
|
+
params = {'page_size': 50} # Smaller pages for faster first response
|
|
224
|
+
generator, total = client._list(
|
|
225
|
+
'api/large_dataset/',
|
|
226
|
+
list_all=True,
|
|
227
|
+
params=params
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
# Process with progress tracking
|
|
231
|
+
from tqdm import tqdm
|
|
232
|
+
for item in tqdm(generator, total=total):
|
|
233
|
+
process_item(item)
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Usage in Client Mixins
|
|
237
|
+
|
|
238
|
+
The BaseClient pagination methods are used internally by all client mixins:
|
|
239
|
+
|
|
240
|
+
```python
|
|
241
|
+
# DataCollectionClientMixin
|
|
242
|
+
def list_data_units(self, params=None, url_conversion=None, list_all=False):
|
|
243
|
+
return self._list('data_units/', params=params,
|
|
244
|
+
url_conversion=url_conversion, list_all=list_all)
|
|
245
|
+
|
|
246
|
+
# AnnotationClientMixin
|
|
247
|
+
def list_tasks(self, params=None, url_conversion=None, list_all=False):
|
|
248
|
+
return self._list('sdk/tasks/', params=params,
|
|
249
|
+
url_conversion=url_conversion, list_all=list_all)
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## See Also
|
|
253
|
+
|
|
254
|
+
- [BackendClient](./backend.md) - Main client implementation
|
|
255
|
+
- [AgentClient](./agent.md) - Agent-specific operations
|
|
256
|
+
- [DataCollectionClientMixin](./data-collection-mixin.md) - Data and file operations
|
|
257
|
+
- [AnnotationClientMixin](./annotation-mixin.md) - Task and annotation management
|