synapse-sdk 1.0.0a46__tar.gz → 1.0.0a47__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 (160) hide show
  1. {synapse_sdk-1.0.0a46/synapse_sdk.egg-info → synapse_sdk-1.0.0a47}/PKG-INFO +1 -1
  2. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/backend/integration.py +3 -3
  3. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/backend/models.py +33 -1
  4. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/base.py +97 -16
  5. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/export/actions/export.py +8 -3
  6. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47/synapse_sdk.egg-info}/PKG-INFO +1 -1
  7. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/tests/clients/test_backend_models.py +26 -1
  8. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/tests/clients/test_base_client.py +12 -1
  9. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/tests/clients/test_collection_validators.py +3 -3
  10. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/.github/workflows/lint.yml +0 -0
  11. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/.github/workflows/pypi-publish.yml +0 -0
  12. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/.gitignore +0 -0
  13. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/.pre-commit-config.yaml +0 -0
  14. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/LICENSE +0 -0
  15. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/README.md +0 -0
  16. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/locale/en/LC_MESSAGES/messages.mo +0 -0
  17. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/locale/en/LC_MESSAGES/messages.po +0 -0
  18. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/locale/ko/LC_MESSAGES/messages.mo +0 -0
  19. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/locale/ko/LC_MESSAGES/messages.po +0 -0
  20. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/pyproject.toml +0 -0
  21. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/requirements.test.txt +0 -0
  22. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/requirements.txt +0 -0
  23. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/setup.cfg +0 -0
  24. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/__init__.py +0 -0
  25. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/cli/__init__.py +0 -0
  26. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/cli/alias/__init__.py +0 -0
  27. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/cli/alias/create.py +0 -0
  28. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/cli/alias/dataclass.py +0 -0
  29. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/cli/alias/default.py +0 -0
  30. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/cli/alias/delete.py +0 -0
  31. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/cli/alias/list.py +0 -0
  32. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/cli/alias/read.py +0 -0
  33. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/cli/alias/update.py +0 -0
  34. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/cli/alias/utils.py +0 -0
  35. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/cli/plugin/__init__.py +0 -0
  36. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/cli/plugin/create.py +0 -0
  37. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/cli/plugin/publish.py +0 -0
  38. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/cli/plugin/run.py +0 -0
  39. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/__init__.py +0 -0
  40. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/agent/__init__.py +0 -0
  41. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/agent/core.py +0 -0
  42. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/agent/ray.py +0 -0
  43. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/agent/service.py +0 -0
  44. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/backend/__init__.py +0 -0
  45. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/backend/annotation.py +0 -0
  46. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/backend/core.py +0 -0
  47. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/backend/dataset.py +0 -0
  48. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/backend/hitl.py +0 -0
  49. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/backend/ml.py +0 -0
  50. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/exceptions.py +0 -0
  51. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/ray/__init__.py +0 -0
  52. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/ray/core.py +0 -0
  53. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/ray/serve.py +0 -0
  54. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/utils.py +0 -0
  55. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/validators/__init__.py +0 -0
  56. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/clients/validators/collections.py +0 -0
  57. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/i18n.py +0 -0
  58. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/loggers.py +0 -0
  59. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/__init__.py +0 -0
  60. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/__init__.py +0 -0
  61. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/base.py +0 -0
  62. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/data_validation/__init__.py +0 -0
  63. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/data_validation/actions/__init__.py +0 -0
  64. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/data_validation/actions/validation.py +0 -0
  65. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/data_validation/templates/config.yaml +0 -0
  66. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/data_validation/templates/plugin/__init__.py +0 -0
  67. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +0 -0
  68. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/decorators.py +0 -0
  69. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/export/__init__.py +0 -0
  70. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/export/actions/__init__.py +0 -0
  71. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/export/enums.py +0 -0
  72. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/export/templates/config.yaml +0 -0
  73. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +0 -0
  74. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/export/templates/plugin/export.py +0 -0
  75. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/neural_net/__init__.py +0 -0
  76. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/neural_net/actions/__init__.py +0 -0
  77. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/neural_net/actions/deployment.py +0 -0
  78. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/neural_net/actions/gradio.py +0 -0
  79. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/neural_net/actions/inference.py +0 -0
  80. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/neural_net/actions/test.py +0 -0
  81. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/neural_net/actions/train.py +0 -0
  82. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/neural_net/actions/tune.py +0 -0
  83. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/neural_net/base/__init__.py +0 -0
  84. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/neural_net/base/inference.py +0 -0
  85. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/neural_net/templates/config.yaml +0 -0
  86. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/neural_net/templates/plugin/__init__.py +0 -0
  87. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +0 -0
  88. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/neural_net/templates/plugin/test.py +0 -0
  89. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/neural_net/templates/plugin/train.py +0 -0
  90. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/post_annotation/__init__.py +0 -0
  91. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/post_annotation/actions/__init__.py +0 -0
  92. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/post_annotation/actions/post_annotation.py +0 -0
  93. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/post_annotation/templates/config.yaml +0 -0
  94. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/post_annotation/templates/plugin/__init__.py +0 -0
  95. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/post_annotation/templates/plugin/post_annotation.py +0 -0
  96. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/pre_annotation/__init__.py +0 -0
  97. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +0 -0
  98. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation.py +0 -0
  99. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +0 -0
  100. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/__init__.py +0 -0
  101. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/pre_annotation.py +0 -0
  102. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/registry.py +0 -0
  103. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/smart_tool/__init__.py +0 -0
  104. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/smart_tool/actions/__init__.py +0 -0
  105. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/smart_tool/actions/auto_label.py +0 -0
  106. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/smart_tool/templates/config.yaml +0 -0
  107. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/smart_tool/templates/plugin/__init__.py +0 -0
  108. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/smart_tool/templates/plugin/auto_label.py +0 -0
  109. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/templates.py +0 -0
  110. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/upload/__init__.py +0 -0
  111. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/upload/actions/__init__.py +0 -0
  112. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/upload/actions/upload.py +0 -0
  113. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/upload/templates/config.yaml +0 -0
  114. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +0 -0
  115. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +0 -0
  116. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/enums.py +0 -0
  117. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/exceptions.py +0 -0
  118. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/models.py +0 -0
  119. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/templates/cookiecutter.json +0 -0
  120. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/templates/hooks/post_gen_project.py +0 -0
  121. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/templates/hooks/pre_prompt.py +0 -0
  122. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.gitignore +0 -0
  123. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.pre-commit-config.yaml +0 -0
  124. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/README.md +0 -0
  125. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml +0 -0
  126. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/plugin/__init__.py +0 -0
  127. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/pyproject.toml +0 -0
  128. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +0 -0
  129. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/upload.py +0 -0
  130. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/plugins/utils.py +0 -0
  131. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/shared/__init__.py +0 -0
  132. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/shared/enums.py +0 -0
  133. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/types.py +0 -0
  134. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/__init__.py +0 -0
  135. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/dataset.py +0 -0
  136. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/debug.py +0 -0
  137. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/file.py +0 -0
  138. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/http.py +0 -0
  139. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/module_loading.py +0 -0
  140. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/network.py +0 -0
  141. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/pydantic/__init__.py +0 -0
  142. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/pydantic/config.py +0 -0
  143. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/pydantic/errors.py +0 -0
  144. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/pydantic/validators.py +0 -0
  145. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/storage/__init__.py +0 -0
  146. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/storage/providers/__init__.py +0 -0
  147. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/storage/providers/gcp.py +0 -0
  148. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/storage/providers/s3.py +0 -0
  149. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/storage/providers/sftp.py +0 -0
  150. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/storage/registry.py +0 -0
  151. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk/utils/string.py +0 -0
  152. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk.egg-info/SOURCES.txt +0 -0
  153. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk.egg-info/dependency_links.txt +0 -0
  154. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk.egg-info/entry_points.txt +0 -0
  155. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk.egg-info/requires.txt +0 -0
  156. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/synapse_sdk.egg-info/top_level.txt +0 -0
  157. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/tests/__init__.py +0 -0
  158. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/tests/clients/__init__.py +0 -0
  159. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/tests/utils/__init__,py +0 -0
  160. {synapse_sdk-1.0.0a46 → synapse_sdk-1.0.0a47}/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.0a46
3
+ Version: 1.0.0a47
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -1,4 +1,4 @@
1
- from synapse_sdk.clients.backend.models import Storage
1
+ from synapse_sdk.clients.backend.models import Storage, UpdateJob
2
2
  from synapse_sdk.clients.base import BaseClient
3
3
  from synapse_sdk.utils.file import convert_file_to_base64
4
4
 
@@ -43,7 +43,7 @@ class IntegrationClientMixin(BaseClient):
43
43
 
44
44
  def update_job(self, pk, data):
45
45
  path = f'jobs/{pk}/'
46
- return self._patch(path, data=data)
46
+ return self._patch(path, request_model=UpdateJob, data=data)
47
47
 
48
48
  def list_job_console_logs(self, pk):
49
49
  path = f'jobs/{pk}/console_logs/'
@@ -82,4 +82,4 @@ class IntegrationClientMixin(BaseClient):
82
82
  def get_storage(self, pk):
83
83
  """Get specific storage data from synapse backend."""
84
84
  path = f'storages/{pk}/'
85
- return self._get(path, pydantic_model=Storage)
85
+ return self._get(path, response_model=Storage)
@@ -1,5 +1,5 @@
1
1
  from enum import Enum
2
- from typing import Dict
2
+ from typing import Dict, Optional
3
3
 
4
4
  from pydantic import BaseModel
5
5
 
@@ -42,3 +42,35 @@ class Storage(BaseModel):
42
42
  provider: StorageProvider
43
43
  configuration: Dict
44
44
  is_default: bool
45
+
46
+
47
+ class JobStatus(str, Enum):
48
+ """Synapse Backend Job Status Enum."""
49
+
50
+ PENDING = 'pending'
51
+ RUNNING = 'running'
52
+ STOPPED = 'stopped'
53
+ SUCCEEDED = 'succeeded'
54
+ FAILED = 'failed'
55
+
56
+
57
+ class UpdateJob(BaseModel):
58
+ """Synapse Backend Update Job Request Payload Model.
59
+
60
+ Attrs:
61
+ status (str): The job status. (ex: pending, running, stopped, succeeded, failed)
62
+ progress_record (Dict): The job progress record.
63
+ console_logs (Dict): The job console logs.
64
+ result (Dict): The job result.
65
+ """
66
+
67
+ status: Optional[JobStatus] = None
68
+ progress_record: Optional[Dict] = None
69
+ console_logs: Optional[Dict] = None
70
+ result: Optional[Dict] = None
71
+
72
+ def model_dump(self, **kwargs):
73
+ data = super().model_dump(**kwargs)
74
+ if data.get('status') is not None:
75
+ data['status'] = data['status'].value
76
+ return data
@@ -86,14 +86,15 @@ class BaseClient:
86
86
  except ValueError:
87
87
  return response.text
88
88
 
89
- def _get(self, path, url_conversion=None, pydantic_model=None, **kwargs):
89
+ def _get(self, path, url_conversion=None, response_model=None, **kwargs):
90
90
  """
91
91
  Perform a GET request and optionally convert response to a pydantic model.
92
92
 
93
93
  Args:
94
94
  path (str): URL path to request.
95
95
  url_conversion (dict, optional): Configuration for URL to path conversion.
96
- pydantic_model (Type, optional): Pydantic model to convert the response to.
96
+ request_model (pydantic.BaseModel, optional): Pydantic model to validate the request.
97
+ response_model (pydantic.BaseModel, optional): Pydantic model to validate the response.
97
98
  **kwargs: Additional keyword arguments to pass to the request.
98
99
 
99
100
  Returns:
@@ -107,36 +108,100 @@ class BaseClient:
107
108
  else:
108
109
  files_url_to_path_from_objs(response, **url_conversion)
109
110
 
110
- if pydantic_model:
111
- return self._validate_response_with_pydantic_model(response, pydantic_model)
111
+ if response_model:
112
+ return self._validate_response_with_pydantic_model(response, response_model)
112
113
 
113
114
  return response
114
115
 
115
- def _post(self, path, pydantic_model=None, **kwargs):
116
+ def _post(self, path, request_model=None, response_model=None, **kwargs):
117
+ """
118
+ Perform a POST request and optionally convert response to a pydantic model.
119
+
120
+ Args:
121
+ path (str): URL path to request.
122
+ request_model (pydantic.BaseModel, optional): Pydantic model to validate the request.
123
+ response_model (pydantic.BaseModel, optional): Pydantic model to validate the response.
124
+ **kwargs: Additional keyword arguments to pass to the request.
125
+
126
+ Returns:
127
+ The response data, optionally converted to a pydantic model.
128
+ """
129
+ if kwargs.get('data') and request_model:
130
+ kwargs['data'] = self._validate_request_body_with_pydantic_model(kwargs['data'], request_model)
116
131
  response = self._request('post', path, **kwargs)
117
- if pydantic_model:
118
- return self._validate_response_with_pydantic_model(response, pydantic_model)
132
+ if response_model:
133
+ return self._validate_response_with_pydantic_model(response, response_model)
119
134
  else:
120
135
  return response
121
136
 
122
- def _put(self, path, pydantic_model=None, **kwargs):
137
+ def _put(self, path, request_model=None, response_model=None, **kwargs):
138
+ """
139
+ Perform a PUT request to the specified path.
140
+
141
+ Args:
142
+ path (str): The URL path for the request.
143
+ request_model (Optional[Type[BaseModel]]): A Pydantic model class to validate the request body against.
144
+ response_model (Optional[Type[BaseModel]]): A Pydantic model class to validate and parse the response.
145
+ **kwargs: Additional arguments to pass to the request method.
146
+ - data: The request body to be sent. If provided along with request_model, it will be validated.
147
+
148
+ Returns:
149
+ Union[dict, BaseModel]:
150
+ If response_model is provided, returns an instance of that model populated with the response data.
151
+ """
152
+ if kwargs.get('data') and request_model:
153
+ kwargs['data'] = self._validate_request_body_with_pydantic_model(kwargs['data'], request_model)
123
154
  response = self._request('put', path, **kwargs)
124
- if pydantic_model:
125
- return self._validate_response_with_pydantic_model(response, pydantic_model)
155
+ if response_model:
156
+ return self._validate_response_with_pydantic_model(response, response_model)
126
157
  else:
127
158
  return response
128
159
 
129
- def _patch(self, path, pydantic_model=None, **kwargs):
160
+ def _patch(self, path, request_model=None, response_model=None, **kwargs):
161
+ """
162
+ Perform a PATCH HTTP request to the specified path.
163
+
164
+ Args:
165
+ path (str): The API endpoint path to make the request to.
166
+ request_model (Optional[Type[BaseModel]]): A Pydantic model class used to validate the request body.
167
+ response_model (Optional[Type[BaseModel]]): A Pydantic model class used to validate and parse the response.
168
+ **kwargs: Additional keyword arguments to pass to the request method.
169
+ - data: The request body data. If provided along with request_model, it will be validated.
170
+
171
+ Returns:
172
+ Union[dict, BaseModel]: If response_model is provided, returns an instance of that model.
173
+ Otherwise, returns the raw response data.
174
+ """
175
+
176
+ if kwargs.get('data') and request_model:
177
+ kwargs['data'] = self._validate_request_body_with_pydantic_model(kwargs['data'], request_model)
130
178
  response = self._request('patch', path, **kwargs)
131
- if pydantic_model:
132
- return self._validate_response_with_pydantic_model(response, pydantic_model)
179
+ if response_model:
180
+ return self._validate_response_with_pydantic_model(response, response_model)
133
181
  else:
134
182
  return response
135
183
 
136
- def _delete(self, path, pydantic_model=None, **kwargs):
184
+ def _delete(self, path, request_model=None, response_model=None, **kwargs):
185
+ """
186
+ Performs a DELETE request to the specified path.
187
+
188
+ Args:
189
+ path (str): The API endpoint path to send the DELETE request to.
190
+ request_model (Optional[Type[BaseModel]]): Pydantic model to validate the request data against.
191
+ response_model (Optional[Type[BaseModel]]): Pydantic model to validate and convert the response data.
192
+ **kwargs: Additional keyword arguments passed to the request method.
193
+ - data: Request payload to send. Will be validated against request_model if both are provided.
194
+
195
+ Returns:
196
+ Union[dict, BaseModel]: If response_model is provided, returns an instance of that model.
197
+ Otherwise, returns the raw response data as a dictionary.
198
+ """
199
+
200
+ if kwargs.get('data') and request_model:
201
+ kwargs['data'] = self._validate_request_body_with_pydantic_model(kwargs['data'], request_model)
137
202
  response = self._request('delete', path, **kwargs)
138
- if pydantic_model:
139
- return self._validate_response_with_pydantic_model(response, pydantic_model)
203
+ if response_model:
204
+ return self._validate_response_with_pydantic_model(response, response_model)
140
205
  else:
141
206
  return response
142
207
 
@@ -170,3 +235,19 @@ class BaseClient:
170
235
  else:
171
236
  # Not a pydantic model
172
237
  raise TypeError('The provided model is not a pydantic model')
238
+
239
+ def _validate_request_body_with_pydantic_model(self, request_body, pydantic_model):
240
+ """Validate a request body with a pydantic model."""
241
+ # Check if model is a pydantic model (has the __pydantic_model__ attribute)
242
+ if (
243
+ hasattr(pydantic_model, '__pydantic_model__')
244
+ or hasattr(pydantic_model, 'model_validate')
245
+ or hasattr(pydantic_model, 'parse_obj')
246
+ ):
247
+ # Validate the request body and convert to model instance
248
+ model_instance = pydantic_model.model_validate(request_body)
249
+ # Convert model to dict and remove None values
250
+ return {k: v for k, v in model_instance.model_dump().items() if v is not None}
251
+ else:
252
+ # Not a pydantic model
253
+ raise TypeError('The provided model is not a pydantic model')
@@ -1,4 +1,3 @@
1
- import json
2
1
  from abc import ABC, abstractmethod
3
2
  from datetime import datetime
4
3
  from typing import Annotated, Any, Literal
@@ -17,12 +16,18 @@ from synapse_sdk.utils.pydantic.validators import non_blank
17
16
  from synapse_sdk.utils.storage import get_pathlib
18
17
 
19
18
 
19
+ class DataFileInfo(BaseModel):
20
+ """Schema for data_file_info."""
21
+
22
+ file_name: str
23
+
24
+
20
25
  class ExportRun(Run):
21
26
  class DataFileLog(BaseModel):
22
27
  """Data file log model."""
23
28
 
24
29
  target_id: int
25
- data_file_info: str | None
30
+ data_file_info: DataFileInfo
26
31
  status: ExportStatus
27
32
  error: str | None = None
28
33
  created: str
@@ -44,7 +49,7 @@ class ExportRun(Run):
44
49
  log_type,
45
50
  self.DataFileLog(
46
51
  target_id=target_id,
47
- data_file_info=json.dumps(data_file_info),
52
+ data_file_info=data_file_info,
48
53
  status=status.value,
49
54
  error=error,
50
55
  created=now,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse-sdk
3
- Version: 1.0.0a46
3
+ Version: 1.0.0a47
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -1,7 +1,7 @@
1
1
  import pytest
2
2
  from pydantic import ValidationError
3
3
 
4
- from synapse_sdk.clients.backend.models import Storage, StorageCategory, StorageProvider
4
+ from synapse_sdk.clients.backend.models import Storage, StorageCategory, StorageProvider, UpdateJob
5
5
 
6
6
 
7
7
  def test_storage_model_validation_success():
@@ -72,3 +72,28 @@ def test_storage_model_enum_values():
72
72
  )
73
73
  assert storage.category == category
74
74
  assert storage.provider == provider
75
+
76
+
77
+ def test_update_job_model_validation_success():
78
+ job_response = {
79
+ 'status': 'running',
80
+ 'progress_record': {'key': 'value'},
81
+ 'console_logs': {'log': 'log content'},
82
+ 'result': {'result_key': 'result_value'},
83
+ }
84
+ update_job = UpdateJob(**job_response)
85
+ assert update_job.status == 'running'
86
+ assert update_job.progress_record == {'key': 'value'}
87
+ assert update_job.console_logs == {'log': 'log content'}
88
+ assert update_job.result == {'result_key': 'result_value'}
89
+
90
+
91
+ def test_update_job_model_validation_with_single_field_success():
92
+ job_response = {
93
+ 'status': 'running',
94
+ }
95
+ update_job = UpdateJob(**job_response)
96
+ assert update_job.status == 'running'
97
+ assert update_job.progress_record is None
98
+ assert update_job.console_logs is None
99
+ assert update_job.result is None
@@ -1,7 +1,7 @@
1
1
  import pytest
2
2
  from pydantic import ValidationError
3
3
 
4
- from synapse_sdk.clients.backend.models import Storage
4
+ from synapse_sdk.clients.backend.models import Storage, UpdateJob
5
5
  from synapse_sdk.clients.base import BaseClient
6
6
 
7
7
 
@@ -44,3 +44,14 @@ def test_validate_response_with_pydantic_model_not_pydantic_model(base_client, v
44
44
  with pytest.raises(TypeError) as exc_info:
45
45
  base_client._validate_response_with_pydantic_model(valid_storage_response, {})
46
46
  assert 'The provided model is not a pydantic model' in str(exc_info.value)
47
+
48
+
49
+ def test_validate_update_job_request_body_with_pydantic_model_success(base_client):
50
+ request_body = {
51
+ 'status': 'running',
52
+ }
53
+ validated_request_body = base_client._validate_request_body_with_pydantic_model(
54
+ request_body,
55
+ UpdateJob,
56
+ )
57
+ assert validated_request_body['status'] == request_body['status']
@@ -25,13 +25,13 @@ def single_image_file_spec_template():
25
25
  def single_image_organized_files():
26
26
  original_files = []
27
27
  for i in range(1, 21):
28
- file_name = f'{i:04d}.jpg'
28
+ image_file_name = f'{i:04d}.jpg'
29
29
  original_files.append({
30
30
  'files': {
31
- 'image_1': '',
31
+ 'image_1': f'/path/to/{image_file_name}',
32
32
  },
33
33
  'meta': {
34
- 'original_file_name': file_name,
34
+ 'original_file_name': image_file_name,
35
35
  },
36
36
  })
37
37
  return original_files
File without changes
File without changes
File without changes