synapse-sdk 1.0.0a57__tar.gz → 1.0.0a59__tar.gz

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 (166) hide show
  1. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/PKG-INFO +1 -1
  2. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/backend/annotation.py +8 -0
  3. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/backend/data_collection.py +10 -1
  4. synapse_sdk-1.0.0a59/synapse_sdk/plugins/categories/pre_annotation/actions/to_task.py +210 -0
  5. synapse_sdk-1.0.0a59/synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +7 -0
  6. synapse_sdk-1.0.0a57/synapse_sdk/plugins/categories/upload/templates/plugin/task_pre_annotation.py → synapse_sdk-1.0.0a59/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/to_task.py +1 -7
  7. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/upload/actions/upload.py +161 -5
  8. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/upload/templates/config.yaml +3 -4
  9. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk.egg-info/PKG-INFO +1 -1
  10. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk.egg-info/SOURCES.txt +2 -2
  11. synapse_sdk-1.0.0a57/synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +0 -3
  12. synapse_sdk-1.0.0a57/synapse_sdk/plugins/categories/upload/actions/task_pre_annotation.py +0 -101
  13. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/.github/workflows/lint.yml +0 -0
  14. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/.github/workflows/pypi-publish.yml +0 -0
  15. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/.gitignore +0 -0
  16. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/.pre-commit-config.yaml +0 -0
  17. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/LICENSE +0 -0
  18. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/README.md +0 -0
  19. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/locale/en/LC_MESSAGES/messages.mo +0 -0
  20. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/locale/en/LC_MESSAGES/messages.po +0 -0
  21. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/locale/ko/LC_MESSAGES/messages.mo +0 -0
  22. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/locale/ko/LC_MESSAGES/messages.po +0 -0
  23. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/pyproject.toml +0 -0
  24. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/requirements.test.txt +0 -0
  25. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/requirements.txt +0 -0
  26. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/setup.cfg +0 -0
  27. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/__init__.py +0 -0
  28. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/cli/__init__.py +0 -0
  29. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/cli/alias/__init__.py +0 -0
  30. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/cli/alias/create.py +0 -0
  31. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/cli/alias/dataclass.py +0 -0
  32. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/cli/alias/default.py +0 -0
  33. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/cli/alias/delete.py +0 -0
  34. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/cli/alias/list.py +0 -0
  35. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/cli/alias/read.py +0 -0
  36. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/cli/alias/update.py +0 -0
  37. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/cli/alias/utils.py +0 -0
  38. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/cli/plugin/__init__.py +0 -0
  39. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/cli/plugin/create.py +0 -0
  40. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/cli/plugin/publish.py +0 -0
  41. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/cli/plugin/run.py +0 -0
  42. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/__init__.py +0 -0
  43. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/agent/__init__.py +0 -0
  44. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/agent/core.py +0 -0
  45. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/agent/ray.py +0 -0
  46. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/agent/service.py +0 -0
  47. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/backend/__init__.py +0 -0
  48. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/backend/core.py +0 -0
  49. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/backend/hitl.py +0 -0
  50. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/backend/integration.py +0 -0
  51. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/backend/ml.py +0 -0
  52. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/backend/models.py +0 -0
  53. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/base.py +0 -0
  54. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/exceptions.py +0 -0
  55. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/ray/__init__.py +0 -0
  56. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/ray/core.py +0 -0
  57. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/ray/serve.py +0 -0
  58. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/utils.py +0 -0
  59. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/validators/__init__.py +0 -0
  60. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/clients/validators/collections.py +0 -0
  61. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/i18n.py +0 -0
  62. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/loggers.py +0 -0
  63. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/__init__.py +0 -0
  64. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/__init__.py +0 -0
  65. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/base.py +0 -0
  66. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/data_validation/__init__.py +0 -0
  67. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/data_validation/actions/__init__.py +0 -0
  68. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/data_validation/actions/validation.py +0 -0
  69. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/data_validation/templates/config.yaml +0 -0
  70. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/data_validation/templates/plugin/__init__.py +0 -0
  71. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +0 -0
  72. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/decorators.py +0 -0
  73. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/export/__init__.py +0 -0
  74. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/export/actions/__init__.py +0 -0
  75. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/export/actions/export.py +0 -0
  76. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/export/enums.py +0 -0
  77. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/export/templates/config.yaml +0 -0
  78. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +0 -0
  79. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/export/templates/plugin/export.py +0 -0
  80. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/neural_net/__init__.py +0 -0
  81. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/neural_net/actions/__init__.py +0 -0
  82. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/neural_net/actions/deployment.py +0 -0
  83. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/neural_net/actions/gradio.py +0 -0
  84. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/neural_net/actions/inference.py +0 -0
  85. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/neural_net/actions/test.py +0 -0
  86. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/neural_net/actions/train.py +0 -0
  87. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/neural_net/actions/tune.py +0 -0
  88. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/neural_net/base/__init__.py +0 -0
  89. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/neural_net/base/inference.py +0 -0
  90. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/neural_net/templates/config.yaml +0 -0
  91. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/neural_net/templates/plugin/__init__.py +0 -0
  92. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +0 -0
  93. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/neural_net/templates/plugin/test.py +0 -0
  94. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/neural_net/templates/plugin/train.py +0 -0
  95. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/post_annotation/__init__.py +0 -0
  96. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/post_annotation/actions/__init__.py +0 -0
  97. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/post_annotation/actions/post_annotation.py +0 -0
  98. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/post_annotation/templates/config.yaml +0 -0
  99. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/post_annotation/templates/plugin/__init__.py +0 -0
  100. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/post_annotation/templates/plugin/post_annotation.py +0 -0
  101. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/pre_annotation/__init__.py +0 -0
  102. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +0 -0
  103. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation.py +0 -0
  104. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/__init__.py +0 -0
  105. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/pre_annotation.py +0 -0
  106. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/registry.py +0 -0
  107. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/smart_tool/__init__.py +0 -0
  108. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/smart_tool/actions/__init__.py +0 -0
  109. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/smart_tool/actions/auto_label.py +0 -0
  110. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/smart_tool/templates/config.yaml +0 -0
  111. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/smart_tool/templates/plugin/__init__.py +0 -0
  112. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/smart_tool/templates/plugin/auto_label.py +0 -0
  113. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/templates.py +0 -0
  114. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/upload/__init__.py +0 -0
  115. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/upload/actions/__init__.py +0 -0
  116. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +0 -0
  117. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +0 -0
  118. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/enums.py +0 -0
  119. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/exceptions.py +0 -0
  120. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/models.py +0 -0
  121. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/templates/cookiecutter.json +0 -0
  122. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/templates/hooks/post_gen_project.py +0 -0
  123. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/templates/hooks/pre_prompt.py +0 -0
  124. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.gitignore +0 -0
  125. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.pre-commit-config.yaml +0 -0
  126. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/README.md +0 -0
  127. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml +0 -0
  128. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/plugin/__init__.py +0 -0
  129. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/pyproject.toml +0 -0
  130. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +0 -0
  131. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/upload.py +0 -0
  132. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/plugins/utils.py +0 -0
  133. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/shared/__init__.py +0 -0
  134. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/shared/enums.py +0 -0
  135. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/types.py +0 -0
  136. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/__init__.py +0 -0
  137. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/dataset.py +0 -0
  138. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/debug.py +0 -0
  139. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/file.py +0 -0
  140. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/http.py +0 -0
  141. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/module_loading.py +0 -0
  142. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/network.py +0 -0
  143. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/pydantic/__init__.py +0 -0
  144. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/pydantic/config.py +0 -0
  145. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/pydantic/errors.py +0 -0
  146. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/pydantic/validators.py +0 -0
  147. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/storage/__init__.py +0 -0
  148. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/storage/providers/__init__.py +0 -0
  149. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/storage/providers/gcp.py +0 -0
  150. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/storage/providers/s3.py +0 -0
  151. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/storage/providers/sftp.py +0 -0
  152. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/storage/registry.py +0 -0
  153. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk/utils/string.py +0 -0
  154. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk.egg-info/dependency_links.txt +0 -0
  155. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk.egg-info/entry_points.txt +0 -0
  156. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk.egg-info/requires.txt +0 -0
  157. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/synapse_sdk.egg-info/top_level.txt +0 -0
  158. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/tests/__init__.py +0 -0
  159. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/tests/clients/__init__.py +0 -0
  160. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/tests/clients/test_backend_models.py +0 -0
  161. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/tests/clients/test_base_client.py +0 -0
  162. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/tests/clients/test_collection_validators.py +0 -0
  163. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/tests/loggers/__init__.py +0 -0
  164. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/tests/loggers/test_base_logger.py +0 -0
  165. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/tests/utils/__init__,py +0 -0
  166. {synapse_sdk-1.0.0a57 → synapse_sdk-1.0.0a59}/tests/utils/test_debug.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse-sdk
3
- Version: 1.0.0a57
3
+ Version: 1.0.0a59
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -7,6 +7,14 @@ class AnnotationClientMixin(BaseClient):
7
7
  path = f'projects/{pk}/'
8
8
  return self._get(path)
9
9
 
10
+ def get_task(self, pk, params):
11
+ path = f'tasks/{pk}/'
12
+ return self._get(path, params=params)
13
+
14
+ def patch_task(self, pk, data):
15
+ path = f'tasks/{pk}/'
16
+ return self._patch(path, data=data)
17
+
10
18
  def get_task_tag(self, pk):
11
19
  path = f'task_tags/{pk}/'
12
20
  return self._get(path)
@@ -5,7 +5,7 @@ from typing import Dict, Optional
5
5
  from tqdm import tqdm
6
6
 
7
7
  from synapse_sdk.clients.base import BaseClient
8
- from synapse_sdk.clients.utils import get_batched_list
8
+ from synapse_sdk.clients.utils import get_batched_list, get_default_url_conversion
9
9
 
10
10
 
11
11
  class DataCollectionClientMixin(BaseClient):
@@ -31,6 +31,10 @@ class DataCollectionClientMixin(BaseClient):
31
31
  path = 'data_files/'
32
32
  return self._post(path, files={'file': file_path})
33
33
 
34
+ def get_data_unit(self, data_unit_id: int, params=None):
35
+ path = f'data_units/{data_unit_id}/'
36
+ return self._get(path, params=params)
37
+
34
38
  def create_data_units(self, data):
35
39
  """Create data units to synapse-backend.
36
40
 
@@ -40,6 +44,11 @@ class DataCollectionClientMixin(BaseClient):
40
44
  path = 'data_units/'
41
45
  return self._post(path, data=data)
42
46
 
47
+ def list_data_units(self, params=None, url_conversion=None, list_all=False):
48
+ path = 'data_units/'
49
+ url_conversion = get_default_url_conversion(url_conversion, files_fields=['files'])
50
+ return self._list(path, params=params, url_conversion=url_conversion, list_all=list_all)
51
+
43
52
  def upload_data_collection(
44
53
  self,
45
54
  data_collection_id: int,
@@ -0,0 +1,210 @@
1
+ import json
2
+ from datetime import datetime
3
+ from enum import Enum
4
+ from typing import Annotated
5
+
6
+ import requests
7
+ from pydantic import AfterValidator, BaseModel, field_validator
8
+ from pydantic_core import PydanticCustomError
9
+
10
+ from synapse_sdk.clients.exceptions import ClientError
11
+ from synapse_sdk.plugins.categories.base import Action
12
+ from synapse_sdk.plugins.categories.decorators import register_action
13
+ from synapse_sdk.plugins.enums import PluginCategory, RunMethod
14
+ from synapse_sdk.plugins.models import Run
15
+ from synapse_sdk.utils.pydantic.validators import non_blank
16
+
17
+
18
+ class AnnotationMethod(str, Enum):
19
+ FILE = 'file'
20
+ INFERENCE = 'inference'
21
+
22
+
23
+ class AnnotateTaskDataStatus(str, Enum):
24
+ SUCCESS = 'success'
25
+ FAILED = 'failed'
26
+
27
+
28
+ class ToTaskRun(Run):
29
+ class AnnotateTaskDataLog(BaseModel):
30
+ """Log model for annotate task data."""
31
+
32
+ task_info: str | None
33
+ status: AnnotateTaskDataStatus
34
+ created: str
35
+
36
+ class MetricsRecord(BaseModel):
37
+ """Metrics record model."""
38
+
39
+ stand_by: int
40
+ failed: int
41
+ success: int
42
+
43
+ def log_annotate_task_data(self, task_info: dict, status: AnnotateTaskDataStatus):
44
+ """Log annotate task data."""
45
+ now = datetime.now().isoformat()
46
+ self.log(
47
+ 'annotate_task_data',
48
+ self.AnnotateTaskDataLog(task_info=json.dumps(task_info), status=status, created=now).model_dump(),
49
+ )
50
+
51
+ def log_metrics(self, record: MetricsRecord, category: str):
52
+ """Log FileToTask metrics.
53
+
54
+ Args:
55
+ record (MetricsRecord): The metrics record to log.
56
+ category (str): The category of the metrics.
57
+ """
58
+ record = self.MetricsRecord.model_validate(record)
59
+ self.set_metrics(value=record.dict(), category=category)
60
+
61
+
62
+ class ToTaskParams(BaseModel):
63
+ """ToTask action parameters.
64
+
65
+ Args:
66
+ name (str): The name of the action.
67
+ description (str | None): The description of the action.
68
+ project (int): The project ID.
69
+ task_filter (dict): The filter of tasks.
70
+ method (AnnotationMethod): The method of annotation.
71
+ target_specification_name (str | None): The name of the target specification.
72
+ pre_processor (int | None): The pre processor ID.
73
+ pre_processor_params (dict): The params of the pre processor.
74
+ """
75
+
76
+ name: Annotated[str, AfterValidator(non_blank)]
77
+ description: str | None = None
78
+ project: int
79
+ task_filter: dict
80
+ method: AnnotationMethod | None = None
81
+ target_specification_name: str | None = None
82
+ pre_processor: int | None = None
83
+ pre_processor_params: dict
84
+
85
+ @field_validator('project', mode='before')
86
+ @classmethod
87
+ def check_project_exists(cls, value: str, info) -> str:
88
+ """Validate synapse-backend project exists."""
89
+ if not value:
90
+ return value
91
+
92
+ action = info.context['action']
93
+ client = action.client
94
+ try:
95
+ client.get_project(value)
96
+ except ClientError:
97
+ raise PydanticCustomError('client_error', 'Error occurred while checking project exists.')
98
+ return value
99
+
100
+
101
+ @register_action
102
+ class ToTaskAction(Action):
103
+ """ToTask action class.
104
+
105
+ * Annotate data to tasks.
106
+ """
107
+
108
+ name = 'to_task'
109
+ category = PluginCategory.PRE_ANNOTATION
110
+ method = RunMethod.JOB
111
+ run_class = ToTaskRun
112
+ progress_categories = {
113
+ 'annotate_task_data': {
114
+ 'proportion': 100,
115
+ },
116
+ }
117
+ metrics_categories = {'annotate_task_data'}
118
+
119
+ def start(self):
120
+ """Start file_to_task action.
121
+
122
+ * Generate tasks.
123
+ * Annotate data to tasks.
124
+ """
125
+
126
+ # entrypoint = self.entrypoint(self.run)
127
+ client = self.run.client
128
+ # project_id = self.params['project']
129
+ # project = client.get_project(project_id)
130
+ # data_collection_id = project['dataset']
131
+ # data_collection = client.get_dataset(data_collection_id)
132
+
133
+ # Generate tasks if provided project is empty.
134
+ task_ids_query_params = {
135
+ 'project': self.params['project'],
136
+ 'fields': 'id',
137
+ }
138
+ if self.params.get('task_filter'):
139
+ task_ids_query_params.update(self.params['task_filter'])
140
+ task_ids_generator, task_ids_count = client.list_tasks(params=task_ids_query_params, list_all=True)
141
+ task_ids = [item['id'] for item in task_ids_generator]
142
+
143
+ # If no tasks found, break the job.
144
+ if not task_ids_count:
145
+ self.run.log_message('Tasks to annotate not found.')
146
+ self.run.end_log()
147
+
148
+ # Annotate data to tasks.
149
+ task_data_annotation_type = self.params['task_data_annotation_type']
150
+ if task_data_annotation_type == AnnotationMethod.FILE:
151
+ self._handle_annotate_data_from_files(task_ids)
152
+ elif task_data_annotation_type == AnnotationMethod.INFERENCE:
153
+ self._handle_annotate_data_with_inference(task_ids)
154
+
155
+ return {}
156
+
157
+ def _handle_annotate_data_from_files(self, task_ids: list[int]):
158
+ """Handle annotate data from files to tasks.
159
+
160
+ Args:
161
+ task_ids (list[int]): List of task IDs to annotate data to.
162
+ """
163
+ client = self.run.client
164
+ if not (target_task_data_specification_code := self.params.get('target_task_data_specification_code')):
165
+ self.run.log_message('Target task data specification code not found.')
166
+ self.run.end_log()
167
+ task_params = {
168
+ 'fields': 'id,data,data_unit',
169
+ 'expand': 'data_unit',
170
+ }
171
+ for task_id in task_ids:
172
+ task = client.get_task(task_id, params=task_params)
173
+ data_file = task['data_unit']['files'].get(target_task_data_specification_code)
174
+ if not data_file:
175
+ self.run.log_message(f'File specification not found for task {task_id}')
176
+ self.run.log_annotate_task_data(
177
+ {'task_id': task_id, 'error': 'File specification not found'}, AnnotateTaskDataStatus.FAILED
178
+ )
179
+ continue
180
+ url = data_file.get('url')
181
+ if not url:
182
+ self.run.log_message(f'URL not found for task {task_id}')
183
+ self.run.log_annotate_task_data(
184
+ {'task_id': task_id, 'error': 'URL not found'}, AnnotateTaskDataStatus.FAILED
185
+ )
186
+ continue
187
+
188
+ try:
189
+ response = requests.get(url)
190
+ response.raise_for_status() # Raise an exception for 4XX/5XX responses
191
+ data = json.loads(response.content)
192
+ client.patch_task(task_id, data={'data': data})
193
+
194
+ # Log success
195
+ self.run.log_annotate_task_data({'task_id': task_id, 'url': url}, AnnotateTaskDataStatus.SUCCESS)
196
+ except Exception as e:
197
+ self.run.log_message(f'Failed to get content from URL for task {task_id}: {str(e)}')
198
+ self.run.log_annotate_task_data(
199
+ {'task_id': task_id, 'url': url, 'error': str(e)}, AnnotateTaskDataStatus.FAILED
200
+ )
201
+ continue
202
+
203
+ def _handle_annotate_data_with_inference(self, task_ids: list[int]):
204
+ """Handle annotate data with inference to tasks.
205
+
206
+ Args:
207
+ task_ids (list[int]): List of task IDs to annotate data to.
208
+ """
209
+ self.run.log_message('Pre annotation with inference is not supported.')
210
+ self.run.end_log()
@@ -0,0 +1,7 @@
1
+ actions:
2
+ pre_annotation:
3
+ entrypoint: plugin.pre_annotation.pre_annotate
4
+ to_task:
5
+ entrypoint: plugin.to_task.AnnotationToTask
6
+ ui_schema: |
7
+ Dumped FormKit Schema for pre_annotation plugin to_task action's custom options
@@ -1,4 +1,4 @@
1
- class TaskPreAnnotation:
1
+ class AnnotationToTask:
2
2
  def __init__(self, run, *args, **kwargs):
3
3
  """Initialize the plugin task pre annotation action class.
4
4
 
@@ -6,9 +6,3 @@ class TaskPreAnnotation:
6
6
  run: Plugin run object.
7
7
  """
8
8
  self.run = run
9
-
10
- def handle_annotate_data_from_files(self):
11
- pass
12
-
13
- def handle_annotate_data_with_inference(self):
14
- pass
@@ -1,6 +1,7 @@
1
1
  import json
2
2
  from datetime import datetime
3
3
  from enum import Enum
4
+ from pathlib import Path
4
5
  from typing import Annotated, Dict, List
5
6
 
6
7
  from pydantic import AfterValidator, BaseModel, field_validator
@@ -8,6 +9,7 @@ from pydantic_core import PydanticCustomError
8
9
 
9
10
  from synapse_sdk.clients.exceptions import ClientError
10
11
  from synapse_sdk.clients.utils import get_batched_list
12
+ from synapse_sdk.clients.validators.collections import FileSpecificationValidator
11
13
  from synapse_sdk.i18n import gettext as _
12
14
  from synapse_sdk.plugins.categories.base import Action
13
15
  from synapse_sdk.plugins.categories.decorators import register_action
@@ -45,6 +47,13 @@ class UploadRun(Run):
45
47
  status: UploadStatus
46
48
  created: str
47
49
 
50
+ class MetricsRecord(BaseModel):
51
+ """Metrics record model."""
52
+
53
+ stand_by: int
54
+ failed: int
55
+ success: int
56
+
48
57
  def log_data_file(self, data_file_info: dict, status: UploadStatus):
49
58
  """Upload data_file log.
50
59
 
@@ -82,6 +91,15 @@ class UploadRun(Run):
82
91
  now = datetime.now().isoformat()
83
92
  self.log('upload_task', self.TaskLog(task_id=task_id, status=status.value, created=now).model_dump())
84
93
 
94
+ def log_metrics(self, record: MetricsRecord, category: str):
95
+ """Log upload metrics.
96
+ Args:
97
+ record (MetricsRecord): The metrics record to log.
98
+ category (str): The category of the metrics.
99
+ """
100
+ record = self.MetricsRecord.model_validate(record)
101
+ self.set_metrics(value=record.model_dump(), category=category)
102
+
85
103
 
86
104
  class UploadParams(BaseModel):
87
105
  """Upload action parameters.
@@ -94,8 +112,6 @@ class UploadParams(BaseModel):
94
112
  storage (int): The storage of the action.
95
113
  collection (int): The collection of the action.
96
114
  project (int | None): The project of the action.
97
- is_generate_tasks (bool): The flag to generate tasks.
98
- is_generate_ground_truths (bool): The flag to generate ground truths
99
115
  """
100
116
 
101
117
  name: Annotated[str, AfterValidator(non_blank)]
@@ -104,6 +120,8 @@ class UploadParams(BaseModel):
104
120
  storage: int
105
121
  collection: int
106
122
  project: int | None
123
+ is_generate_tasks: bool = False
124
+ is_generate_ground_truths: bool = False
107
125
 
108
126
  @field_validator('storage', mode='before')
109
127
  @classmethod
@@ -162,6 +180,12 @@ class UploadAction(Action):
162
180
  analyze_collection: The progress category for the analyze collection process.
163
181
  data_file_upload: The progress category for the upload process.
164
182
  generate_data_units: The progress category for the generate data units process.
183
+ generate_tasks: The progress category for the generate tasks process.
184
+ generate_ground_truths: The progress category for the generate ground truths process.
185
+
186
+ Metrics Categories:
187
+ data_file: The metrics category for the data file.
188
+ data_unit: The metrics category for the data unit.
165
189
  """
166
190
 
167
191
  name = 'upload'
@@ -170,15 +194,16 @@ class UploadAction(Action):
170
194
  run_class = UploadRun
171
195
  progress_categories = {
172
196
  'analyze_collection': {
173
- 'proportion': 10,
197
+ 'proportion': 0,
174
198
  },
175
199
  'upload_data_files': {
176
- 'proportion': 50,
200
+ 'proportion': 0,
177
201
  },
178
202
  'generate_data_units': {
179
- 'proportion': 40,
203
+ 'proportion': 0,
180
204
  },
181
205
  }
206
+ metrics_categories = {'data_file', 'data_unit'}
182
207
 
183
208
  def get_uploader(self, path, file_specification, organized_files):
184
209
  """Get uploader from entrypoint."""
@@ -232,6 +257,12 @@ class UploadAction(Action):
232
257
  generated_data_units = self._generate_data_units(uploaded_files, upload_result_count)
233
258
  result['generated_data_units_count'] = len(generated_data_units)
234
259
 
260
+ # Setup task with uploaded synapse-backend data units.
261
+ if not len(generated_data_units):
262
+ self.run.log_message('No data units were generated.', context=Context.WARNING.value)
263
+ self.run.end_log()
264
+ return result
265
+
235
266
  self.run.end_log()
236
267
  return result
237
268
 
@@ -263,6 +294,7 @@ class UploadAction(Action):
263
294
  # Initialize progress
264
295
  self.run.set_progress(0, organized_files_count, category='upload_data_files')
265
296
  self.run.log_message('Uploading data files...')
297
+ data_file_metrics_record = self.run.MetricsRecord(stand_by=organized_files_count, success=0, failed=0)
266
298
 
267
299
  client = self.run.client
268
300
  collection_id = self.params['data_collection']
@@ -272,6 +304,9 @@ class UploadAction(Action):
272
304
  for organized_file in organized_files:
273
305
  uploaded_data_file = client.upload_data_file(organized_file, collection_id)
274
306
  self.run.log_data_file(organized_file, UploadStatus.SUCCESS)
307
+ data_file_metrics_record.stand_by -= 1
308
+ data_file_metrics_record.success += 1
309
+ self.run.log_metrics(record=data_file_metrics_record, category='data_file')
275
310
  upload_result.append(uploaded_data_file)
276
311
  self.run.set_progress(current_progress, organized_files_count, category='upload_data_files')
277
312
  current_progress += 1
@@ -292,6 +327,7 @@ class UploadAction(Action):
292
327
  """
293
328
  # Initialize progress
294
329
  self.run.set_progress(0, upload_result_count, category='generate_data_units')
330
+ data_unit_metrics_record = self.run.MetricsRecord(stand_by=upload_result_count, success=0, failed=0)
295
331
 
296
332
  client = self.run.client
297
333
 
@@ -301,6 +337,9 @@ class UploadAction(Action):
301
337
  batches_count = len(batches)
302
338
  for batch in batches:
303
339
  created_data_units = client.create_data_units(batch)
340
+ data_unit_metrics_record.stand_by -= len(created_data_units)
341
+ data_unit_metrics_record.success += len(created_data_units)
342
+ self.run.log_metrics(record=data_unit_metrics_record, category='data_unit')
304
343
  generated_data_units.append(created_data_units)
305
344
  self.run.set_progress(current_progress, batches_count, category='generate_data_units')
306
345
  current_progress += 1
@@ -311,3 +350,120 @@ class UploadAction(Action):
311
350
  self.run.set_progress(upload_result_count, upload_result_count, category='generate_data_units')
312
351
 
313
352
  return sum(generated_data_units, [])
353
+
354
+ def _validate_organized_files(self, organized_files: List, file_specification_template: Dict) -> bool:
355
+ """Validate organized files from Uploader."""
356
+ validator = FileSpecificationValidator(file_specification_template, organized_files)
357
+ return validator.validate()
358
+
359
+ def _organize_files(self, directory: Path, file_specification: List) -> List:
360
+ """Organize files according to the file specification.
361
+ This method handles type-based directory structure where files are organized in
362
+ directories named after file types (e.g., 'image_1/' directory contains image files
363
+ like '1.jpg', '2.jpg'). For each dataset ID found in the primary directory, it attempts
364
+ to find corresponding files in all type directories.
365
+
366
+ TODO : Add Logic to handle file specific name patterns and extensions.
367
+ (e.g. pcd:S_DCH_230725_0156_LR_037.pcd, image_1:S_DCH_230725_0156_FC_037, image_2:S_DCH_230725_0156_LF_037.jpg)
368
+ Args:
369
+ directory (Path): Root directory containing files to organize.
370
+ file_specification (List): File specification list.
371
+ Returns:
372
+ List: List of dictionaries containing organized files.
373
+ """
374
+ organized_files = []
375
+ self.run.log_message(f'Looking for files in {directory}...')
376
+
377
+ # Check for type-based directory structure (e.g., image_1/, pcd_1/)
378
+ type_dirs = {}
379
+ type_extensions = {} # Store common extensions for each type directory
380
+
381
+ for spec in file_specification:
382
+ spec_name = spec['name']
383
+
384
+ spec_dir = directory / spec_name
385
+ if spec_dir.exists() and spec_dir.is_dir():
386
+ type_dirs[spec_name] = spec_dir
387
+
388
+ # Analyze file extensions in this directory
389
+ extensions = {}
390
+ for file_path in spec_dir.glob('*'):
391
+ if file_path.is_file():
392
+ ext = file_path.suffix.lower()
393
+ extensions[ext] = extensions.get(ext, 0) + 1
394
+
395
+ # Find the most common extension
396
+ if extensions:
397
+ common_ext = max(extensions.items(), key=lambda x: x[1])[0]
398
+ type_extensions[spec_name] = common_ext
399
+ self.run.log_message(f'Found type directory: {spec_name} (common extension: {common_ext})')
400
+
401
+ # If type-based directories don't exist, exit early
402
+ if not type_dirs:
403
+ self.run.log_message('No type-based directory structure found.', context=Context.INFO.value)
404
+ return organized_files
405
+
406
+ self.run.log_message('Detected type-based directory structure')
407
+
408
+ # Build a comprehensive map of all dataset IDs across all type directories
409
+ dataset_files = {} # Dictionary: file_name -> {spec_name -> file_path}
410
+
411
+ # First pass: collect all dataset IDs from all type directories
412
+ for spec_name, dir_path in type_dirs.items():
413
+ for file_path in dir_path.glob('*'):
414
+ if file_path.is_file():
415
+ file_name = file_path.stem
416
+
417
+ # Initialize dataset entry if it doesn't exist
418
+ if file_name not in dataset_files:
419
+ dataset_files[file_name] = {}
420
+
421
+ # Map this file to its specification
422
+ if spec_name not in dataset_files[file_name]:
423
+ dataset_files[file_name][spec_name] = file_path
424
+ else:
425
+ # If multiple files with same file_name for same spec, use most recent
426
+ existing_file = dataset_files[file_name][spec_name]
427
+ if file_path.stat().st_mtime > existing_file.stat().st_mtime:
428
+ dataset_files[file_name][spec_name] = file_path
429
+ self.run.log_message(
430
+ f"Found newer file for name of {file_name}, spec '{spec_name}': "
431
+ f'{file_path.name} (replacing {existing_file.name})'
432
+ )
433
+
434
+ if not dataset_files:
435
+ self.run.log_message('No dataset files found.', context=Context.WARNING.value)
436
+ return organized_files
437
+
438
+ self.run.log_message(f'Found {len(dataset_files)} potential datasets by ID')
439
+
440
+ # Second pass: organize valid datasets
441
+ for file_name, files_dict in sorted(dataset_files.items()):
442
+ self.run.log_message(f'Processing file name: {file_name}')
443
+
444
+ # Add file spec details for logging
445
+ for spec_name, file_path in files_dict.items():
446
+ self.run.log_message(f"Mapped '{spec_name}' to: {file_path.name}")
447
+
448
+ # Check if all required files are present
449
+ required_specs = [spec['name'] for spec in file_specification if spec.get('is_required', False)]
450
+ if all(req in files_dict for req in required_specs):
451
+ # Create metadata for this dataset
452
+ meta_data = {
453
+ 'origin_file_stem': file_name,
454
+ 'created_at': datetime.now().isoformat(),
455
+ }
456
+
457
+ # Add the organized dataset
458
+ organized_files.append({'files': files_dict, 'meta': meta_data})
459
+ self.run.log_message(f'Successfully organized dataset for ID {file_name}')
460
+ else:
461
+ # Missing required files warning
462
+ missing = [req for req in required_specs if req not in files_dict]
463
+ self.run.log_message(
464
+ f'Dataset ID {file_name} is missing required files: {", ".join(missing)}',
465
+ context=Context.WARNING.value,
466
+ )
467
+
468
+ self.run.log_message(f'Total datasets organized: {len(organized_files)}')
469
+ return organized_files
@@ -1,10 +1,9 @@
1
1
  actions:
2
2
  upload:
3
3
  entrypoint: plugin.upload.Uploader
4
+ options:
5
+ allow_generate_tasks: false # Allow the plugin to generate tasks for the uploaded data
6
+ allow_generate_ground_truths: false # Allow the plugin to generate ground truths for the uploaded data
4
7
  supported_data_type: image # A primary data type of synapse backend collection. (e.g. 'image', 'text', 'video', 'pcd', 'audio')
5
8
  ui_schema: |
6
9
  Dumped FormKit Schema for upload plugin custom options
7
- task_pre_annotation:
8
- entrypoint: plugin.upload.TaskPreAnnotation
9
- ui_schema: |
10
- Dumped FormKit Schema for upload plugin custom options
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse-sdk
3
- Version: 1.0.0a57
3
+ Version: 1.0.0a59
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -106,9 +106,11 @@ synapse_sdk/plugins/categories/post_annotation/templates/plugin/post_annotation.
106
106
  synapse_sdk/plugins/categories/pre_annotation/__init__.py
107
107
  synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py
108
108
  synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation.py
109
+ synapse_sdk/plugins/categories/pre_annotation/actions/to_task.py
109
110
  synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml
110
111
  synapse_sdk/plugins/categories/pre_annotation/templates/plugin/__init__.py
111
112
  synapse_sdk/plugins/categories/pre_annotation/templates/plugin/pre_annotation.py
113
+ synapse_sdk/plugins/categories/pre_annotation/templates/plugin/to_task.py
112
114
  synapse_sdk/plugins/categories/smart_tool/__init__.py
113
115
  synapse_sdk/plugins/categories/smart_tool/actions/__init__.py
114
116
  synapse_sdk/plugins/categories/smart_tool/actions/auto_label.py
@@ -117,11 +119,9 @@ synapse_sdk/plugins/categories/smart_tool/templates/plugin/__init__.py
117
119
  synapse_sdk/plugins/categories/smart_tool/templates/plugin/auto_label.py
118
120
  synapse_sdk/plugins/categories/upload/__init__.py
119
121
  synapse_sdk/plugins/categories/upload/actions/__init__.py
120
- synapse_sdk/plugins/categories/upload/actions/task_pre_annotation.py
121
122
  synapse_sdk/plugins/categories/upload/actions/upload.py
122
123
  synapse_sdk/plugins/categories/upload/templates/config.yaml
123
124
  synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py
124
- synapse_sdk/plugins/categories/upload/templates/plugin/task_pre_annotation.py
125
125
  synapse_sdk/plugins/categories/upload/templates/plugin/upload.py
126
126
  synapse_sdk/plugins/templates/cookiecutter.json
127
127
  synapse_sdk/plugins/templates/hooks/post_gen_project.py
@@ -1,3 +0,0 @@
1
- actions:
2
- pre_annotation:
3
- entrypoint: plugin.pre_annotation.pre_annotate