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,544 @@
1
+ ---
2
+ id: upload-plugin-overview
3
+ title: 업로드 플러그인 개요
4
+ sidebar_position: 1
5
+ ---
6
+
7
+ # 업로드 플러그인 개요
8
+
9
+ 업로드 플러그인은 메타데이터 지원, 보안 검증, 체계적인 데이터 단위 생성을 통해 Synapse 플랫폼으로 파일을 처리하는 포괄적인 파일 업로드 및 데이터 수집 작업을 제공합니다.
10
+
11
+ ## 빠른 개요
12
+
13
+ **카테고리:** 업로드
14
+ **사용 가능한 작업:** `upload`
15
+ **실행 방법:** 작업 기반 실행
16
+
17
+ ## 주요 특징
18
+
19
+ - **다중 경로 모드 지원**: 각 자산에 대한 개별 경로 설정으로 다른 위치에서 파일 업로드
20
+ - **Excel 메타데이터 통합**: Excel 파일에서 자동 메타데이터 주석 달기
21
+ - **유연한 파일 구성**: 다양한 사용 사례를 위한 단일 경로 또는 다중 경로 모드
22
+ - **배치 처리**: 대규모 업로드를 위한 최적화된 배치 처리
23
+ - **진행 상황 추적**: 워크플로우 단계 전반에 걸친 실시간 진행 상황 업데이트
24
+ - **보안 검증**: 포괄적인 파일 및 Excel 보안 검사
25
+
26
+ ## 사용 사례
27
+
28
+ - 메타데이터 주석이 포함된 대량 파일 업로드
29
+ - Excel 기반 메타데이터 매핑 및 검증
30
+ - 재귀적 디렉토리 처리
31
+ - 유형 기반 파일 구성
32
+ - 배치 데이터 단위 생성
33
+ - 다중 소스 데이터셋 업로드 (다른 위치의 센서, 카메라, 주석)
34
+ - 크기 및 내용 검증을 통한 보안 파일 처리
35
+
36
+ ## 지원되는 업로드 소스
37
+
38
+ - 로컬 파일 시스템 경로 (파일 및 디렉토리)
39
+ - 재귀적 디렉토리 스캔
40
+ - 향상된 파일 주석을 위한 Excel 메타데이터 파일
41
+ - 자동 구성 기능이 있는 혼합 파일 유형
42
+ - 자산별 경로 구성이 있는 분산 데이터 소스
43
+
44
+ ## 구성 모드
45
+
46
+ ### 모드 1: 단일 경로 모드 (기본값 - `use_single_path: true`)
47
+
48
+ 모든 자산이 하나의 기본 디렉토리를 공유합니다. 시스템은 각 파일 사양에 대한 하위 디렉토리를 예상합니다.
49
+
50
+ ```json
51
+ {
52
+ "name": "표준 업로드",
53
+ "use_single_path": true,
54
+ "path": "/data/experiment",
55
+ "is_recursive": true,
56
+ "storage": 1,
57
+ "data_collection": 5
58
+ }
59
+ ```
60
+
61
+ **예상 디렉토리 구조:**
62
+
63
+ ```
64
+ /data/experiment/
65
+ ├── pcd_1/ # 포인트 클라우드
66
+ │ └── *.pcd
67
+ ├── image_1/ # 이미지
68
+ │ └── *.jpg
69
+ └── json_meta_1/ # 메타데이터
70
+ └── *.json
71
+ ```
72
+
73
+ ### 모드 2: 다중 경로 모드 (`use_single_path: false`)
74
+
75
+ 각 자산에는 자체 경로 및 재귀 설정이 있습니다. 분산 데이터 소스에 적합합니다.
76
+
77
+ ```json
78
+ {
79
+ "name": "다중 소스 업로드",
80
+ "use_single_path": false,
81
+ "assets": {
82
+ "pcd_1": {
83
+ "path": "/sensors/lidar/scan_001",
84
+ "is_recursive": false
85
+ },
86
+ "image_1": {
87
+ "path": "/sensors/camera/front",
88
+ "is_recursive": true
89
+ },
90
+ "json_meta_1": {
91
+ "path": "/metadata/annotations",
92
+ "is_recursive": false
93
+ }
94
+ },
95
+ "storage": 1,
96
+ "data_collection": 5
97
+ }
98
+ ```
99
+
100
+ **선택적 파일 사양:**
101
+
102
+ 다중 경로 모드에서는 데이터 컬렉션의 파일 사양 템플릿에서 파일 사양을 선택적으로 표시할 수 있습니다:
103
+
104
+ - **필수 사양** (`is_required: true`): `assets` 매개변수에 자산 경로가 반드시 있어야 합니다
105
+ - **선택적 사양** (`is_required: false`): `assets`에서 생략 가능 - 시스템이 건너뜁니다
106
+
107
+ 선택적 사양이 생략된 예제:
108
+
109
+ ```json
110
+ {
111
+ "name": "다중 소스 업로드",
112
+ "use_single_path": false,
113
+ "assets": {
114
+ "pcd_1": {"path": "/sensors/lidar", "is_recursive": false},
115
+ "image_1": {"path": "/cameras/front", "is_recursive": true}
116
+ // "json_meta_1"은 선택사항이며 생략됨
117
+ },
118
+ "storage": 1,
119
+ "data_collection": 5
120
+ }
121
+ ```
122
+
123
+ 시스템 로그: `"Skipping optional spec json_meta_1: no asset path configured"`
124
+
125
+ ## 기본 사용법
126
+
127
+ ### CLI 사용법
128
+
129
+ ```bash
130
+ # 단일 경로 모드 (전통적)
131
+ synapse plugin run upload '{
132
+ "name": "데이터셋 업로드",
133
+ "use_single_path": true,
134
+ "path": "/data/training",
135
+ "is_recursive": true,
136
+ "storage": 1,
137
+ "data_collection": 5
138
+ }'
139
+
140
+ # 다중 경로 모드 (고급)
141
+ synapse plugin run upload '{
142
+ "name": "다중 센서 업로드",
143
+ "use_single_path": false,
144
+ "assets": {
145
+ "lidar": {"path": "/sensors/lidar", "is_recursive": true},
146
+ "camera": {"path": "/sensors/camera", "is_recursive": false}
147
+ },
148
+ "storage": 1,
149
+ "data_collection": 5
150
+ }'
151
+ ```
152
+
153
+ ### Python API 사용법
154
+
155
+ ```python
156
+ from synapse_sdk.plugins.categories.upload.actions.upload.action import UploadAction
157
+
158
+ # 업로드 매개변수 구성
159
+ params = {
160
+ "name": "데이터셋 업로드",
161
+ "use_single_path": true,
162
+ "path": "/data/training_images",
163
+ "is_recursive": True,
164
+ "storage": 1,
165
+ "data_collection": 5,
166
+ "max_file_size_mb": 100
167
+ }
168
+
169
+ action = UploadAction(params=params, plugin_config=plugin_config)
170
+ result = action.start()
171
+
172
+ print(f"업로드된 파일 수: {result['uploaded_files_count']}")
173
+ print(f"생성된 데이터 단위 수: {result['generated_data_units_count']}")
174
+ ```
175
+
176
+ ## 구성 매개변수
177
+
178
+ ### 필수 매개변수
179
+
180
+ | 매개변수 | 유형 | 설명 | 예시 |
181
+ | ----------------- | ----- | ------------------ | ------------- |
182
+ | `name` | `str` | 업로드 이름 | `"내 업로드"` |
183
+ | `storage` | `int` | 스토리지 ID | `1` |
184
+ | `data_collection` | `int` | 데이터 컬렉션 ID | `5` |
185
+
186
+ ### 모드별 필수 매개변수
187
+
188
+ **단일 경로 모드** (`use_single_path: true`):
189
+
190
+ - `path` (str): 기본 디렉토리 경로
191
+
192
+ **다중 경로 모드** (`use_single_path: false`):
193
+
194
+ - `assets` (dict): 자산별 `path` 및 `is_recursive` 설정이 포함된 자산별 구성
195
+
196
+ ### 선택적 매개변수
197
+
198
+ | 매개변수 | 유형 | 기본값 | 설명 |
199
+ | ------------------------------- | ------------- | ------- | --------------------------------- |
200
+ | `description` | `str \| None` | `None` | 업로드 설명 |
201
+ | `project` | `int \| None` | `None` | 프로젝트 ID |
202
+ | `use_single_path` | `bool` | `true` | 모드 전환 |
203
+ | `is_recursive` | `bool` | `true` | 재귀적 스캔 (단일 경로 모드) |
204
+ | `excel_metadata_path` | `str \| None` | `None` | Excel 메타데이터 파일 경로 |
205
+ | `max_file_size_mb` | `int` | `50` | 최대 파일 크기 (MB) |
206
+ | `creating_data_unit_batch_size` | `int` | `100` | 데이터 단위 생성을 위한 배치 크기 |
207
+
208
+ ## Excel 메타데이터 지원
209
+
210
+ 업로드 플러그인은 유연한 헤더 지원과 포괄적인 파일 이름 매칭 기능을 통해 고급 Excel 메타데이터 처리를 제공합니다.
211
+
212
+ ### Excel 메타데이터 파일 지정
213
+
214
+ `excel_metadata_path` 매개변수를 사용하여 Excel 메타데이터 파일을 제공할 수 있습니다. 시스템은 다음과 같은 여러 경로 해석 전략을 지원합니다:
215
+
216
+ 1. **절대 경로**: Excel 파일의 전체 파일 시스템 경로
217
+ 2. **스토리지 상대 경로**: 스토리지 기본 디렉토리를 기준으로 한 경로
218
+ 3. **작업 디렉토리 상대 경로**: 업로드 작업 디렉토리를 기준으로 한 경로 (단일 경로 모드만 해당)
219
+
220
+ **예시:**
221
+
222
+ ```json
223
+ {
224
+ "excel_metadata_path": "/data/metadata.xlsx" // 절대 경로
225
+ }
226
+ ```
227
+
228
+ ```json
229
+ {
230
+ "excel_metadata_path": "metadata.xlsx" // 스토리지 기본 경로 기준
231
+ }
232
+ ```
233
+
234
+ ```json
235
+ {
236
+ "excel_metadata_path": "metadata/dataset_info.xlsx" // 스토리지 내 하위 디렉토리
237
+ }
238
+ ```
239
+
240
+ ### 경로 해석 순서
241
+
242
+ 시스템은 다음 순서로 Excel 메타데이터 경로를 해석합니다:
243
+
244
+ 1. **절대 경로**: 경로가 `/`로 시작하면 절대 파일 시스템 경로로 처리
245
+ 2. **스토리지 상대 경로**: 스토리지의 기본 경로를 기준으로 경로 해석
246
+ 3. **작업 디렉토리 상대 경로** (단일 경로 모드): 현재 작업 디렉토리를 기준으로 경로 해석
247
+
248
+ 이러한 유연한 해석 방식을 통해 구성된 스토리지 위치에 데이터와 함께 메타데이터 파일을 저장할 수 있습니다.
249
+
250
+ ### 기본 메타데이터 파일
251
+
252
+ `excel_metadata_path`를 지정하지 않으면 시스템이 작업 디렉토리에서 기본 메타데이터 파일을 자동으로 검색합니다 (단일 경로 모드만 해당):
253
+
254
+ - `meta.xlsx` (먼저 확인)
255
+ - `meta.xls` (대체)
256
+
257
+ **Python 예제:**
258
+
259
+ ```python
260
+ # Excel 메타데이터에 대한 명시적 경로
261
+ upload_params = {
262
+ "name": "메타데이터가 있는 업로드",
263
+ "path": "/data/files",
264
+ "storage": 1,
265
+ "data_collection": 5,
266
+ "excel_metadata_path": "metadata/dataset_info.xlsx" // 스토리지 기준
267
+ }
268
+
269
+ # 기본 메타데이터 파일 사용 (작업 디렉토리의 meta.xlsx)
270
+ upload_params = {
271
+ "name": "기본 메타데이터가 있는 업로드",
272
+ "path": "/data/files",
273
+ "storage": 1,
274
+ "data_collection": 5
275
+ // excel_metadata_path 미지정 - meta.xlsx가 있으면 사용
276
+ }
277
+ ```
278
+
279
+ ### Excel 형식
280
+
281
+ 두 가지 헤더 형식이 모두 지원됩니다 (대소문자 구분 없음):
282
+
283
+ **옵션 1: "filename" 헤더**
284
+ | filename | category | description | custom_field |
285
+ |----------|----------|-------------|--------------|
286
+ | image1.jpg | nature | Mountain landscape | high_res |
287
+ | image2.png | urban | City skyline | processed |
288
+
289
+ **옵션 2: "filename" 헤더**
290
+ | file_name | category | description | custom_field |
291
+ |-----------|----------|-------------|--------------|
292
+ | image1.jpg | nature | Mountain landscape | high_res |
293
+ | image2.png | urban | City skyline | processed |
294
+
295
+ ### 파일 이름 매칭
296
+
297
+ 시스템은 5계층 우선순위 매칭 알고리즘을 사용합니다:
298
+
299
+ 1. **정확한 스템 일치** (가장 높은 우선순위): `image1`이 `image1.jpg`와 일치
300
+ 2. **정확한 파일 이름 일치**: `image1.jpg`가 `image1.jpg`와 일치
301
+ 3. **메타데이터 키 스템 일치**: `path/image1.ext`의 스템이 `image1`과 일치
302
+ 4. **부분 경로 일치**: `/uploads/image1.jpg`에 `image1`이 포함됨
303
+ 5. **전체 경로 일치**: 복잡한 구조에 대한 전체 경로 일치
304
+
305
+ ### 보안 검증
306
+
307
+ Excel 파일은 보안 검증을 거칩니다:
308
+
309
+ ```python
310
+ # 기본 보안 제한
311
+ max_file_size_mb: 10 # 파일 크기 제한
312
+ max_rows: 100000 # 행 수 제한
313
+ max_columns: 50 # 열 수 제한
314
+ ```
315
+
316
+ ### 구성
317
+
318
+ `config.yaml`에서 Excel 보안을 구성합니다:
319
+
320
+ ```yaml
321
+ actions:
322
+ upload:
323
+ excel_config:
324
+ max_file_size_mb: 10
325
+ max_rows: 100000
326
+ max_columns: 50
327
+ ```
328
+
329
+ ## 진행 상황 추적
330
+
331
+ 업로드 작업은 세 가지 주요 단계에 걸쳐 진행 상황을 추적합니다:
332
+
333
+ | 카테고리 | 비율 | 설명 |
334
+ | --------------------- | ---- | ----------------------------------- |
335
+ | `analyze_collection` | 2% | 매개변수 검증 및 설정 |
336
+ | `upload_data_files` | 38% | 파일 업로드 처리 |
337
+ | `generate_data_units` | 60% | 데이터 단위 생성 및 최종화 |
338
+
339
+ ## 일반적인 사용 사례
340
+
341
+ ### 1. 간단한 데이터셋 업로드
342
+
343
+ ```json
344
+ {
345
+ "name": "학습 데이터셋",
346
+ "use_single_path": true,
347
+ "path": "/datasets/training",
348
+ "is_recursive": true,
349
+ "storage": 1,
350
+ "data_collection": 2
351
+ }
352
+ ```
353
+
354
+ ### 2. 다중 소스 센서 데이터
355
+
356
+ ```json
357
+ {
358
+ "name": "다중 카메라 데이터셋",
359
+ "use_single_path": false,
360
+ "assets": {
361
+ "front_camera": { "path": "/cameras/front", "is_recursive": true },
362
+ "rear_camera": { "path": "/cameras/rear", "is_recursive": true },
363
+ "lidar": { "path": "/sensors/lidar", "is_recursive": false }
364
+ },
365
+ "storage": 1,
366
+ "data_collection": 2
367
+ }
368
+ ```
369
+
370
+ ### 3. 메타데이터가 포함된 데이터셋 (절대 경로)
371
+
372
+ ```json
373
+ {
374
+ "name": "주석이 달린 데이터셋",
375
+ "use_single_path": true,
376
+ "path": "/data/annotated",
377
+ "is_recursive": true,
378
+ "excel_metadata_path": "/data/metadata.xlsx",
379
+ "storage": 1,
380
+ "data_collection": 5
381
+ }
382
+ ```
383
+
384
+ ### 4. 메타데이터가 포함된 데이터셋 (스토리지 상대 경로)
385
+
386
+ ```json
387
+ {
388
+ "name": "스토리지 상대 메타데이터가 있는 업로드",
389
+ "use_single_path": true,
390
+ "path": "/data/uploads",
391
+ "is_recursive": true,
392
+ "excel_metadata_path": "metadata/dataset_info.xlsx",
393
+ "storage": 1,
394
+ "data_collection": 5
395
+ }
396
+ ```
397
+
398
+ **Python 예제 - 다양한 경로 유형 사용:**
399
+
400
+ ```python
401
+ # 예제 1: 절대 경로
402
+ params = {
403
+ "name": "절대 경로 메타데이터가 있는 업로드",
404
+ "path": "/data/uploads",
405
+ "excel_metadata_path": "/data/metadata.xlsx",
406
+ "storage": 1,
407
+ "data_collection": 5
408
+ }
409
+
410
+ # 예제 2: 스토리지 상대 경로
411
+ params = {
412
+ "name": "스토리지 상대 메타데이터가 있는 업로드",
413
+ "path": "/data/uploads",
414
+ "excel_metadata_path": "metadata/info.xlsx", # 스토리지 기본 경로 기준
415
+ "storage": 1,
416
+ "data_collection": 5
417
+ }
418
+
419
+ # 예제 3: 기본 메타데이터 파일 사용
420
+ params = {
421
+ "name": "기본 메타데이터가 있는 업로드",
422
+ "path": "/data/uploads",
423
+ # excel_metadata_path 미지정 - 작업 디렉토리의 meta.xlsx를 찾음
424
+ "storage": 1,
425
+ "data_collection": 5
426
+ }
427
+ ```
428
+
429
+ ## 이점
430
+
431
+ ### 사용자용
432
+
433
+ - **유연성**: 단일 작업으로 여러 다른 위치에서 파일 업로드
434
+ - **세분화된 제어**: 전역이 아닌 자산별로 재귀 검색 설정
435
+ - **조직화**: 복잡한 파일 구조를 데이터 컬렉션 사양에 매핑
436
+ - **사용 사례 지원**: 다중 센서 데이터 수집, 분산 데이터셋, 이기종 소스
437
+
438
+ ### 개발자용
439
+
440
+ - **하위 호환성**: 기존 코드가 변경 없이 계속 작동
441
+ - **타입 안전**: 명확한 오류 메시지가 포함된 전체 Pydantic 검증
442
+ - **유지보수성**: 단일 경로와 다중 경로 로직 간의 깔끔한 분리
443
+ - **확장성**: 향후 더 많은 자산별 구성 옵션을 쉽게 추가 가능
444
+
445
+ ## 다음 단계
446
+
447
+ - **플러그인 개발자용**: 사용자 정의 업로드 플러그인을 파일 처리 로직과 함께 생성하려면 [BaseUploader 템플릿 가이드](./upload-plugin-template.md)를 참조하십시오.
448
+ - **SDK/액션 개발자용**: 아키텍처 세부 정보, 전략 패턴 및 액션 내부에 대해서는 [업로드 액션 개발](./upload-plugin-action.md)을 참조하십시오.
449
+
450
+ ## 마이그레이션 가이드
451
+
452
+ ### 레거시에서 현재 버전으로
453
+
454
+ 업로드 작업은 100% 하위 호환성을 유지합니다. 기본 동작 (`use_single_path=true`)은 이전 버전과 동일하게 작동합니다.
455
+
456
+ #### 마이그레이션 필요 없음
457
+
458
+ 기존 구성은 변경 없이 계속 작동합니다:
459
+
460
+ ```python
461
+ # 이 레거시 사용법은 여전히 작동합니다
462
+ params = {
463
+ "name": "내 업로드",
464
+ "path": "/data/files",
465
+ "storage": 1,
466
+ "data_collection": 5
467
+ }
468
+ ```
469
+
470
+ #### 다중 경로 모드 채택
471
+
472
+ 새로운 다중 경로 기능을 사용하려면:
473
+
474
+ 1. `use_single_path: false`로 설정
475
+ 2. `path` 필드 제거 (무시됨)
476
+ 3. 자산별 구성이 포함된 `assets` 사전을 추가
477
+
478
+ ```python
479
+ # 새로운 다중 경로 모드
480
+ params = {
481
+ "name": "다중 소스 업로드",
482
+ "use_single_path": false,
483
+ "assets": {
484
+ "pcd_1": {"path": "/sensors/lidar", "is_recursive": false},
485
+ "image_1": {"path": "/cameras/front", "is_recursive": true}
486
+ },
487
+ "storage": 1,
488
+ "data_collection": 5
489
+ }
490
+ ```
491
+
492
+ ## 문제 해결
493
+
494
+ ### 일반적인 문제
495
+
496
+ #### "파일을 찾을 수 없음" 오류
497
+
498
+ ```bash
499
+ # 경로가 존재하고 읽을 수 있는지 확인
500
+ ls -la /path/to/data
501
+ test -r /path/to/data && echo "읽을 수 있음" || echo "읽을 수 없음"
502
+
503
+ # 파일이 존재하는지 확인
504
+ find /path/to/data -name "*.jpg" | head -10
505
+ ```
506
+
507
+ #### Excel 처리 오류
508
+
509
+ ```bash
510
+ # 파일 형식 및 크기 확인
511
+ file /path/to/metadata.xlsx
512
+ ls -lh /path/to/metadata.xlsx
513
+ ```
514
+
515
+ #### 모드 검증 오류
516
+
517
+ - **단일 경로 모드**: `path`가 제공되었는지 확인
518
+ - **다중 경로 모드**: `assets`가 하나 이상의 자산 구성과 함께 제공되었는지 확인
519
+
520
+ ## 모범 사례
521
+
522
+ ### 디렉토리 구성
523
+
524
+ - 명확하고 설명적인 디렉토리 이름 사용
525
+ - 합리적인 디렉토리 크기 유지 (디렉토리당 10,000개 미만 파일)
526
+ - 안정성을 위해 절대 경로 사용
527
+
528
+ ### 성능 최적화
529
+
530
+ - 필요할 때만 재귀 활성화
531
+ - 최상의 성능을 위해 Excel 파일을 5MB 미만으로 유지
532
+ - 균형 잡힌 디렉토리 구조로 파일 구성
533
+
534
+ ### 보안 고려 사항
535
+
536
+ - 처리 전에 모든 경로 검증
537
+ - 소스 데이터에 읽기 전용 권한 사용
538
+ - 적절한 Excel 크기 제한 설정
539
+
540
+ ## 지원 및 리소스
541
+
542
+ - **액션 개발 가이드**: [업로드 플러그인 액션 개발](./upload-plugin-action.md)
543
+ - **템플릿 개발 가이드**: [업로드 플러그인 템플릿 개발](./upload-plugin-template.md)
544
+ - **API 참조**: 자세한 API 참조는 액션 개발 설명서를 참조하십시오.