synapse-sdk 1.0.0a13__py3-none-any.whl → 2025.11.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of synapse-sdk might be problematic. Click here for more details.

Files changed (339) hide show
  1. synapse_sdk/__init__.py +24 -0
  2. synapse_sdk/cli/__init__.py +310 -5
  3. synapse_sdk/cli/alias/__init__.py +22 -0
  4. synapse_sdk/cli/alias/create.py +36 -0
  5. synapse_sdk/cli/alias/dataclass.py +31 -0
  6. synapse_sdk/cli/alias/default.py +16 -0
  7. synapse_sdk/cli/alias/delete.py +15 -0
  8. synapse_sdk/cli/alias/list.py +19 -0
  9. synapse_sdk/cli/alias/read.py +15 -0
  10. synapse_sdk/cli/alias/update.py +17 -0
  11. synapse_sdk/cli/alias/utils.py +61 -0
  12. synapse_sdk/cli/code_server.py +687 -0
  13. synapse_sdk/cli/config.py +440 -0
  14. synapse_sdk/cli/devtools.py +90 -0
  15. synapse_sdk/cli/plugin/__init__.py +33 -0
  16. synapse_sdk/cli/{create_plugin.py → plugin/create.py} +2 -2
  17. synapse_sdk/cli/plugin/publish.py +45 -0
  18. synapse_sdk/{plugins/cli → cli/plugin}/run.py +12 -5
  19. synapse_sdk/clients/agent/__init__.py +9 -3
  20. synapse_sdk/clients/agent/container.py +133 -0
  21. synapse_sdk/clients/agent/core.py +19 -0
  22. synapse_sdk/clients/agent/ray.py +298 -9
  23. synapse_sdk/clients/backend/__init__.py +41 -12
  24. synapse_sdk/clients/backend/annotation.py +13 -5
  25. synapse_sdk/clients/backend/core.py +59 -0
  26. synapse_sdk/clients/backend/data_collection.py +186 -0
  27. synapse_sdk/clients/backend/hitl.py +17 -0
  28. synapse_sdk/clients/backend/integration.py +19 -4
  29. synapse_sdk/clients/backend/ml.py +10 -7
  30. synapse_sdk/clients/backend/models.py +78 -0
  31. synapse_sdk/clients/base.py +381 -34
  32. synapse_sdk/clients/ray/serve.py +2 -0
  33. synapse_sdk/clients/validators/collections.py +31 -0
  34. synapse_sdk/devtools/config.py +94 -0
  35. synapse_sdk/devtools/docs/.gitignore +20 -0
  36. synapse_sdk/devtools/docs/README.md +41 -0
  37. synapse_sdk/devtools/docs/blog/2019-05-28-first-blog-post.md +12 -0
  38. synapse_sdk/devtools/docs/blog/2019-05-29-long-blog-post.md +44 -0
  39. synapse_sdk/devtools/docs/blog/2021-08-01-mdx-blog-post.mdx +24 -0
  40. synapse_sdk/devtools/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg +0 -0
  41. synapse_sdk/devtools/docs/blog/2021-08-26-welcome/index.md +29 -0
  42. synapse_sdk/devtools/docs/blog/authors.yml +25 -0
  43. synapse_sdk/devtools/docs/blog/tags.yml +19 -0
  44. synapse_sdk/devtools/docs/docs/api/clients/agent.md +43 -0
  45. synapse_sdk/devtools/docs/docs/api/clients/annotation-mixin.md +378 -0
  46. synapse_sdk/devtools/docs/docs/api/clients/backend.md +420 -0
  47. synapse_sdk/devtools/docs/docs/api/clients/base.md +257 -0
  48. synapse_sdk/devtools/docs/docs/api/clients/core-mixin.md +477 -0
  49. synapse_sdk/devtools/docs/docs/api/clients/data-collection-mixin.md +422 -0
  50. synapse_sdk/devtools/docs/docs/api/clients/hitl-mixin.md +554 -0
  51. synapse_sdk/devtools/docs/docs/api/clients/index.md +391 -0
  52. synapse_sdk/devtools/docs/docs/api/clients/integration-mixin.md +571 -0
  53. synapse_sdk/devtools/docs/docs/api/clients/ml-mixin.md +578 -0
  54. synapse_sdk/devtools/docs/docs/api/clients/ray.md +342 -0
  55. synapse_sdk/devtools/docs/docs/api/index.md +52 -0
  56. synapse_sdk/devtools/docs/docs/api/plugins/categories.md +43 -0
  57. synapse_sdk/devtools/docs/docs/api/plugins/models.md +114 -0
  58. synapse_sdk/devtools/docs/docs/api/plugins/utils.md +328 -0
  59. synapse_sdk/devtools/docs/docs/categories.md +0 -0
  60. synapse_sdk/devtools/docs/docs/cli-usage.md +280 -0
  61. synapse_sdk/devtools/docs/docs/concepts/index.md +38 -0
  62. synapse_sdk/devtools/docs/docs/configuration.md +83 -0
  63. synapse_sdk/devtools/docs/docs/contributing.md +306 -0
  64. synapse_sdk/devtools/docs/docs/examples/index.md +29 -0
  65. synapse_sdk/devtools/docs/docs/faq.md +179 -0
  66. synapse_sdk/devtools/docs/docs/features/converters/index.md +455 -0
  67. synapse_sdk/devtools/docs/docs/features/index.md +24 -0
  68. synapse_sdk/devtools/docs/docs/features/utils/file.md +415 -0
  69. synapse_sdk/devtools/docs/docs/features/utils/network.md +378 -0
  70. synapse_sdk/devtools/docs/docs/features/utils/storage.md +57 -0
  71. synapse_sdk/devtools/docs/docs/features/utils/types.md +51 -0
  72. synapse_sdk/devtools/docs/docs/installation.md +94 -0
  73. synapse_sdk/devtools/docs/docs/introduction.md +47 -0
  74. synapse_sdk/devtools/docs/docs/plugins/categories/neural-net-plugins/train-action-overview.md +814 -0
  75. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
  76. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
  77. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
  78. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
  79. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
  80. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
  81. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
  82. synapse_sdk/devtools/docs/docs/plugins/export-plugins.md +1092 -0
  83. synapse_sdk/devtools/docs/docs/plugins/plugins.md +852 -0
  84. synapse_sdk/devtools/docs/docs/quickstart.md +78 -0
  85. synapse_sdk/devtools/docs/docs/troubleshooting.md +519 -0
  86. synapse_sdk/devtools/docs/docs/tutorial-basics/_category_.json +8 -0
  87. synapse_sdk/devtools/docs/docs/tutorial-basics/congratulations.md +23 -0
  88. synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-blog-post.md +34 -0
  89. synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-document.md +57 -0
  90. synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-page.md +43 -0
  91. synapse_sdk/devtools/docs/docs/tutorial-basics/deploy-your-site.md +31 -0
  92. synapse_sdk/devtools/docs/docs/tutorial-basics/markdown-features.mdx +152 -0
  93. synapse_sdk/devtools/docs/docs/tutorial-extras/_category_.json +7 -0
  94. synapse_sdk/devtools/docs/docs/tutorial-extras/img/docsVersionDropdown.png +0 -0
  95. synapse_sdk/devtools/docs/docs/tutorial-extras/img/localeDropdown.png +0 -0
  96. synapse_sdk/devtools/docs/docs/tutorial-extras/manage-docs-versions.md +55 -0
  97. synapse_sdk/devtools/docs/docs/tutorial-extras/translate-your-site.md +88 -0
  98. synapse_sdk/devtools/docs/docusaurus.config.ts +148 -0
  99. synapse_sdk/devtools/docs/i18n/ko/code.json +325 -0
  100. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/agent.md +43 -0
  101. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/annotation-mixin.md +289 -0
  102. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/backend.md +420 -0
  103. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/base.md +257 -0
  104. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/core-mixin.md +417 -0
  105. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/data-collection-mixin.md +356 -0
  106. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/hitl-mixin.md +192 -0
  107. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/index.md +391 -0
  108. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/integration-mixin.md +479 -0
  109. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ml-mixin.md +284 -0
  110. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ray.md +342 -0
  111. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/index.md +52 -0
  112. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/plugins/models.md +114 -0
  113. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/categories.md +0 -0
  114. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/cli-usage.md +280 -0
  115. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/concepts/index.md +38 -0
  116. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/configuration.md +83 -0
  117. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/contributing.md +306 -0
  118. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/examples/index.md +29 -0
  119. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/faq.md +179 -0
  120. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/converters/index.md +30 -0
  121. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/index.md +24 -0
  122. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/file.md +415 -0
  123. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/network.md +378 -0
  124. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/storage.md +60 -0
  125. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/types.md +51 -0
  126. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/installation.md +94 -0
  127. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/introduction.md +47 -0
  128. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/neural-net-plugins/train-action-overview.md +815 -0
  129. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
  130. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
  131. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
  132. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
  133. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
  134. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
  135. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
  136. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/export-plugins.md +1092 -0
  137. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/plugins.md +117 -0
  138. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/quickstart.md +78 -0
  139. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/troubleshooting.md +519 -0
  140. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current.json +34 -0
  141. synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/footer.json +42 -0
  142. synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/navbar.json +18 -0
  143. synapse_sdk/devtools/docs/package-lock.json +18784 -0
  144. synapse_sdk/devtools/docs/package.json +48 -0
  145. synapse_sdk/devtools/docs/sidebars.ts +122 -0
  146. synapse_sdk/devtools/docs/src/components/HomepageFeatures/index.tsx +71 -0
  147. synapse_sdk/devtools/docs/src/components/HomepageFeatures/styles.module.css +11 -0
  148. synapse_sdk/devtools/docs/src/css/custom.css +30 -0
  149. synapse_sdk/devtools/docs/src/pages/index.module.css +23 -0
  150. synapse_sdk/devtools/docs/src/pages/index.tsx +21 -0
  151. synapse_sdk/devtools/docs/src/pages/markdown-page.md +7 -0
  152. synapse_sdk/devtools/docs/static/.nojekyll +0 -0
  153. synapse_sdk/devtools/docs/static/img/docusaurus-social-card.jpg +0 -0
  154. synapse_sdk/devtools/docs/static/img/docusaurus.png +0 -0
  155. synapse_sdk/devtools/docs/static/img/favicon.ico +0 -0
  156. synapse_sdk/devtools/docs/static/img/logo.png +0 -0
  157. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_mountain.svg +171 -0
  158. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_react.svg +170 -0
  159. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_tree.svg +40 -0
  160. synapse_sdk/devtools/docs/tsconfig.json +8 -0
  161. synapse_sdk/devtools/server.py +41 -0
  162. synapse_sdk/devtools/streamlit_app/__init__.py +5 -0
  163. synapse_sdk/devtools/streamlit_app/app.py +128 -0
  164. synapse_sdk/devtools/streamlit_app/services/__init__.py +11 -0
  165. synapse_sdk/devtools/streamlit_app/services/job_service.py +233 -0
  166. synapse_sdk/devtools/streamlit_app/services/plugin_service.py +236 -0
  167. synapse_sdk/devtools/streamlit_app/services/serve_service.py +95 -0
  168. synapse_sdk/devtools/streamlit_app/ui/__init__.py +15 -0
  169. synapse_sdk/devtools/streamlit_app/ui/config_tab.py +76 -0
  170. synapse_sdk/devtools/streamlit_app/ui/deployment_tab.py +66 -0
  171. synapse_sdk/devtools/streamlit_app/ui/http_tab.py +125 -0
  172. synapse_sdk/devtools/streamlit_app/ui/jobs_tab.py +573 -0
  173. synapse_sdk/devtools/streamlit_app/ui/serve_tab.py +346 -0
  174. synapse_sdk/devtools/streamlit_app/ui/status_bar.py +118 -0
  175. synapse_sdk/devtools/streamlit_app/utils/__init__.py +40 -0
  176. synapse_sdk/devtools/streamlit_app/utils/json_viewer.py +197 -0
  177. synapse_sdk/devtools/streamlit_app/utils/log_formatter.py +38 -0
  178. synapse_sdk/devtools/streamlit_app/utils/styles.py +241 -0
  179. synapse_sdk/devtools/streamlit_app/utils/ui_components.py +289 -0
  180. synapse_sdk/devtools/streamlit_app.py +10 -0
  181. synapse_sdk/loggers.py +74 -9
  182. synapse_sdk/plugins/README.md +1340 -0
  183. synapse_sdk/plugins/__init__.py +0 -13
  184. synapse_sdk/plugins/categories/base.py +145 -30
  185. synapse_sdk/plugins/categories/data_validation/actions/validation.py +72 -0
  186. synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +33 -5
  187. synapse_sdk/plugins/categories/export/actions/__init__.py +3 -0
  188. synapse_sdk/plugins/categories/export/actions/export/__init__.py +28 -0
  189. synapse_sdk/plugins/categories/export/actions/export/action.py +165 -0
  190. synapse_sdk/plugins/categories/export/actions/export/enums.py +113 -0
  191. synapse_sdk/plugins/categories/export/actions/export/exceptions.py +53 -0
  192. synapse_sdk/plugins/categories/export/actions/export/models.py +74 -0
  193. synapse_sdk/plugins/categories/export/actions/export/run.py +195 -0
  194. synapse_sdk/plugins/categories/export/actions/export/utils.py +187 -0
  195. synapse_sdk/plugins/categories/export/templates/config.yaml +21 -0
  196. synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +390 -0
  197. synapse_sdk/plugins/categories/export/templates/plugin/export.py +160 -0
  198. synapse_sdk/plugins/categories/neural_net/actions/deployment.py +29 -14
  199. synapse_sdk/plugins/categories/neural_net/actions/inference.py +13 -1
  200. synapse_sdk/plugins/categories/neural_net/actions/train.py +1084 -38
  201. synapse_sdk/plugins/categories/neural_net/actions/tune.py +534 -0
  202. synapse_sdk/plugins/categories/neural_net/base/__init__.py +0 -0
  203. synapse_sdk/plugins/categories/neural_net/base/inference.py +37 -0
  204. synapse_sdk/plugins/categories/neural_net/templates/config.yaml +30 -5
  205. synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +26 -10
  206. synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +4 -0
  207. synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation/__init__.py +3 -0
  208. synapse_sdk/plugins/categories/{export/actions/export.py → pre_annotation/actions/pre_annotation/action.py} +4 -4
  209. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/__init__.py +28 -0
  210. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/action.py +145 -0
  211. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/enums.py +269 -0
  212. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/exceptions.py +14 -0
  213. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/factory.py +76 -0
  214. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/models.py +97 -0
  215. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/orchestrator.py +250 -0
  216. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/run.py +64 -0
  217. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/__init__.py +17 -0
  218. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/annotation.py +287 -0
  219. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/base.py +170 -0
  220. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/extraction.py +83 -0
  221. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/metrics.py +87 -0
  222. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/preprocessor.py +127 -0
  223. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/validation.py +143 -0
  224. synapse_sdk/plugins/categories/pre_annotation/actions/to_task.py +966 -0
  225. synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +19 -0
  226. synapse_sdk/plugins/categories/pre_annotation/templates/plugin/to_task.py +40 -0
  227. synapse_sdk/plugins/categories/smart_tool/templates/config.yaml +5 -2
  228. synapse_sdk/plugins/categories/upload/__init__.py +0 -0
  229. synapse_sdk/plugins/categories/upload/actions/__init__.py +0 -0
  230. synapse_sdk/plugins/categories/upload/actions/upload/__init__.py +19 -0
  231. synapse_sdk/plugins/categories/upload/actions/upload/action.py +232 -0
  232. synapse_sdk/plugins/categories/upload/actions/upload/context.py +185 -0
  233. synapse_sdk/plugins/categories/upload/actions/upload/enums.py +471 -0
  234. synapse_sdk/plugins/categories/upload/actions/upload/exceptions.py +36 -0
  235. synapse_sdk/plugins/categories/upload/actions/upload/factory.py +138 -0
  236. synapse_sdk/plugins/categories/upload/actions/upload/models.py +203 -0
  237. synapse_sdk/plugins/categories/upload/actions/upload/orchestrator.py +183 -0
  238. synapse_sdk/plugins/categories/upload/actions/upload/registry.py +113 -0
  239. synapse_sdk/plugins/categories/upload/actions/upload/run.py +179 -0
  240. synapse_sdk/plugins/categories/upload/actions/upload/steps/__init__.py +1 -0
  241. synapse_sdk/plugins/categories/upload/actions/upload/steps/base.py +107 -0
  242. synapse_sdk/plugins/categories/upload/actions/upload/steps/cleanup.py +62 -0
  243. synapse_sdk/plugins/categories/upload/actions/upload/steps/collection.py +63 -0
  244. synapse_sdk/plugins/categories/upload/actions/upload/steps/generate.py +84 -0
  245. synapse_sdk/plugins/categories/upload/actions/upload/steps/initialize.py +82 -0
  246. synapse_sdk/plugins/categories/upload/actions/upload/steps/metadata.py +235 -0
  247. synapse_sdk/plugins/categories/upload/actions/upload/steps/organize.py +203 -0
  248. synapse_sdk/plugins/categories/upload/actions/upload/steps/upload.py +97 -0
  249. synapse_sdk/plugins/categories/upload/actions/upload/steps/validate.py +71 -0
  250. synapse_sdk/plugins/categories/upload/actions/upload/strategies/__init__.py +1 -0
  251. synapse_sdk/plugins/categories/upload/actions/upload/strategies/base.py +82 -0
  252. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/__init__.py +1 -0
  253. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/batch.py +39 -0
  254. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/single.py +29 -0
  255. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/__init__.py +1 -0
  256. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/flat.py +258 -0
  257. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/recursive.py +281 -0
  258. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/__init__.py +1 -0
  259. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/excel.py +174 -0
  260. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/none.py +16 -0
  261. synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/__init__.py +1 -0
  262. synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/sync.py +84 -0
  263. synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/__init__.py +1 -0
  264. synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/default.py +60 -0
  265. synapse_sdk/plugins/categories/upload/actions/upload/utils.py +250 -0
  266. synapse_sdk/plugins/categories/upload/templates/README.md +470 -0
  267. synapse_sdk/plugins/categories/upload/templates/config.yaml +33 -0
  268. synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +294 -0
  269. synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +102 -0
  270. synapse_sdk/plugins/enums.py +3 -1
  271. synapse_sdk/plugins/models.py +140 -16
  272. synapse_sdk/plugins/templates/plugin-config-schema.json +406 -0
  273. synapse_sdk/plugins/templates/schema.json +491 -0
  274. synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml +1 -0
  275. synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +1 -1
  276. synapse_sdk/plugins/utils/__init__.py +46 -0
  277. synapse_sdk/plugins/utils/actions.py +119 -0
  278. synapse_sdk/plugins/utils/config.py +203 -0
  279. synapse_sdk/plugins/utils/legacy.py +95 -0
  280. synapse_sdk/plugins/utils/ray_gcs.py +66 -0
  281. synapse_sdk/plugins/utils/registry.py +58 -0
  282. synapse_sdk/shared/__init__.py +25 -0
  283. synapse_sdk/shared/enums.py +93 -0
  284. synapse_sdk/types.py +19 -0
  285. synapse_sdk/utils/converters/__init__.py +240 -0
  286. synapse_sdk/utils/converters/coco/__init__.py +0 -0
  287. synapse_sdk/utils/converters/coco/from_dm.py +322 -0
  288. synapse_sdk/utils/converters/coco/to_dm.py +215 -0
  289. synapse_sdk/utils/converters/dm/__init__.py +56 -0
  290. synapse_sdk/utils/converters/dm/from_v1.py +627 -0
  291. synapse_sdk/utils/converters/dm/to_v1.py +367 -0
  292. synapse_sdk/utils/converters/pascal/__init__.py +0 -0
  293. synapse_sdk/utils/converters/pascal/from_dm.py +244 -0
  294. synapse_sdk/utils/converters/pascal/to_dm.py +214 -0
  295. synapse_sdk/utils/converters/yolo/__init__.py +0 -0
  296. synapse_sdk/utils/converters/yolo/from_dm.py +384 -0
  297. synapse_sdk/utils/converters/yolo/to_dm.py +267 -0
  298. synapse_sdk/utils/dataset.py +46 -0
  299. synapse_sdk/utils/encryption.py +158 -0
  300. synapse_sdk/utils/file/__init__.py +39 -0
  301. synapse_sdk/utils/file/archive.py +32 -0
  302. synapse_sdk/utils/file/checksum.py +56 -0
  303. synapse_sdk/utils/file/chunking.py +31 -0
  304. synapse_sdk/utils/file/download.py +385 -0
  305. synapse_sdk/utils/file/encoding.py +40 -0
  306. synapse_sdk/utils/file/io.py +22 -0
  307. synapse_sdk/utils/file/video/__init__.py +29 -0
  308. synapse_sdk/utils/file/video/transcode.py +307 -0
  309. synapse_sdk/utils/file.py.backup +301 -0
  310. synapse_sdk/utils/http.py +138 -0
  311. synapse_sdk/utils/network.py +309 -0
  312. synapse_sdk/utils/storage/__init__.py +72 -0
  313. synapse_sdk/utils/storage/providers/__init__.py +183 -0
  314. synapse_sdk/utils/storage/providers/file_system.py +134 -0
  315. synapse_sdk/utils/storage/providers/gcp.py +13 -0
  316. synapse_sdk/utils/storage/providers/http.py +190 -0
  317. synapse_sdk/utils/storage/providers/s3.py +91 -0
  318. synapse_sdk/utils/storage/providers/sftp.py +47 -0
  319. synapse_sdk/utils/storage/registry.py +17 -0
  320. synapse_sdk-2025.11.7.dist-info/METADATA +122 -0
  321. synapse_sdk-2025.11.7.dist-info/RECORD +386 -0
  322. {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info}/WHEEL +1 -1
  323. synapse_sdk/clients/backend/dataset.py +0 -51
  324. synapse_sdk/plugins/categories/import/actions/import.py +0 -10
  325. synapse_sdk/plugins/cli/__init__.py +0 -21
  326. synapse_sdk/plugins/cli/publish.py +0 -37
  327. synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env +0 -24
  328. synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env.dist +0 -24
  329. synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/main.py +0 -4
  330. synapse_sdk/plugins/utils.py +0 -50
  331. synapse_sdk/utils/file.py +0 -87
  332. synapse_sdk/utils/storage.py +0 -91
  333. synapse_sdk-1.0.0a13.dist-info/METADATA +0 -43
  334. synapse_sdk-1.0.0a13.dist-info/RECORD +0 -111
  335. /synapse_sdk/{plugins/categories/import → clients/validators}/__init__.py +0 -0
  336. /synapse_sdk/{plugins/categories/import/actions → devtools}/__init__.py +0 -0
  337. {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info}/entry_points.txt +0 -0
  338. {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info/licenses}/LICENSE +0 -0
  339. {synapse_sdk-1.0.0a13.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: 10
5
+ ---
6
+
7
+ # BackendClient
8
+
9
+ Synapse 백엔드 API와 상호작용하기 위한 메인 클라이언트입니다.
10
+
11
+ ## 개요
12
+
13
+ `BackendClient`는 데이터 관리, 플러그인 실행, 어노테이션, 머신러닝 워크플로를 포함한 모든 백엔드 작업에 대한 포괄적인 액세스를 제공합니다. 여러 전문화된 믹스인의 기능을 통합합니다:
14
+
15
+ - **AnnotationClientMixin**: 작업 및 어노테이션 관리
16
+ - **CoreClientMixin**: 파일 업로드 및 핵심 작업
17
+ - **DataCollectionClientMixin**: 데이터 수집 및 파일 관리
18
+ - **HITLClientMixin**: Human-in-the-loop 할당 작업
19
+ - **IntegrationClientMixin**: 플러그인 및 작업 관리
20
+ - **MLClientMixin**: 머신러닝 모델 및 정답 데이터 작업
21
+
22
+ ## 생성자
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
+ ### 매개변수
34
+
35
+ - **base_url** (`str`): Synapse 백엔드 API의 기본 URL
36
+ - **api_token** (`str`, 선택사항): API 인증 토큰. `SYNAPSE_API_TOKEN` 환경변수로도 설정 가능
37
+ - **agent_token** (`str`, 선택사항): 에이전트 인증 토큰. `SYNAPSE_AGENT_TOKEN` 환경변수로도 설정 가능
38
+ - **timeout** (`dict`, 선택사항): 사용자 정의 타임아웃 설정. 기본값은 `{'connect': 5, 'read': 30}`
39
+
40
+ ### 예제
41
+
42
+ ```python
43
+ from synapse_sdk.clients.backend import BackendClient
44
+
45
+ # 토큰을 명시적으로 지정하여 클라이언트 생성
46
+ client = BackendClient(
47
+ base_url="https://api.synapse.sh",
48
+ api_token="your-api-token"
49
+ )
50
+
51
+ # 또는 환경변수 사용
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 메서드
58
+
59
+ ### 어노테이션 작업
60
+
61
+ #### `get_project(pk)`
62
+
63
+ ID로 프로젝트 상세정보를 가져옵니다.
64
+
65
+ ```python
66
+ project = client.get_project(123)
67
+ ```
68
+
69
+ #### `get_task(pk, params)`
70
+
71
+ 선택적 매개변수와 함께 작업 상세정보를 가져옵니다.
72
+
73
+ ```python
74
+ task = client.get_task(456, params={'expand': 'data_unit'})
75
+ ```
76
+
77
+ #### `annotate_task_data(pk, data)`
78
+
79
+ 작업에 대한 어노테이션 데이터를 제출합니다.
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
+ 필터링 및 페이지네이션과 함께 작업 목록을 가져옵니다.
92
+
93
+ ```python
94
+ # 프로젝트의 작업 가져오기
95
+ tasks = client.list_tasks(params={'project': 123})
96
+
97
+ # 모든 작업 가져오기 (페이지네이션 자동 처리)
98
+ all_tasks = client.list_tasks(list_all=True)
99
+ ```
100
+
101
+ #### `create_tasks(data)`
102
+
103
+ 새로운 작업를 생성합니다.
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
+ 여러 작업에 태그를 설정합니다.
115
+
116
+ ```python
117
+ client.set_tags_tasks({
118
+ 'task_ids': [456, 457],
119
+ 'tag_ids': [1, 2, 3]
120
+ })
121
+ ```
122
+
123
+ ### 핵심 작업
124
+
125
+ #### `create_chunked_upload(file_path)`
126
+
127
+ 최적 성능을 위해 청크 업로드를 사용하여 대용량 파일을 업로드합니다.
128
+
129
+ ```python
130
+ from pathlib import Path
131
+
132
+ result = client.create_chunked_upload(Path('/path/to/large_file.zip'))
133
+ print(f"업로드 완료: {result}")
134
+ ```
135
+
136
+ **기능:**
137
+
138
+ - 최적 성능을 위한 50MB 청크 사용
139
+ - 자동 재시도 및 재개 기능
140
+ - MD5 무결성 검증
141
+ - 진행률 추적 지원
142
+
143
+ ### 데이터 수집 작업
144
+
145
+ #### `list_data_collection()`
146
+
147
+ 사용 가능한 모든 데이터 컬렉션을 나열합니다.
148
+
149
+ ```python
150
+ collections = client.list_data_collection()
151
+ ```
152
+
153
+ #### `get_data_collection(data_collection_id)`
154
+
155
+ 특정 데이터 컬렉션에 대한 상세 정보를 가져옵니다.
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
+ 백엔드에 데이터 파일을 생성하고 업로드합니다.
165
+
166
+ ```python
167
+ from pathlib import Path
168
+
169
+ # 일반 업로드
170
+ data_file = client.create_data_file(Path('/path/to/file.jpg'))
171
+
172
+ # 대용량 파일을 위한 청크 업로드
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
+ 정리된 파일 데이터를 컬렉션에 업로드합니다.
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
+ 업로드된 파일에서 데이터 유닛을 생성합니다.
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) 작업
203
+
204
+ #### `get_assignment(pk)`
205
+
206
+ 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
+ 필터링 옵션과 함께 할당 목록을 가져옵니다.
215
+
216
+ ```python
217
+ # 프로젝트의 할당 가져오기
218
+ assignments = client.list_assignments(params={'project': 123})
219
+
220
+ # 모든 할당 가져오기
221
+ all_assignments = client.list_assignments(list_all=True)
222
+ ```
223
+
224
+ #### `set_tags_assignments(data, params=None)`
225
+
226
+ 여러 할당에 태그를 설정합니다.
227
+
228
+ ```python
229
+ client.set_tags_assignments({
230
+ 'assignment_ids': [789, 790],
231
+ 'tag_ids': [1, 2]
232
+ })
233
+ ```
234
+
235
+ ### 통합 작업
236
+
237
+ #### `health_check_agent(token)`
238
+
239
+ 에이전트 상태를 확인합니다.
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
+ 플러그인을 관리합니다.
248
+
249
+ ```python
250
+ # 플러그인 가져오기
251
+ plugin = client.get_plugin(123)
252
+
253
+ # 플러그인 생성
254
+ new_plugin = client.create_plugin({
255
+ 'name': 'My Plugin',
256
+ 'description': 'Plugin description'
257
+ })
258
+
259
+ # 플러그인 업데이트
260
+ updated = client.update_plugin(123, {'description': 'Updated description'})
261
+ ```
262
+
263
+ #### `run_plugin(pk, data)`
264
+
265
+ 제공된 데이터로 플러그인을 실행합니다.
266
+
267
+ ```python
268
+ result = client.run_plugin(123, {
269
+ 'parameters': {'input': 'value'},
270
+ 'context': {...}
271
+ })
272
+ ```
273
+
274
+ #### 플러그인 릴리스 관리
275
+
276
+ ```python
277
+ # 플러그인 릴리스 생성
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
+ # 릴리스 상세정보 가져오기
285
+ release_info = client.get_plugin_release(456)
286
+ ```
287
+
288
+ #### 작업 관리
289
+
290
+ ```python
291
+ # 작업 목록
292
+ jobs = client.list_jobs(params={'status': 'running'})
293
+
294
+ # 작업 상세정보 가져오기
295
+ job = client.get_job(789, params={'expand': 'logs'})
296
+
297
+ # 작업 상태 업데이트
298
+ client.update_job(789, {'status': 'completed'})
299
+
300
+ # 작업 콘솔 로그 가져오기
301
+ logs = client.list_job_console_logs(789)
302
+ ```
303
+
304
+ #### 스토리지 작업
305
+
306
+ ```python
307
+ # 스토리지 목록
308
+ storages = client.list_storages()
309
+
310
+ # 스토리지 상세정보 가져오기
311
+ storage = client.get_storage(123)
312
+
313
+ # 스토리지 생성
314
+ new_storage = client.create_storage({
315
+ 'name': 'My Storage',
316
+ 'provider': 'amazon_s3',
317
+ 'configuration': {...}
318
+ })
319
+ ```
320
+
321
+ ### 머신러닝 작업
322
+
323
+ #### `list_models(params=None)` / `get_model(pk, params=None, url_conversion=None)`
324
+
325
+ ML 모델을 관리합니다.
326
+
327
+ ```python
328
+ # 모델 목록
329
+ models = client.list_models(params={'project': 123})
330
+
331
+ # 모델 상세정보 가져오기
332
+ model = client.get_model(456, params={'expand': 'metrics'})
333
+ ```
334
+
335
+ #### `create_model(data)`
336
+
337
+ 파일 업로드와 함께 새로운 ML 모델을 생성합니다.
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
+ #### 정답 데이터 작업
348
+
349
+ ```python
350
+ # 정답 이벤트 목록
351
+ events = client.list_ground_truth_events(
352
+ params={'ground_truth_dataset_versions': [123]},
353
+ list_all=True
354
+ )
355
+
356
+ # 정답 버전 가져오기
357
+ version = client.get_ground_truth_version(123)
358
+ ```
359
+
360
+ ## 스토리지 모델
361
+
362
+ 백엔드 클라이언트는 스토리지 작업을 위한 사전 정의된 모델을 포함합니다:
363
+
364
+ ### StorageCategory
365
+
366
+ - `INTERNAL`: 내부 스토리지 시스템
367
+ - `EXTERNAL`: 외부 스토리지 제공업체
368
+
369
+ ### StorageProvider
370
+
371
+ - `AMAZON_S3`: Amazon S3
372
+ - `AZURE`: Microsoft Azure Blob Storage
373
+ - `DIGITAL_OCEAN`: DigitalOcean Spaces
374
+ - `FILE_SYSTEM`: 로컬 파일 시스템
375
+ - `FTP` / `SFTP`: FTP 프로토콜
376
+ - `MINIO`: MinIO 스토리지
377
+ - `GCP`: Google Cloud Storage
378
+
379
+ ## 오류 처리
380
+
381
+ 모든 API 메서드는 다양한 오류 조건에 대해 `ClientError` 예외를 발생시킬 수 있습니다:
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 오류: {e}")
390
+ print(f"상태 코드: {e.status_code}")
391
+ print(f"응답: {e.response}")
392
+ ```
393
+
394
+ ## 페이지네이션
395
+
396
+ `list_all=True`를 지원하는 메서드는 자동으로 페이지네이션을 처리합니다:
397
+
398
+ ```python
399
+ # 수동 페이지네이션
400
+ tasks_page1 = client.list_tasks(params={'page': 1, 'page_size': 100})
401
+
402
+ # 자동 페이지네이션 (권장)
403
+ all_tasks = client.list_tasks(list_all=True)
404
+ ```
405
+
406
+ ## URL 변환
407
+
408
+ 일부 메서드는 파일 필드에 대한 URL 변환을 지원합니다:
409
+
410
+ ```python
411
+ # 사용자 정의 URL 변환
412
+ tasks = client.list_tasks(
413
+ url_conversion={'files': lambda url: f"https://cdn.example.com{url}"}
414
+ )
415
+ ```
416
+
417
+ ## 참고
418
+
419
+ - [AgentClient](./agent.md) - 에이전트별 작업용
420
+ - [BaseClient](./base.md) - 기본 클라이언트 구현
@@ -0,0 +1,257 @@
1
+ ---
2
+ id: base
3
+ title: BaseClient
4
+ sidebar_position: 3
5
+ ---
6
+
7
+ # BaseClient
8
+
9
+ 핵심 HTTP 작업 및 페이지네이션 기능을 제공하는 모든 Synapse SDK 클라이언트의 기본 클래스입니다.
10
+
11
+ ## 개요
12
+
13
+ `BaseClient`는 다른 모든 클라이언트에서 사용하는 HTTP 작업, 오류 처리, 요청 관리 및 페이지네이션을 위한 공통 기능을 제공합니다. 자동 파일 URL 변환 기능과 함께 효율적인 페이지네이션 처리를 구현합니다.
14
+
15
+ ## 기능
16
+
17
+ - 재시도 로직이 있는 HTTP 요청 처리
18
+ - 자동 timeout 관리
19
+ - 제너레이터를 사용한 효율적인 페이지네이션
20
+ - 파일 URL을 로컬 경로로 자동 변환
21
+ - Pydantic 모델 유효성 검사
22
+ - 연결 풀링
23
+
24
+ ## 핵심 HTTP 메서드
25
+
26
+ BaseClient는 모든 클라이언트 믹스인에서 내부적으로 사용하는 저수준 HTTP 메서드를 제공합니다:
27
+
28
+ - `_get()` - 선택적 응답 모델 검증을 포함한 GET 요청
29
+ - `_post()` - 요청/응답 검증을 포함한 POST 요청
30
+ - `_put()` - 모델 검증을 포함한 PUT 요청
31
+ - `_patch()` - 모델 검증을 포함한 PATCH 요청
32
+ - `_delete()` - 모델 검증을 포함한 DELETE 요청
33
+
34
+ 이러한 메서드는 일반적으로 직접 호출되지 않습니다. 대신 클라이언트 믹스인에서 제공하는 상위 수준 메서드를 사용하세요.
35
+
36
+ ## 페이지네이션 메서드
37
+
38
+ ### `_list(path, url_conversion=None, list_all=False, params=None, **kwargs)`
39
+
40
+ 선택적 자동 페이지네이션 및 파일 URL 변환 기능을 갖춘 페이지네이션 API 엔드포인트에서 리소스를 나열합니다.
41
+
42
+ **매개변수:**
43
+
44
+ - `path` (str): 요청할 URL 경로
45
+ - `url_conversion` (dict, optional): 파일 URL을 로컬 경로로 변환하기 위한 설정
46
+ - 구조: `{'files_fields': ['field1', 'field2'], 'is_list': True}`
47
+ - 자동으로 파일을 다운로드하고 URL을 로컬 경로로 대체
48
+ - `list_all` (bool): True인 경우 제너레이터를 사용하여 모든 페이지의 모든 결과 반환
49
+ - `params` (dict, optional): 쿼리 매개변수 (필터, 정렬 등)
50
+ - `**kwargs`: 추가 요청 인자
51
+
52
+ **반환값:**
53
+
54
+ - `list_all=False`인 경우: `results`, `count`, `next`, `previous`를 포함한 딕셔너리
55
+ - `list_all=True`인 경우: `(generator, total_count)` 튜플
56
+
57
+ **예제:**
58
+
59
+ ```python
60
+ # 첫 페이지만 가져오기
61
+ response = client._list('api/tasks/')
62
+ tasks = response['results'] # 첫 페이지의 작업들
63
+ total = response['count'] # 전체 작업 수
64
+
65
+ # 제너레이터를 사용하여 모든 결과 가져오기 (메모리 효율적)
66
+ generator, total_count = client._list('api/tasks/', list_all=True)
67
+ all_tasks = list(generator) # 자동으로 모든 페이지 가져오기
68
+
69
+ # 필터와 함께 사용
70
+ params = {'status': 'pending', 'priority': 'high'}
71
+ response = client._list('api/tasks/', params=params)
72
+
73
+ # 파일 필드에 url_conversion 사용
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
+ # 'files' 필드의 파일 URL이 자동으로 다운로드되어 로컬 경로로 변환됨
82
+ for unit in generator:
83
+ print(unit['files']) # URL이 아닌 로컬 파일 경로
84
+ ```
85
+
86
+ ### `_list_all(path, url_conversion=None, params=None, **kwargs)`
87
+
88
+ 페이지네이션된 API 엔드포인트에서 모든 결과를 생성하는 제너레이터입니다.
89
+
90
+ 이 메서드는 `list_all=True`일 때 `_list()`에 의해 내부적으로 호출됩니다. `next` URL을 따라가며 자동으로 페이지네이션을 처리하고, 깊은 페이지네이션에서 스택 오버플로우를 방지하기 위해 재귀 대신 반복적 접근 방식(while 루프)을 사용합니다.
91
+
92
+ **주요 개선사항 (SYN-5757):**
93
+
94
+ 1. **page_size 중복 제거**: `page_size` 매개변수는 첫 번째 요청에만 추가됩니다. 후속 요청은 이미 모든 필요한 매개변수를 포함하는 `next` URL을 직접 사용합니다.
95
+
96
+ 2. **적절한 params 처리**: 사용자가 지정한 쿼리 매개변수가 첫 번째 요청에 올바르게 전달되고 `next` URL을 통해 페이지네이션 전체에 보존됩니다.
97
+
98
+ 3. **모든 페이지에 url_conversion 적용**: URL 변환이 첫 번째 페이지뿐만 아니라 모든 페이지에 적용됩니다.
99
+
100
+ 4. **재귀 대신 반복**: 더 나은 메모리 효율성과 대용량 데이터셋에서 스택 오버플로우 방지를 위해 재귀 대신 while 루프를 사용합니다.
101
+
102
+ **매개변수:**
103
+
104
+ - `path` (str): 초기 URL 경로
105
+ - `url_conversion` (dict, optional): 모든 페이지에 적용
106
+ - `params` (dict, optional): 첫 번째 요청에만 사용되는 쿼리 매개변수
107
+ - `**kwargs`: 추가 요청 인자
108
+
109
+ **생성:**
110
+
111
+ 모든 페이지의 개별 결과 항목을 지연 방식으로 가져옵니다.
112
+
113
+ **예제:**
114
+
115
+ ```python
116
+ # 기본: 모든 작업 반복
117
+ for task in client._list_all('api/tasks/'):
118
+ process_task(task)
119
+
120
+ # 필터와 함께
121
+ params = {'status': 'pending'}
122
+ for task in client._list_all('api/tasks/', params=params):
123
+ print(task['id'])
124
+
125
+ # 중첩된 파일 필드에 url_conversion 사용
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']) # 로컬 경로
129
+
130
+ # 모든 결과 수집 (대용량 데이터셋의 경우 메모리 집약적)
131
+ all_results = list(client._list_all('api/tasks/'))
132
+ ```
133
+
134
+ ## 파일 다운로드를 위한 URL 변환
135
+
136
+ `url_conversion` 매개변수는 API 응답에서 URL로 참조되는 파일의 자동 다운로드를 활성화합니다. 이는 파일 참조를 포함하는 데이터 유닛, 작업 또는 모든 리소스로 작업할 때 특히 유용합니다.
137
+
138
+ ### URL 변환 구조
139
+
140
+ ```python
141
+ url_conversion = {
142
+ 'files_fields': ['files', 'images', 'data.attachments'], # 필드 경로
143
+ 'is_list': True # 항목 목록을 처리하는지 여부
144
+ }
145
+ ```
146
+
147
+ - `files_fields`: 필드 경로 목록 (중첩 필드를 위한 점 표기법 지원)
148
+ - `is_list`: 페이지네이션된 목록 응답의 경우 `True`로 설정
149
+
150
+ ### 작동 방식
151
+
152
+ 1. API가 파일 URL이 포함된 응답 반환
153
+ 2. `url_conversion`이 URL을 포함하는 필드 식별
154
+ 3. 파일이 임시 디렉토리에 자동으로 다운로드됨
155
+ 4. URL이 로컬 파일 경로로 대체됨
156
+ 5. 코드가 URL 대신 로컬 경로가 포함된 응답 수신
157
+
158
+ ### 예제
159
+
160
+ ```python
161
+ # 단순 파일 필드
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']은 이제 URL이 아닌 로컬 Path 객체
170
+ with open(photo['image_url'], 'rb') as f:
171
+ process_image(f)
172
+
173
+ # 여러 파일 필드
174
+ url_conversion = {
175
+ 'files_fields': ['thumbnail', 'full_image', 'raw_data'],
176
+ 'is_list': True
177
+ }
178
+
179
+ # 점 표기법을 사용한 중첩 필드
180
+ url_conversion = {
181
+ 'files_fields': ['data.files', 'metadata.preview', 'annotations.image'],
182
+ 'is_list': True
183
+ }
184
+
185
+ # 더 나은 성능을 위한 비동기 다운로드
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 # 모든 파일 동시 다운로드
194
+ )
195
+ ```
196
+
197
+ ## 성능 고려사항
198
+
199
+ ### 메모리 효율성
200
+
201
+ 대용량 데이터셋으로 작업할 때는 모든 결과를 메모리에 로드하는 대신 제너레이터를 사용하세요:
202
+
203
+ ```python
204
+ # ❌ 메모리 집약적 - 모든 결과 로드
205
+ all_tasks = list(client._list('api/tasks/', list_all=True)[0])
206
+
207
+ # ✅ 메모리 효율적 - 한 번에 하나씩 처리
208
+ generator, _ = client._list('api/tasks/', list_all=True)
209
+ for task in generator:
210
+ process_task(task)
211
+ # 작업이 처리되고 가비지 컬렉션될 수 있음
212
+ ```
213
+
214
+ ### 페이지네이션 모범 사례
215
+
216
+ 1. **한 페이지보다 큰 데이터셋에는 list_all=True 사용**
217
+ 2. **기본값(100)이 최적이 아닌 경우 params에서 적절한 page_size 설정**
218
+ 3. **파일을 처리해야 할 때만 url_conversion 사용**
219
+ 4. **항목당 여러 파일이 있는 경우 비동기 다운로드 고려**
220
+
221
+ ```python
222
+ # 대용량 데이터셋을 위한 최적 페이지네이션
223
+ params = {'page_size': 50} # 더 빠른 첫 응답을 위한 작은 페이지
224
+ generator, total = client._list(
225
+ 'api/large_dataset/',
226
+ list_all=True,
227
+ params=params
228
+ )
229
+
230
+ # 진행 상황 추적과 함께 처리
231
+ from tqdm import tqdm
232
+ for item in tqdm(generator, total=total):
233
+ process_item(item)
234
+ ```
235
+
236
+ ## 클라이언트 믹스인에서의 사용
237
+
238
+ BaseClient 페이지네이션 메서드는 모든 클라이언트 믹스인에서 내부적으로 사용됩니다:
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
+ ## 참고
253
+
254
+ - [BackendClient](./backend.md) - 메인 클라이언트 구현
255
+ - [AgentClient](./agent.md) - Agent 전용 작업
256
+ - [DataCollectionClientMixin](./data-collection-mixin.md) - 데이터 및 파일 작업
257
+ - [AnnotationClientMixin](./annotation-mixin.md) - 작업 및 주석 관리