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.

Files changed (307) hide show
  1. synapse_sdk/__init__.py +24 -0
  2. synapse_sdk/cli/__init__.py +308 -5
  3. synapse_sdk/cli/alias/utils.py +1 -1
  4. synapse_sdk/cli/code_server.py +687 -0
  5. synapse_sdk/cli/config.py +440 -0
  6. synapse_sdk/cli/devtools.py +90 -0
  7. synapse_sdk/cli/plugin/publish.py +23 -15
  8. synapse_sdk/clients/agent/__init__.py +9 -3
  9. synapse_sdk/clients/agent/container.py +133 -0
  10. synapse_sdk/clients/agent/core.py +19 -0
  11. synapse_sdk/clients/agent/ray.py +298 -9
  12. synapse_sdk/clients/backend/__init__.py +28 -12
  13. synapse_sdk/clients/backend/annotation.py +9 -1
  14. synapse_sdk/clients/backend/core.py +31 -4
  15. synapse_sdk/clients/backend/data_collection.py +186 -0
  16. synapse_sdk/clients/backend/hitl.py +1 -1
  17. synapse_sdk/clients/backend/integration.py +4 -3
  18. synapse_sdk/clients/backend/ml.py +1 -1
  19. synapse_sdk/clients/backend/models.py +35 -1
  20. synapse_sdk/clients/base.py +309 -36
  21. synapse_sdk/clients/ray/serve.py +2 -0
  22. synapse_sdk/devtools/__init__.py +0 -0
  23. synapse_sdk/devtools/config.py +94 -0
  24. synapse_sdk/devtools/docs/.gitignore +20 -0
  25. synapse_sdk/devtools/docs/README.md +41 -0
  26. synapse_sdk/devtools/docs/blog/2019-05-28-first-blog-post.md +12 -0
  27. synapse_sdk/devtools/docs/blog/2019-05-29-long-blog-post.md +44 -0
  28. synapse_sdk/devtools/docs/blog/2021-08-01-mdx-blog-post.mdx +24 -0
  29. synapse_sdk/devtools/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg +0 -0
  30. synapse_sdk/devtools/docs/blog/2021-08-26-welcome/index.md +29 -0
  31. synapse_sdk/devtools/docs/blog/authors.yml +25 -0
  32. synapse_sdk/devtools/docs/blog/tags.yml +19 -0
  33. synapse_sdk/devtools/docs/docs/api/clients/agent.md +43 -0
  34. synapse_sdk/devtools/docs/docs/api/clients/annotation-mixin.md +378 -0
  35. synapse_sdk/devtools/docs/docs/api/clients/backend.md +420 -0
  36. synapse_sdk/devtools/docs/docs/api/clients/base.md +257 -0
  37. synapse_sdk/devtools/docs/docs/api/clients/core-mixin.md +477 -0
  38. synapse_sdk/devtools/docs/docs/api/clients/data-collection-mixin.md +422 -0
  39. synapse_sdk/devtools/docs/docs/api/clients/hitl-mixin.md +554 -0
  40. synapse_sdk/devtools/docs/docs/api/clients/index.md +391 -0
  41. synapse_sdk/devtools/docs/docs/api/clients/integration-mixin.md +571 -0
  42. synapse_sdk/devtools/docs/docs/api/clients/ml-mixin.md +578 -0
  43. synapse_sdk/devtools/docs/docs/api/clients/ray.md +342 -0
  44. synapse_sdk/devtools/docs/docs/api/index.md +52 -0
  45. synapse_sdk/devtools/docs/docs/api/plugins/categories.md +43 -0
  46. synapse_sdk/devtools/docs/docs/api/plugins/models.md +114 -0
  47. synapse_sdk/devtools/docs/docs/api/plugins/utils.md +328 -0
  48. synapse_sdk/devtools/docs/docs/categories.md +0 -0
  49. synapse_sdk/devtools/docs/docs/cli-usage.md +280 -0
  50. synapse_sdk/devtools/docs/docs/concepts/index.md +38 -0
  51. synapse_sdk/devtools/docs/docs/configuration.md +83 -0
  52. synapse_sdk/devtools/docs/docs/contributing.md +306 -0
  53. synapse_sdk/devtools/docs/docs/examples/index.md +29 -0
  54. synapse_sdk/devtools/docs/docs/faq.md +179 -0
  55. synapse_sdk/devtools/docs/docs/features/converters/index.md +455 -0
  56. synapse_sdk/devtools/docs/docs/features/index.md +24 -0
  57. synapse_sdk/devtools/docs/docs/features/utils/file.md +415 -0
  58. synapse_sdk/devtools/docs/docs/features/utils/network.md +378 -0
  59. synapse_sdk/devtools/docs/docs/features/utils/storage.md +57 -0
  60. synapse_sdk/devtools/docs/docs/features/utils/types.md +51 -0
  61. synapse_sdk/devtools/docs/docs/installation.md +94 -0
  62. synapse_sdk/devtools/docs/docs/introduction.md +47 -0
  63. synapse_sdk/devtools/docs/docs/plugins/categories/neural-net-plugins/train-action-overview.md +814 -0
  64. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
  65. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
  66. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
  67. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
  68. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
  69. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
  70. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
  71. synapse_sdk/devtools/docs/docs/plugins/export-plugins.md +1092 -0
  72. synapse_sdk/devtools/docs/docs/plugins/plugins.md +852 -0
  73. synapse_sdk/devtools/docs/docs/quickstart.md +78 -0
  74. synapse_sdk/devtools/docs/docs/troubleshooting.md +519 -0
  75. synapse_sdk/devtools/docs/docs/tutorial-basics/_category_.json +8 -0
  76. synapse_sdk/devtools/docs/docs/tutorial-basics/congratulations.md +23 -0
  77. synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-blog-post.md +34 -0
  78. synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-document.md +57 -0
  79. synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-page.md +43 -0
  80. synapse_sdk/devtools/docs/docs/tutorial-basics/deploy-your-site.md +31 -0
  81. synapse_sdk/devtools/docs/docs/tutorial-basics/markdown-features.mdx +152 -0
  82. synapse_sdk/devtools/docs/docs/tutorial-extras/_category_.json +7 -0
  83. synapse_sdk/devtools/docs/docs/tutorial-extras/img/docsVersionDropdown.png +0 -0
  84. synapse_sdk/devtools/docs/docs/tutorial-extras/img/localeDropdown.png +0 -0
  85. synapse_sdk/devtools/docs/docs/tutorial-extras/manage-docs-versions.md +55 -0
  86. synapse_sdk/devtools/docs/docs/tutorial-extras/translate-your-site.md +88 -0
  87. synapse_sdk/devtools/docs/docusaurus.config.ts +148 -0
  88. synapse_sdk/devtools/docs/i18n/ko/code.json +325 -0
  89. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/agent.md +43 -0
  90. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/annotation-mixin.md +289 -0
  91. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/backend.md +420 -0
  92. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/base.md +257 -0
  93. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/core-mixin.md +417 -0
  94. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/data-collection-mixin.md +356 -0
  95. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/hitl-mixin.md +192 -0
  96. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/index.md +391 -0
  97. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/integration-mixin.md +479 -0
  98. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ml-mixin.md +284 -0
  99. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ray.md +342 -0
  100. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/index.md +52 -0
  101. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/plugins/models.md +114 -0
  102. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/categories.md +0 -0
  103. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/cli-usage.md +280 -0
  104. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/concepts/index.md +38 -0
  105. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/configuration.md +83 -0
  106. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/contributing.md +306 -0
  107. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/examples/index.md +29 -0
  108. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/faq.md +179 -0
  109. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/converters/index.md +30 -0
  110. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/index.md +24 -0
  111. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/file.md +415 -0
  112. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/network.md +378 -0
  113. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/storage.md +60 -0
  114. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/types.md +51 -0
  115. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/installation.md +94 -0
  116. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/introduction.md +47 -0
  117. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/neural-net-plugins/train-action-overview.md +815 -0
  118. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
  119. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
  120. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
  121. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
  122. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
  123. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
  124. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
  125. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/export-plugins.md +1092 -0
  126. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/plugins.md +117 -0
  127. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/quickstart.md +78 -0
  128. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/troubleshooting.md +519 -0
  129. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current.json +34 -0
  130. synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/footer.json +42 -0
  131. synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/navbar.json +18 -0
  132. synapse_sdk/devtools/docs/package-lock.json +18784 -0
  133. synapse_sdk/devtools/docs/package.json +48 -0
  134. synapse_sdk/devtools/docs/sidebars.ts +122 -0
  135. synapse_sdk/devtools/docs/src/components/HomepageFeatures/index.tsx +71 -0
  136. synapse_sdk/devtools/docs/src/components/HomepageFeatures/styles.module.css +11 -0
  137. synapse_sdk/devtools/docs/src/css/custom.css +30 -0
  138. synapse_sdk/devtools/docs/src/pages/index.module.css +23 -0
  139. synapse_sdk/devtools/docs/src/pages/index.tsx +21 -0
  140. synapse_sdk/devtools/docs/src/pages/markdown-page.md +7 -0
  141. synapse_sdk/devtools/docs/static/.nojekyll +0 -0
  142. synapse_sdk/devtools/docs/static/img/docusaurus-social-card.jpg +0 -0
  143. synapse_sdk/devtools/docs/static/img/docusaurus.png +0 -0
  144. synapse_sdk/devtools/docs/static/img/favicon.ico +0 -0
  145. synapse_sdk/devtools/docs/static/img/logo.png +0 -0
  146. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_mountain.svg +171 -0
  147. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_react.svg +170 -0
  148. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_tree.svg +40 -0
  149. synapse_sdk/devtools/docs/tsconfig.json +8 -0
  150. synapse_sdk/devtools/server.py +41 -0
  151. synapse_sdk/devtools/streamlit_app/__init__.py +5 -0
  152. synapse_sdk/devtools/streamlit_app/app.py +128 -0
  153. synapse_sdk/devtools/streamlit_app/services/__init__.py +11 -0
  154. synapse_sdk/devtools/streamlit_app/services/job_service.py +233 -0
  155. synapse_sdk/devtools/streamlit_app/services/plugin_service.py +236 -0
  156. synapse_sdk/devtools/streamlit_app/services/serve_service.py +95 -0
  157. synapse_sdk/devtools/streamlit_app/ui/__init__.py +15 -0
  158. synapse_sdk/devtools/streamlit_app/ui/config_tab.py +76 -0
  159. synapse_sdk/devtools/streamlit_app/ui/deployment_tab.py +66 -0
  160. synapse_sdk/devtools/streamlit_app/ui/http_tab.py +125 -0
  161. synapse_sdk/devtools/streamlit_app/ui/jobs_tab.py +573 -0
  162. synapse_sdk/devtools/streamlit_app/ui/serve_tab.py +346 -0
  163. synapse_sdk/devtools/streamlit_app/ui/status_bar.py +118 -0
  164. synapse_sdk/devtools/streamlit_app/utils/__init__.py +40 -0
  165. synapse_sdk/devtools/streamlit_app/utils/json_viewer.py +197 -0
  166. synapse_sdk/devtools/streamlit_app/utils/log_formatter.py +38 -0
  167. synapse_sdk/devtools/streamlit_app/utils/styles.py +241 -0
  168. synapse_sdk/devtools/streamlit_app/utils/ui_components.py +289 -0
  169. synapse_sdk/devtools/streamlit_app.py +10 -0
  170. synapse_sdk/loggers.py +65 -7
  171. synapse_sdk/plugins/README.md +1340 -0
  172. synapse_sdk/plugins/categories/base.py +73 -11
  173. synapse_sdk/plugins/categories/data_validation/actions/validation.py +72 -0
  174. synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +33 -5
  175. synapse_sdk/plugins/categories/export/actions/__init__.py +3 -0
  176. synapse_sdk/plugins/categories/export/actions/export/__init__.py +28 -0
  177. synapse_sdk/plugins/categories/export/actions/export/action.py +165 -0
  178. synapse_sdk/plugins/categories/export/actions/export/enums.py +113 -0
  179. synapse_sdk/plugins/categories/export/actions/export/exceptions.py +53 -0
  180. synapse_sdk/plugins/categories/export/actions/export/models.py +74 -0
  181. synapse_sdk/plugins/categories/export/actions/export/run.py +195 -0
  182. synapse_sdk/plugins/categories/export/actions/{export.py → export/utils.py} +47 -82
  183. synapse_sdk/plugins/categories/export/templates/config.yaml +19 -1
  184. synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +390 -0
  185. synapse_sdk/plugins/categories/export/templates/plugin/export.py +153 -129
  186. synapse_sdk/plugins/categories/neural_net/actions/deployment.py +9 -62
  187. synapse_sdk/plugins/categories/neural_net/actions/train.py +1062 -32
  188. synapse_sdk/plugins/categories/neural_net/actions/tune.py +534 -0
  189. synapse_sdk/plugins/categories/neural_net/templates/config.yaml +27 -5
  190. synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +26 -10
  191. synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +4 -0
  192. synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation/__init__.py +3 -0
  193. synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation/action.py +10 -0
  194. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/__init__.py +28 -0
  195. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/action.py +145 -0
  196. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/enums.py +269 -0
  197. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/exceptions.py +14 -0
  198. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/factory.py +76 -0
  199. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/models.py +97 -0
  200. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/orchestrator.py +250 -0
  201. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/run.py +64 -0
  202. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/__init__.py +17 -0
  203. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/annotation.py +287 -0
  204. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/base.py +170 -0
  205. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/extraction.py +83 -0
  206. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/metrics.py +87 -0
  207. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/preprocessor.py +127 -0
  208. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/validation.py +143 -0
  209. synapse_sdk/plugins/categories/pre_annotation/actions/to_task.py +966 -0
  210. synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +19 -0
  211. synapse_sdk/plugins/categories/pre_annotation/templates/plugin/to_task.py +40 -0
  212. synapse_sdk/plugins/categories/upload/actions/upload/__init__.py +19 -0
  213. synapse_sdk/plugins/categories/upload/actions/upload/action.py +232 -0
  214. synapse_sdk/plugins/categories/upload/actions/upload/context.py +185 -0
  215. synapse_sdk/plugins/categories/upload/actions/upload/enums.py +471 -0
  216. synapse_sdk/plugins/categories/upload/actions/upload/exceptions.py +36 -0
  217. synapse_sdk/plugins/categories/upload/actions/upload/factory.py +138 -0
  218. synapse_sdk/plugins/categories/upload/actions/upload/models.py +203 -0
  219. synapse_sdk/plugins/categories/upload/actions/upload/orchestrator.py +183 -0
  220. synapse_sdk/plugins/categories/upload/actions/upload/registry.py +113 -0
  221. synapse_sdk/plugins/categories/upload/actions/upload/run.py +179 -0
  222. synapse_sdk/plugins/categories/upload/actions/upload/steps/__init__.py +1 -0
  223. synapse_sdk/plugins/categories/upload/actions/upload/steps/base.py +107 -0
  224. synapse_sdk/plugins/categories/upload/actions/upload/steps/cleanup.py +62 -0
  225. synapse_sdk/plugins/categories/upload/actions/upload/steps/collection.py +63 -0
  226. synapse_sdk/plugins/categories/upload/actions/upload/steps/generate.py +84 -0
  227. synapse_sdk/plugins/categories/upload/actions/upload/steps/initialize.py +82 -0
  228. synapse_sdk/plugins/categories/upload/actions/upload/steps/metadata.py +235 -0
  229. synapse_sdk/plugins/categories/upload/actions/upload/steps/organize.py +203 -0
  230. synapse_sdk/plugins/categories/upload/actions/upload/steps/upload.py +97 -0
  231. synapse_sdk/plugins/categories/upload/actions/upload/steps/validate.py +71 -0
  232. synapse_sdk/plugins/categories/upload/actions/upload/strategies/__init__.py +1 -0
  233. synapse_sdk/plugins/categories/upload/actions/upload/strategies/base.py +82 -0
  234. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/__init__.py +1 -0
  235. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/batch.py +39 -0
  236. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/single.py +29 -0
  237. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/__init__.py +1 -0
  238. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/flat.py +258 -0
  239. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/recursive.py +281 -0
  240. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/__init__.py +1 -0
  241. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/excel.py +174 -0
  242. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/none.py +16 -0
  243. synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/__init__.py +1 -0
  244. synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/sync.py +84 -0
  245. synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/__init__.py +1 -0
  246. synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/default.py +60 -0
  247. synapse_sdk/plugins/categories/upload/actions/upload/utils.py +250 -0
  248. synapse_sdk/plugins/categories/upload/templates/README.md +470 -0
  249. synapse_sdk/plugins/categories/upload/templates/config.yaml +29 -2
  250. synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +294 -0
  251. synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +88 -30
  252. synapse_sdk/plugins/models.py +122 -16
  253. synapse_sdk/plugins/templates/plugin-config-schema.json +406 -0
  254. synapse_sdk/plugins/templates/schema.json +491 -0
  255. synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +1 -1
  256. synapse_sdk/plugins/utils/__init__.py +46 -0
  257. synapse_sdk/plugins/utils/actions.py +119 -0
  258. synapse_sdk/plugins/utils/config.py +203 -0
  259. synapse_sdk/plugins/{utils.py → utils/legacy.py} +26 -46
  260. synapse_sdk/plugins/utils/ray_gcs.py +66 -0
  261. synapse_sdk/plugins/utils/registry.py +58 -0
  262. synapse_sdk/shared/__init__.py +25 -0
  263. synapse_sdk/shared/enums.py +93 -0
  264. synapse_sdk/utils/converters/__init__.py +240 -0
  265. synapse_sdk/utils/converters/coco/__init__.py +0 -0
  266. synapse_sdk/utils/converters/coco/from_dm.py +322 -0
  267. synapse_sdk/utils/converters/coco/to_dm.py +215 -0
  268. synapse_sdk/utils/converters/dm/__init__.py +56 -0
  269. synapse_sdk/utils/converters/dm/from_v1.py +627 -0
  270. synapse_sdk/utils/converters/dm/to_v1.py +367 -0
  271. synapse_sdk/utils/converters/pascal/__init__.py +0 -0
  272. synapse_sdk/utils/converters/pascal/from_dm.py +244 -0
  273. synapse_sdk/utils/converters/pascal/to_dm.py +214 -0
  274. synapse_sdk/utils/converters/yolo/__init__.py +0 -0
  275. synapse_sdk/utils/converters/yolo/from_dm.py +384 -0
  276. synapse_sdk/utils/converters/yolo/to_dm.py +267 -0
  277. synapse_sdk/utils/dataset.py +46 -0
  278. synapse_sdk/utils/encryption.py +158 -0
  279. synapse_sdk/utils/file/__init__.py +39 -0
  280. synapse_sdk/utils/file/archive.py +32 -0
  281. synapse_sdk/utils/file/checksum.py +56 -0
  282. synapse_sdk/utils/file/chunking.py +31 -0
  283. synapse_sdk/utils/file/download.py +385 -0
  284. synapse_sdk/utils/file/encoding.py +40 -0
  285. synapse_sdk/utils/file/io.py +22 -0
  286. synapse_sdk/utils/file/video/__init__.py +29 -0
  287. synapse_sdk/utils/file/video/transcode.py +307 -0
  288. synapse_sdk/utils/{file.py → file.py.backup} +84 -2
  289. synapse_sdk/utils/http.py +138 -0
  290. synapse_sdk/utils/network.py +293 -0
  291. synapse_sdk/utils/storage/__init__.py +36 -2
  292. synapse_sdk/utils/storage/providers/__init__.py +141 -0
  293. synapse_sdk/utils/storage/providers/file_system.py +134 -0
  294. synapse_sdk/utils/storage/providers/http.py +190 -0
  295. synapse_sdk/utils/storage/providers/s3.py +54 -6
  296. synapse_sdk/utils/storage/providers/sftp.py +31 -0
  297. synapse_sdk/utils/storage/registry.py +6 -0
  298. synapse_sdk-2025.11.7.dist-info/METADATA +122 -0
  299. synapse_sdk-2025.11.7.dist-info/RECORD +386 -0
  300. {synapse_sdk-1.0.0a35.dist-info → synapse_sdk-2025.11.7.dist-info}/WHEEL +1 -1
  301. synapse_sdk/clients/backend/dataset.py +0 -102
  302. synapse_sdk/plugins/categories/upload/actions/upload.py +0 -293
  303. synapse_sdk-1.0.0a35.dist-info/METADATA +0 -47
  304. synapse_sdk-1.0.0a35.dist-info/RECORD +0 -137
  305. {synapse_sdk-1.0.0a35.dist-info → synapse_sdk-2025.11.7.dist-info}/entry_points.txt +0 -0
  306. {synapse_sdk-1.0.0a35.dist-info → synapse_sdk-2025.11.7.dist-info}/licenses/LICENSE +0 -0
  307. {synapse_sdk-1.0.0a35.dist-info → synapse_sdk-2025.11.7.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,390 @@
1
+ import json
2
+ from pathlib import Path
3
+ from typing import Generator
4
+
5
+ import requests
6
+
7
+ from synapse_sdk.plugins.categories.export.actions.export.enums import ExportStatus
8
+
9
+
10
+ class BaseExporter:
11
+ """Base class for export plugins with common functionality.
12
+
13
+ This class handles common tasks like progress tracking, logging, and metrics
14
+ that are shared across all export plugins. Plugin developers should inherit
15
+ from this class and implement the required methods for their specific logic.
16
+
17
+ Core Methods:
18
+ export(): Main export method - handles the complete export workflow
19
+ process_data_conversion(): Handle data conversion pipeline
20
+ process_file_saving(): Handle file saving operations (can be overridden)
21
+ setup_output_directories(): Setup output directories (can be overridden)
22
+
23
+ Required Methods (should be implemented by subclasses):
24
+ convert_data(): Transform data during export
25
+
26
+ Optional Methods (can be overridden by subclasses):
27
+ save_original_file(): Save original files from export items
28
+ save_as_json(): Save data as JSON files
29
+ before_convert(): Pre-process data before conversion
30
+ after_convert(): Post-process data after conversion
31
+ process_file_saving(): Custom file saving logic
32
+
33
+ Helper Methods:
34
+ _process_original_file_saving(): Handle original file saving with metrics
35
+ _process_json_file_saving(): Handle JSON file saving with metrics
36
+
37
+ Auto-provided Utilities:
38
+ Progress tracking via self.run.set_progress()
39
+ Logging via self.run.log_message() and other run methods
40
+ Error handling and metrics collection via self.run methods
41
+ """
42
+
43
+ def __init__(self, run, export_items: Generator, path_root: Path, **params):
44
+ """Initialize the base export class.
45
+
46
+ Args:
47
+ run: Plugin run object with logging capabilities.
48
+ export_items (generator): Export items generator
49
+ path_root: pathlib object, the path to export
50
+ **params: Additional parameters
51
+ """
52
+ self.run = run
53
+ self.export_items = export_items
54
+ self.path_root = path_root
55
+ self.params = params
56
+
57
+ def _create_unique_export_path(self, base_name: str) -> Path:
58
+ """Create a unique export path to avoid conflicts."""
59
+ export_path = self.path_root / base_name
60
+ unique_export_path = export_path
61
+ counter = 1
62
+ while unique_export_path.exists():
63
+ unique_export_path = export_path.with_name(f'{export_path.name}({counter})')
64
+ counter += 1
65
+ unique_export_path.mkdir(parents=True)
66
+ return unique_export_path
67
+
68
+ def _save_error_list(self, export_path: Path, errors_json_file_list: list, errors_original_file_list: list):
69
+ """Save error list files if there are any errors."""
70
+ if len(errors_json_file_list) > 0 or len(errors_original_file_list) > 0:
71
+ export_error_file = {'json_file_name': errors_json_file_list, 'origin_file_name': errors_original_file_list}
72
+ with (export_path / 'error_file_list.json').open('w', encoding='utf-8') as f:
73
+ json.dump(export_error_file, f, indent=4, ensure_ascii=False)
74
+
75
+ def get_original_file_name(self, files):
76
+ """Retrieve the original file path from the given file information.
77
+
78
+ Args:
79
+ files (dict): A dictionary containing file information
80
+
81
+ Returns:
82
+ file_name (str): The original file name extracted from the file information.
83
+ """
84
+ return files['file_name_original']
85
+
86
+ def save_original_file(self, result, base_path, error_file_list):
87
+ """Saves the original file.
88
+
89
+ Args:
90
+ result (dict): API response data containing file information.
91
+ base_path (Path): The directory where the file will be saved.
92
+ error_file_list (list): A list to store error files.
93
+ """
94
+ file_url = result['files']['url']
95
+ file_name = self.get_original_file_name(result['files'])
96
+ response = requests.get(file_url)
97
+ file_info = {'file_name': file_name}
98
+ error_msg = ''
99
+ try:
100
+ with (base_path / file_name).open('wb') as file:
101
+ file.write(response.content)
102
+ status = ExportStatus.SUCCESS
103
+ except Exception as e:
104
+ error_msg = str(e)
105
+ error_file_list.append([file_name, error_msg])
106
+ status = ExportStatus.FAILED
107
+
108
+ self.run.export_log_original_file(result['id'], file_info, status, error_msg)
109
+ return status
110
+
111
+ def save_as_json(self, result, base_path, error_file_list):
112
+ """Saves the data as a JSON file.
113
+
114
+ Args:
115
+ result (dict): API response data containing file information.
116
+ base_path (Path): The directory where the file will be saved.
117
+ error_file_list (list): A list to store error files.
118
+ """
119
+ file_name = Path(self.get_original_file_name(result['files'])).stem
120
+ json_data = result['data']
121
+ file_info = {'file_name': f'{file_name}.json'}
122
+
123
+ if json_data is None:
124
+ error_msg = 'data is Null'
125
+ error_file_list.append([f'{file_name}.json', error_msg])
126
+ status = ExportStatus.FAILED
127
+ self.run.log_export_event('NULL_DATA_DETECTED', result['id'])
128
+ self.run.export_log_json_file(result['id'], file_info, status, error_msg)
129
+ return status
130
+
131
+ error_msg = ''
132
+ try:
133
+ with (base_path / f'{file_name}.json').open('w', encoding='utf-8') as f:
134
+ json.dump(json_data, f, indent=4, ensure_ascii=False)
135
+ status = ExportStatus.SUCCESS
136
+ except Exception as e:
137
+ error_msg = str(e)
138
+ error_file_list.append([f'{file_name}.json', str(e)])
139
+ status = ExportStatus.FAILED
140
+
141
+ self.run.export_log_json_file(result['id'], file_info, status, error_msg)
142
+ return status
143
+
144
+ # Abstract methods that should be implemented by subclasses
145
+ def convert_data(self, data):
146
+ """Converts the data. Should be implemented by subclasses."""
147
+ return data
148
+
149
+ def before_convert(self, data):
150
+ """Preprocesses the data before conversion. Should be implemented by subclasses."""
151
+ return data
152
+
153
+ def after_convert(self, data):
154
+ """Post-processes the data after conversion. Should be implemented by subclasses."""
155
+ return data
156
+
157
+ def _process_original_file_saving(
158
+ self, final_data, origin_files_output_path, errors_original_file_list, original_file_metrics_record, no
159
+ ):
160
+ """Process original file saving with metrics tracking.
161
+
162
+ Args:
163
+ final_data: Converted data to save
164
+ origin_files_output_path: Path to save original files
165
+ errors_original_file_list: List to collect errors
166
+ original_file_metrics_record: Metrics record for tracking
167
+ no: Current item number for logging
168
+
169
+ Returns:
170
+ bool: True if processing should continue, False if should skip to next item
171
+ """
172
+ if no == 1:
173
+ self.run.log_message('Saving original file.')
174
+ original_status = self.save_original_file(final_data, origin_files_output_path, errors_original_file_list)
175
+
176
+ original_file_metrics_record.stand_by -= 1
177
+ if original_status == ExportStatus.FAILED:
178
+ original_file_metrics_record.failed += 1
179
+ return False # Skip to next item
180
+ else:
181
+ original_file_metrics_record.success += 1
182
+ return True # Continue processing
183
+
184
+ def _process_json_file_saving(
185
+ self, final_data, json_output_path, errors_json_file_list, data_file_metrics_record, no
186
+ ):
187
+ """Process JSON file saving with metrics tracking.
188
+
189
+ Args:
190
+ final_data: Converted data to save
191
+ json_output_path: Path to save JSON files
192
+ errors_json_file_list: List to collect errors
193
+ data_file_metrics_record: Metrics record for tracking
194
+ no: Current item number for logging
195
+
196
+ Returns:
197
+ bool: True if processing should continue, False if should skip to next item
198
+ """
199
+ if no == 1:
200
+ self.run.log_message('Saving json file.')
201
+ data_status = self.save_as_json(final_data, json_output_path, errors_json_file_list)
202
+
203
+ data_file_metrics_record.stand_by -= 1
204
+ if data_status == ExportStatus.FAILED:
205
+ data_file_metrics_record.failed += 1
206
+ return False # Skip to next item
207
+ else:
208
+ data_file_metrics_record.success += 1
209
+ return True # Continue processing
210
+
211
+ def setup_output_directories(self, unique_export_path, save_original_file_flag):
212
+ """Setup output directories for export.
213
+
214
+ This method can be overridden by subclasses to customize directory structure.
215
+ The default implementation creates 'json' and 'origin_files' directories.
216
+
217
+ Args:
218
+ unique_export_path: Base path for export
219
+ save_original_file_flag: Whether original files will be saved
220
+
221
+ Returns:
222
+ dict: Dictionary containing paths for different file types
223
+ Example: {'json_output_path': Path, 'origin_files_output_path': Path}
224
+ """
225
+ # Path to save JSON files
226
+ json_output_path = unique_export_path / 'json'
227
+ json_output_path.mkdir(parents=True, exist_ok=True)
228
+
229
+ output_paths = {'json_output_path': json_output_path}
230
+
231
+ # Path to save original files
232
+ if save_original_file_flag:
233
+ origin_files_output_path = unique_export_path / 'origin_files'
234
+ origin_files_output_path.mkdir(parents=True, exist_ok=True)
235
+ output_paths['origin_files_output_path'] = origin_files_output_path
236
+
237
+ return output_paths
238
+
239
+ def process_data_conversion(self, export_item):
240
+ """Process data conversion pipeline for a single export item.
241
+
242
+ This method handles the complete data conversion process:
243
+ before_convert -> convert_data -> after_convert
244
+
245
+ Args:
246
+ export_item: Single export item to process
247
+
248
+ Returns:
249
+ Final processed data ready for saving
250
+ """
251
+ preprocessed_data = self.before_convert(export_item)
252
+ converted_data = self.convert_data(preprocessed_data)
253
+ final_data = self.after_convert(converted_data)
254
+ return final_data
255
+
256
+ def process_file_saving(
257
+ self,
258
+ final_data,
259
+ unique_export_path,
260
+ save_original_file_flag,
261
+ errors_json_file_list,
262
+ errors_original_file_list,
263
+ original_file_metrics_record,
264
+ data_file_metrics_record,
265
+ no,
266
+ ):
267
+ """Process file saving operations for a single export item.
268
+
269
+ This method can be overridden by subclasses to implement custom file saving logic.
270
+ The default implementation saves original files and JSON files based on configuration.
271
+
272
+ Args:
273
+ final_data: Converted data ready for saving
274
+ unique_export_path: Base path for export
275
+ save_original_file_flag: Whether to save original files
276
+ errors_json_file_list: List to collect JSON file errors
277
+ errors_original_file_list: List to collect original file errors
278
+ original_file_metrics_record: Metrics record for original files
279
+ data_file_metrics_record: Metrics record for JSON files
280
+ no: Current item number for logging
281
+
282
+ Returns:
283
+ bool: True if processing should continue, False if should skip to next item
284
+ """
285
+ # Get paths from setup (directories already created)
286
+ json_output_path = unique_export_path / 'json'
287
+ origin_files_output_path = unique_export_path / 'origin_files' if save_original_file_flag else None
288
+
289
+ if save_original_file_flag:
290
+ should_continue = self._process_original_file_saving(
291
+ final_data, origin_files_output_path, errors_original_file_list, original_file_metrics_record, no
292
+ )
293
+ if not should_continue:
294
+ return False
295
+
296
+ self.run.log_metrics(record=original_file_metrics_record, category='original_file')
297
+
298
+ # Extract data as JSON files
299
+ should_continue = self._process_json_file_saving(
300
+ final_data, json_output_path, errors_json_file_list, data_file_metrics_record, no
301
+ )
302
+ if not should_continue:
303
+ return False
304
+
305
+ self.run.log_metrics(record=data_file_metrics_record, category='data_file')
306
+
307
+ return True
308
+
309
+ def additional_file_saving(self, unique_export_path):
310
+ """Save additional files after processing all export items.
311
+
312
+ This method is called after the main export loop completes and is intended
313
+ for saving files that need to be created based on the collective data from
314
+ all processed export items (e.g., metadata files, configuration files,
315
+ summary files, etc.).
316
+
317
+ Args:
318
+ unique_export_path (str): The unique export directory path where
319
+ additional files should be saved.
320
+ """
321
+ pass
322
+
323
+ def export(self, export_items=None, results=None, **_kwargs) -> dict:
324
+ """Main export method that can be overridden by subclasses for custom logic.
325
+
326
+ This default implementation provides standard file saving functionality.
327
+ Subclasses can override this method to implement custom export logic
328
+ while still using the helper methods for specific operations.
329
+
330
+
331
+ Subclasses can override process_file_saving() method to implement custom file saving logic.
332
+
333
+ Args:
334
+ export_items: Optional export items to process. If not provided, uses self.export_items.
335
+ results: Optional results data to process alongside export_items.
336
+ **kwargs: Additional parameters for export customization.
337
+
338
+ Returns:
339
+ dict: Export result containing export path and status information.
340
+ """
341
+ # Use provided export_items or fall back to instance variable
342
+ items_to_process = export_items if export_items is not None else self.export_items
343
+
344
+ unique_export_path = self._create_unique_export_path(self.params['name'])
345
+
346
+ self.run.log_message('Starting export process.')
347
+
348
+ save_original_file_flag = self.params.get('save_original_file')
349
+ errors_json_file_list = []
350
+ errors_original_file_list = []
351
+
352
+ # Setup output directories (can be customized by subclasses)
353
+ self.setup_output_directories(unique_export_path, save_original_file_flag)
354
+
355
+ total = self.params['count']
356
+
357
+ original_file_metrics_record = self.run.MetricsRecord(stand_by=total, success=0, failed=0)
358
+ data_file_metrics_record = self.run.MetricsRecord(stand_by=total, success=0, failed=0)
359
+
360
+ # progress init
361
+ self.run.set_progress(0, total, category='dataset_conversion')
362
+
363
+ for no, export_item in enumerate(items_to_process, start=1):
364
+ self.run.set_progress(min(no, total), total, category='dataset_conversion')
365
+ if no == 1:
366
+ self.run.log_message('Converting dataset.')
367
+
368
+ final_data = self.process_data_conversion(export_item)
369
+
370
+ # Process file saving (can be overridden by subclasses)
371
+ should_continue = self.process_file_saving(
372
+ final_data,
373
+ unique_export_path,
374
+ save_original_file_flag,
375
+ errors_json_file_list,
376
+ errors_original_file_list,
377
+ original_file_metrics_record,
378
+ data_file_metrics_record,
379
+ no,
380
+ )
381
+ if not should_continue:
382
+ continue
383
+
384
+ self.additional_file_saving(unique_export_path)
385
+ self.run.end_log()
386
+
387
+ # Save error list files
388
+ self._save_error_list(unique_export_path, errors_json_file_list, errors_original_file_list)
389
+
390
+ return {'export_path': str(self.path_root)}