synapse-sdk 1.0.0a33__tar.gz → 1.0.0a35__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 (157) hide show
  1. {synapse_sdk-1.0.0a33/synapse_sdk.egg-info → synapse_sdk-1.0.0a35}/PKG-INFO +1 -1
  2. synapse_sdk-1.0.0a35/requirements.txt +11 -0
  3. synapse_sdk-1.0.0a35/synapse_sdk/clients/validators/collections.py +31 -0
  4. synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/neural_net/actions/deployment.py +107 -0
  5. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/upload/actions/upload.py +6 -5
  6. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35/synapse_sdk.egg-info}/PKG-INFO +1 -1
  7. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk.egg-info/SOURCES.txt +3 -0
  8. synapse_sdk-1.0.0a35/tests/clients/test_collection_validators.py +149 -0
  9. synapse_sdk-1.0.0a35/tests/utils/__init__,py +0 -0
  10. synapse_sdk-1.0.0a33/requirements.txt +0 -11
  11. synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/neural_net/actions/deployment.py +0 -53
  12. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/.github/workflows/lint.yml +0 -0
  13. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/.github/workflows/pypi-publish.yml +0 -0
  14. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/.gitignore +0 -0
  15. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/.pre-commit-config.yaml +0 -0
  16. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/LICENSE +0 -0
  17. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/README.md +0 -0
  18. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/locale/en/LC_MESSAGES/messages.mo +0 -0
  19. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/locale/en/LC_MESSAGES/messages.po +0 -0
  20. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/locale/ko/LC_MESSAGES/messages.mo +0 -0
  21. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/locale/ko/LC_MESSAGES/messages.po +0 -0
  22. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/pyproject.toml +0 -0
  23. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/requirements.test.txt +0 -0
  24. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/setup.cfg +0 -0
  25. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/__init__.py +0 -0
  26. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/cli/__init__.py +0 -0
  27. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/cli/alias/__init__.py +0 -0
  28. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/cli/alias/create.py +0 -0
  29. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/cli/alias/dataclass.py +0 -0
  30. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/cli/alias/default.py +0 -0
  31. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/cli/alias/delete.py +0 -0
  32. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/cli/alias/list.py +0 -0
  33. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/cli/alias/read.py +0 -0
  34. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/cli/alias/update.py +0 -0
  35. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/cli/alias/utils.py +0 -0
  36. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/cli/plugin/__init__.py +0 -0
  37. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/cli/plugin/create.py +0 -0
  38. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/cli/plugin/publish.py +0 -0
  39. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/cli/plugin/run.py +0 -0
  40. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/__init__.py +0 -0
  41. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/agent/__init__.py +0 -0
  42. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/agent/core.py +0 -0
  43. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/agent/ray.py +0 -0
  44. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/agent/service.py +0 -0
  45. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/backend/__init__.py +0 -0
  46. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/backend/annotation.py +0 -0
  47. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/backend/core.py +0 -0
  48. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/backend/dataset.py +0 -0
  49. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/backend/hitl.py +0 -0
  50. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/backend/integration.py +0 -0
  51. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/backend/ml.py +0 -0
  52. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/backend/models.py +0 -0
  53. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/base.py +0 -0
  54. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/exceptions.py +0 -0
  55. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/ray/__init__.py +0 -0
  56. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/ray/core.py +0 -0
  57. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/ray/serve.py +0 -0
  58. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/clients/utils.py +0 -0
  59. {synapse_sdk-1.0.0a33/synapse_sdk/plugins → synapse_sdk-1.0.0a35/synapse_sdk/clients/validators}/__init__.py +0 -0
  60. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/i18n.py +0 -0
  61. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/loggers.py +0 -0
  62. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories → synapse_sdk-1.0.0a35/synapse_sdk/plugins}/__init__.py +0 -0
  63. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/data_validation → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories}/__init__.py +0 -0
  64. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/base.py +0 -0
  65. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/data_validation/actions → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/data_validation}/__init__.py +0 -0
  66. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/data_validation/templates/plugin → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/data_validation/actions}/__init__.py +0 -0
  67. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/data_validation/actions/validation.py +0 -0
  68. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/data_validation/templates/config.yaml +0 -0
  69. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/export → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/data_validation/templates/plugin}/__init__.py +0 -0
  70. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +0 -0
  71. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/decorators.py +0 -0
  72. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/export/actions → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/export}/__init__.py +0 -0
  73. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/export/templates/plugin → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/export/actions}/__init__.py +0 -0
  74. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/export/actions/export.py +0 -0
  75. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/export/templates/config.yaml +0 -0
  76. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/neural_net → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/export/templates/plugin}/__init__.py +0 -0
  77. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/export/templates/plugin/export.py +0 -0
  78. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/neural_net/actions → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/neural_net}/__init__.py +0 -0
  79. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/neural_net/base → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/neural_net/actions}/__init__.py +0 -0
  80. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/neural_net/actions/inference.py +0 -0
  81. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/neural_net/actions/test.py +0 -0
  82. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/neural_net/actions/train.py +0 -0
  83. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/neural_net/templates/plugin → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/neural_net/base}/__init__.py +0 -0
  84. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/neural_net/base/inference.py +0 -0
  85. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/neural_net/templates/config.yaml +0 -0
  86. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/post_annotation → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/neural_net/templates/plugin}/__init__.py +0 -0
  87. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +0 -0
  88. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/neural_net/templates/plugin/test.py +0 -0
  89. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/neural_net/templates/plugin/train.py +0 -0
  90. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/post_annotation/actions → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/post_annotation}/__init__.py +0 -0
  91. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/post_annotation/templates/plugin → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/post_annotation/actions}/__init__.py +0 -0
  92. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/post_annotation/actions/post_annotation.py +0 -0
  93. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/post_annotation/templates/config.yaml +0 -0
  94. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/pre_annotation → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/post_annotation/templates/plugin}/__init__.py +0 -0
  95. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/post_annotation/templates/plugin/post_annotation.py +0 -0
  96. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/pre_annotation/actions → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/pre_annotation}/__init__.py +0 -0
  97. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/pre_annotation/templates/plugin → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/pre_annotation/actions}/__init__.py +0 -0
  98. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation.py +0 -0
  99. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +0 -0
  100. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/smart_tool → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/pre_annotation/templates/plugin}/__init__.py +0 -0
  101. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/pre_annotation.py +0 -0
  102. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/registry.py +0 -0
  103. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/smart_tool/actions → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/smart_tool}/__init__.py +0 -0
  104. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/smart_tool/templates/plugin → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/smart_tool/actions}/__init__.py +0 -0
  105. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/smart_tool/actions/auto_label.py +0 -0
  106. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/smart_tool/templates/config.yaml +0 -0
  107. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/upload → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/smart_tool/templates/plugin}/__init__.py +0 -0
  108. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/smart_tool/templates/plugin/auto_label.py +0 -0
  109. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/templates.py +0 -0
  110. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/upload/actions → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/upload}/__init__.py +0 -0
  111. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/categories/upload/templates/plugin → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/upload/actions}/__init__.py +0 -0
  112. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/upload/templates/config.yaml +0 -0
  113. {synapse_sdk-1.0.0a33/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin → synapse_sdk-1.0.0a35/synapse_sdk/plugins/categories/upload/templates}/plugin/__init__.py +0 -0
  114. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +0 -0
  115. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/enums.py +0 -0
  116. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/exceptions.py +0 -0
  117. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/models.py +0 -0
  118. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/templates/cookiecutter.json +0 -0
  119. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/templates/hooks/post_gen_project.py +0 -0
  120. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/templates/hooks/pre_prompt.py +0 -0
  121. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.gitignore +0 -0
  122. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.pre-commit-config.yaml +0 -0
  123. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/README.md +0 -0
  124. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml +0 -0
  125. {synapse_sdk-1.0.0a33/synapse_sdk/shared → synapse_sdk-1.0.0a35/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/plugin}/__init__.py +0 -0
  126. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/pyproject.toml +0 -0
  127. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +0 -0
  128. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/upload.py +0 -0
  129. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/plugins/utils.py +0 -0
  130. {synapse_sdk-1.0.0a33/synapse_sdk/utils → synapse_sdk-1.0.0a35/synapse_sdk/shared}/__init__.py +0 -0
  131. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/shared/enums.py +0 -0
  132. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/types.py +0 -0
  133. {synapse_sdk-1.0.0a33/synapse_sdk/utils/pydantic → synapse_sdk-1.0.0a35/synapse_sdk/utils}/__init__.py +0 -0
  134. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/utils/debug.py +0 -0
  135. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/utils/file.py +0 -0
  136. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/utils/module_loading.py +0 -0
  137. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/utils/network.py +0 -0
  138. {synapse_sdk-1.0.0a33/tests → synapse_sdk-1.0.0a35/synapse_sdk/utils/pydantic}/__init__.py +0 -0
  139. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/utils/pydantic/config.py +0 -0
  140. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/utils/pydantic/errors.py +0 -0
  141. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/utils/pydantic/validators.py +0 -0
  142. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/utils/storage/__init__.py +0 -0
  143. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/utils/storage/providers/__init__.py +0 -0
  144. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/utils/storage/providers/gcp.py +0 -0
  145. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/utils/storage/providers/s3.py +0 -0
  146. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/utils/storage/providers/sftp.py +0 -0
  147. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/utils/storage/registry.py +0 -0
  148. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk/utils/string.py +0 -0
  149. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk.egg-info/dependency_links.txt +0 -0
  150. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk.egg-info/entry_points.txt +0 -0
  151. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk.egg-info/requires.txt +0 -0
  152. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/synapse_sdk.egg-info/top_level.txt +0 -0
  153. {synapse_sdk-1.0.0a33/tests/clients → synapse_sdk-1.0.0a35/tests}/__init__.py +0 -0
  154. /synapse_sdk-1.0.0a33/tests/utils/__init__,py → /synapse_sdk-1.0.0a35/tests/clients/__init__.py +0 -0
  155. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/tests/clients/test_backend_models.py +0 -0
  156. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/tests/clients/test_base_client.py +0 -0
  157. {synapse_sdk-1.0.0a33 → synapse_sdk-1.0.0a35}/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.0a33
3
+ Version: 1.0.0a35
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -0,0 +1,11 @@
1
+ click
2
+ cookiecutter
3
+ requests
4
+ tqdm
5
+ pyyaml
6
+ pydantic
7
+ pyjwt
8
+ python-dotenv
9
+ ray[all]>=2.44.1
10
+ fsspec[gcs,s3,sftp]==2025.3.2
11
+ universal-pathlib==0.2.6
@@ -0,0 +1,31 @@
1
+ class FileSpecificationValidator:
2
+ """File specification validator class for synapse backend collection.
3
+
4
+ Args:
5
+ file_spec_template (list):
6
+ * List of dictionaries containing file specification template
7
+ * This is from synapse-backend file specification data.
8
+ organized_files (list): List of dictionaries containing organized files.
9
+ """
10
+
11
+ def __init__(self, file_spec_template, organized_files):
12
+ self.file_spec_template = file_spec_template
13
+ self.organized_files = organized_files
14
+
15
+ def validate(self):
16
+ """Validate the file specification template with organized files.
17
+
18
+ Returns:
19
+ bool: True if the file specification template is valid, False otherwise.
20
+ """
21
+ for spec in self.file_spec_template:
22
+ spec_name = spec['name']
23
+ is_required = spec['is_required']
24
+
25
+ for file_group in self.organized_files:
26
+ files = file_group['files']
27
+ if is_required and spec_name not in files:
28
+ return False
29
+ if spec_name in files and not files[spec_name]:
30
+ return False
31
+ return True
@@ -0,0 +1,107 @@
1
+ from packaging import version
2
+
3
+ from synapse_sdk.clients.exceptions import ClientError
4
+ from synapse_sdk.i18n import gettext as _
5
+ from synapse_sdk.plugins.categories.base import Action
6
+ from synapse_sdk.plugins.categories.decorators import register_action
7
+ from synapse_sdk.plugins.enums import PluginCategory, RunMethod
8
+
9
+
10
+ @register_action
11
+ class DeploymentAction(Action):
12
+ name = 'deployment'
13
+ category = PluginCategory.NEURAL_NET
14
+ method = RunMethod.JOB
15
+
16
+ def get_actor_options(self):
17
+ options = {'runtime_env': self.get_runtime_env()}
18
+ for option in ['num_cpus', 'num_gpus']:
19
+ option_value = self.params.get(option)
20
+ if option_value:
21
+ options[option] = option_value
22
+ return options
23
+
24
+ def start(self):
25
+ from ray import serve
26
+
27
+ from synapse_sdk.plugins.categories.neural_net.base.inference import app
28
+
29
+ self.ray_init()
30
+
31
+ ray_actor_options = self.get_actor_options()
32
+
33
+ if self.is_gradio_deployment:
34
+ from ray.serve.gradio_integrations import GradioServer
35
+
36
+ self.assert_gradio_version()
37
+
38
+ # GradioIngress differs from serve.ingress(app), thus the difference in self.entrypoint callable
39
+ try:
40
+ entrypoint = self.entrypoint().app
41
+ except (TypeError, ImportError):
42
+ raise ClientError(
43
+ 400,
44
+ _(
45
+ 'Gradio app is not callable.'
46
+ 'Please ensure that your Deployment class defines a callable `app` function'
47
+ ),
48
+ )
49
+
50
+ deployment = GradioServer.options(ray_actor_options=ray_actor_options).bind(entrypoint)
51
+ else:
52
+ deployment = serve.deployment(ray_actor_options=ray_actor_options)(
53
+ serve.ingress(app)(self.entrypoint)
54
+ ).bind(self.envs['SYNAPSE_PLUGIN_RUN_HOST'])
55
+
56
+ serve.delete(self.plugin_release.code)
57
+
58
+ # TODO add run object
59
+ serve.run(
60
+ deployment,
61
+ name=self.plugin_release.code,
62
+ route_prefix=f'/{self.plugin_release.checksum}',
63
+ )
64
+
65
+ # 백엔드에 ServeApplication 추가
66
+ serve_application = self.create_serve_application()
67
+ return {'serve_application': serve_application['id'] if serve_application else None}
68
+
69
+ def create_serve_application(self):
70
+ if self.job_id:
71
+ try:
72
+ serve_application = self.ray_client.get_serve_application(self.plugin_release.code)
73
+ return self.client.create_serve_application({
74
+ 'job': self.job_id,
75
+ 'status': serve_application['status'],
76
+ 'data': serve_application,
77
+ })
78
+ except ClientError:
79
+ pass
80
+ return None
81
+
82
+ @property
83
+ def is_gradio_deployment(self):
84
+ return self.config.get('gradio_app', False)
85
+
86
+ def assert_gradio_version(self):
87
+ """Assert gradio version is not greater than 3.50.2.
88
+ Ray Serve cannot pickle gradio endpoints, thus gradio version greater than 3.50.2 is not supported (SSE Issues)
89
+ """
90
+ GRADIO_VERSION_MAX_ALLOWED = '3.50.2'
91
+
92
+ gradio_installed = False
93
+ gradio_version = None
94
+ for req in self.requirements:
95
+ if req.startswith('gradio=='):
96
+ gradio_installed = True
97
+ gradio_version = req.split('==')[1]
98
+ break
99
+
100
+ assert gradio_installed, _(
101
+ 'Gradio is not installed or version is not specified. Please install gradio==3.50.2 to use this feature.'
102
+ )
103
+
104
+ if version.parse(gradio_version) > version.parse(GRADIO_VERSION_MAX_ALLOWED):
105
+ raise AssertionError(
106
+ f'Gradio version {gradio_version} is greater than maximum allowed version {GRADIO_VERSION_MAX_ALLOWED}'
107
+ )
@@ -1,4 +1,3 @@
1
- from enum import Enum
2
1
  from typing import Annotated, Dict, List
3
2
 
4
3
  from pydantic import AfterValidator, BaseModel, field_validator
@@ -6,6 +5,7 @@ from pydantic_core import PydanticCustomError
6
5
 
7
6
  from synapse_sdk.clients.exceptions import ClientError
8
7
  from synapse_sdk.clients.utils import get_batched_list
8
+ from synapse_sdk.clients.validators.collections import FileSpecificationValidator
9
9
  from synapse_sdk.i18n import gettext as _
10
10
  from synapse_sdk.plugins.categories.base import Action
11
11
  from synapse_sdk.plugins.categories.decorators import register_action
@@ -145,7 +145,7 @@ class UploadAction(Action):
145
145
 
146
146
  # Analyze Collection file specifications to determine the data structure for upload.
147
147
  self.run.set_progress(0, 1, category='analyze_collection')
148
- file_specification_skeleton = self._analyze_collection()
148
+ file_specification_template = self._analyze_collection()
149
149
  self.run.set_progress(1, 1, category='analyze_collection')
150
150
 
151
151
  # Setup result dict.
@@ -153,7 +153,7 @@ class UploadAction(Action):
153
153
 
154
154
  # Organize data according to Collection file specification structure.
155
155
  organized_files = uploader.handle_upload_files()
156
- if not self._validate_organized_files(file_specification_skeleton, organized_files):
156
+ if not self._validate_organized_files(file_specification_template, organized_files):
157
157
  self.run.log_message('Validate organized files failed.')
158
158
  return result
159
159
 
@@ -219,9 +219,10 @@ class UploadAction(Action):
219
219
  collection = client.get_dataset(collection_id)
220
220
  return collection['file_specifications']
221
221
 
222
- def _validate_organized_files(self, file_specification_skeleton: Dict, organized_files: List) -> bool:
222
+ def _validate_organized_files(self, file_specification_template: Dict, organized_files: List) -> bool:
223
223
  """Validate organized files from Uploader."""
224
- return True
224
+ validator = FileSpecificationValidator(file_specification_template, organized_files)
225
+ return validator.validate()
225
226
 
226
227
  def _upload_files(self, organized_files) -> List:
227
228
  """Upload files to synapse-backend.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse-sdk
3
- Version: 1.0.0a33
3
+ Version: 1.0.0a35
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -56,6 +56,8 @@ synapse_sdk/clients/backend/models.py
56
56
  synapse_sdk/clients/ray/__init__.py
57
57
  synapse_sdk/clients/ray/core.py
58
58
  synapse_sdk/clients/ray/serve.py
59
+ synapse_sdk/clients/validators/__init__.py
60
+ synapse_sdk/clients/validators/collections.py
59
61
  synapse_sdk/plugins/__init__.py
60
62
  synapse_sdk/plugins/enums.py
61
63
  synapse_sdk/plugins/exceptions.py
@@ -148,5 +150,6 @@ tests/__init__.py
148
150
  tests/clients/__init__.py
149
151
  tests/clients/test_backend_models.py
150
152
  tests/clients/test_base_client.py
153
+ tests/clients/test_collection_validators.py
151
154
  tests/utils/__init__,py
152
155
  tests/utils/test_debug.py
@@ -0,0 +1,149 @@
1
+ import pytest
2
+
3
+ from synapse_sdk.clients.validators.collections import FileSpecificationValidator
4
+
5
+
6
+ @pytest.fixture
7
+ def single_image_file_spec_template():
8
+ return [
9
+ {
10
+ 'name': 'image_1',
11
+ 'description': '',
12
+ 'file_type': 'image',
13
+ 'file_type_display': '이미지',
14
+ 'configuration': {},
15
+ 'is_sequential': False,
16
+ 'is_required': True,
17
+ 'is_primary': True,
18
+ 'function_type': 'main',
19
+ 'index': 1,
20
+ }
21
+ ]
22
+
23
+
24
+ @pytest.fixture
25
+ def single_image_organized_files():
26
+ original_files = []
27
+ for i in range(1, 21):
28
+ file_name = f'{i:04d}.jpg'
29
+ original_files.append({
30
+ 'files': {
31
+ 'image_1': '',
32
+ },
33
+ 'meta': {
34
+ 'original_file_name': file_name,
35
+ },
36
+ })
37
+ return original_files
38
+
39
+
40
+ @pytest.fixture
41
+ def image_and_meta_file_spec_template():
42
+ return [
43
+ {
44
+ 'name': 'image_1',
45
+ 'description': '',
46
+ 'file_type': 'image',
47
+ 'file_type_display': '이미지',
48
+ 'configuration': {},
49
+ 'is_sequential': False,
50
+ 'is_required': True,
51
+ 'is_primary': True,
52
+ 'function_type': 'main',
53
+ 'index': 1,
54
+ },
55
+ {
56
+ 'name': 'image_2',
57
+ 'description': '',
58
+ 'file_type': 'image',
59
+ 'file_type_display': '이미지',
60
+ 'configuration': {},
61
+ 'is_sequential': False,
62
+ 'is_required': True,
63
+ 'is_primary': True,
64
+ 'function_type': 'main',
65
+ 'index': 2,
66
+ },
67
+ {
68
+ 'name': 'meta_1',
69
+ 'description': '',
70
+ 'file_type': 'text',
71
+ 'file_type_display': '텍스트',
72
+ 'configuration': {},
73
+ 'is_sequential': False,
74
+ 'is_required': True,
75
+ 'is_primary': False,
76
+ 'function_type': 'meta',
77
+ 'index': 1,
78
+ },
79
+ ]
80
+
81
+
82
+ @pytest.fixture
83
+ def image_and_meta_organized_files():
84
+ original_files = []
85
+ for i in range(1, 21): # Create 20 copies
86
+ image_1_file_name = f'{i:04d}_1.jpg'
87
+ image_2_file_name = f'{i:04d}_2.jpg'
88
+ meta_file_name = f'{i:04d}.txt'
89
+ original_files.append({
90
+ 'files': {
91
+ 'image_1': f'/path/to/{image_1_file_name}',
92
+ 'image_2': f'/path/to/{image_2_file_name}',
93
+ 'meta_1': f'/path/to/{meta_file_name}',
94
+ },
95
+ 'meta': {
96
+ 'original_file_name': {
97
+ 'image_1': image_1_file_name,
98
+ 'image_2': image_2_file_name,
99
+ 'meta_1': meta_file_name,
100
+ },
101
+ },
102
+ })
103
+ return original_files
104
+
105
+
106
+ @pytest.fixture
107
+ def invalid_image_and_meta_organized_files():
108
+ original_files = []
109
+ for i in range(1, 21): # Create 20 copies
110
+ image_1_file_name = f'{i:04d}_1.jpg'
111
+ image_2_file_name = f'{i:04d}_2.jpg'
112
+ meta_file_name = f'{i:04d}.txt'
113
+ original_files.append({
114
+ 'files': {
115
+ 'image_invalid_1': f'/path/to/{image_1_file_name}',
116
+ 'image_invalid_2': f'/path/to/{image_2_file_name}',
117
+ 'meta_1': f'/path/to/{meta_file_name}',
118
+ },
119
+ 'meta': {
120
+ 'original_file_name': {
121
+ 'image_1': image_1_file_name,
122
+ 'image_2': image_2_file_name,
123
+ 'meta_1': meta_file_name,
124
+ },
125
+ },
126
+ })
127
+ return original_files
128
+
129
+
130
+ def test_validate_single_image_file_spec_template(single_image_file_spec_template, single_image_organized_files):
131
+ validator = FileSpecificationValidator(single_image_file_spec_template, single_image_organized_files)
132
+
133
+ assert validator.validate() is True
134
+
135
+
136
+ def test_validate_image_and_meta_file_spec_template_success(
137
+ image_and_meta_file_spec_template, image_and_meta_organized_files
138
+ ):
139
+ validator = FileSpecificationValidator(image_and_meta_file_spec_template, image_and_meta_organized_files)
140
+
141
+ assert validator.validate() is True
142
+
143
+
144
+ def test_validate_image_and_meta_file_spec_template_failed_with_invalid_organized_files(
145
+ image_and_meta_file_spec_template, invalid_image_and_meta_organized_files
146
+ ):
147
+ validator = FileSpecificationValidator(image_and_meta_file_spec_template, invalid_image_and_meta_organized_files)
148
+
149
+ assert validator.validate() is False
File without changes
@@ -1,11 +0,0 @@
1
- click
2
- cookiecutter
3
- requests
4
- tqdm
5
- pyyaml
6
- pydantic
7
- pyjwt
8
- python-dotenv
9
- ray[all]>=2.43.0
10
- fsspec[gcs,s3,sftp]==2025.2.0
11
- universal-pathlib==0.2.6
@@ -1,53 +0,0 @@
1
- from synapse_sdk.clients.exceptions import ClientError
2
- from synapse_sdk.plugins.categories.base import Action
3
- from synapse_sdk.plugins.categories.decorators import register_action
4
- from synapse_sdk.plugins.enums import PluginCategory, RunMethod
5
-
6
-
7
- @register_action
8
- class DeploymentAction(Action):
9
- name = 'deployment'
10
- category = PluginCategory.NEURAL_NET
11
- method = RunMethod.JOB
12
-
13
- def get_actor_options(self):
14
- options = {'runtime_env': self.get_runtime_env()}
15
- for option in ['num_cpus', 'num_gpus']:
16
- option_value = self.params.get(option)
17
- if option_value:
18
- options[option] = option_value
19
- return options
20
-
21
- def start(self):
22
- from ray import serve
23
-
24
- from synapse_sdk.plugins.categories.neural_net.base.inference import app
25
-
26
- self.ray_init()
27
-
28
- deployment = serve.deployment(ray_actor_options=self.get_actor_options())(serve.ingress(app)(self.entrypoint))
29
- serve.delete(self.plugin_release.code)
30
-
31
- # TODO add run object
32
- serve.run(
33
- deployment.bind(self.envs['SYNAPSE_PLUGIN_RUN_HOST']),
34
- name=self.plugin_release.code,
35
- route_prefix=f'/{self.plugin_release.checksum}',
36
- )
37
-
38
- # 백엔드에 ServeApplication 추가
39
- serve_application = self.create_serve_application()
40
- return {'serve_application': serve_application['id'] if serve_application else None}
41
-
42
- def create_serve_application(self):
43
- if self.job_id:
44
- try:
45
- serve_application = self.ray_client.get_serve_application(self.plugin_release.code)
46
- return self.client.create_serve_application({
47
- 'job': self.job_id,
48
- 'status': serve_application['status'],
49
- 'data': serve_application,
50
- })
51
- except ClientError:
52
- pass
53
- return None
File without changes
File without changes
File without changes