synapse-sdk 2025.9.1__py3-none-any.whl → 2025.9.4__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (81) hide show
  1. synapse_sdk/devtools/docs/docs/api/clients/annotation-mixin.md +378 -0
  2. synapse_sdk/devtools/docs/docs/api/clients/backend.md +368 -1
  3. synapse_sdk/devtools/docs/docs/api/clients/core-mixin.md +477 -0
  4. synapse_sdk/devtools/docs/docs/api/clients/data-collection-mixin.md +422 -0
  5. synapse_sdk/devtools/docs/docs/api/clients/hitl-mixin.md +554 -0
  6. synapse_sdk/devtools/docs/docs/api/clients/index.md +391 -0
  7. synapse_sdk/devtools/docs/docs/api/clients/integration-mixin.md +571 -0
  8. synapse_sdk/devtools/docs/docs/api/clients/ml-mixin.md +578 -0
  9. synapse_sdk/devtools/docs/docs/plugins/developing-upload-template.md +1463 -0
  10. synapse_sdk/devtools/docs/docs/plugins/export-plugins.md +161 -34
  11. synapse_sdk/devtools/docs/docs/plugins/upload-plugins.md +1497 -213
  12. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/annotation-mixin.md +289 -0
  13. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/backend.md +378 -11
  14. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/core-mixin.md +417 -0
  15. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/data-collection-mixin.md +356 -0
  16. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/hitl-mixin.md +192 -0
  17. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/index.md +391 -0
  18. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/integration-mixin.md +479 -0
  19. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ml-mixin.md +284 -0
  20. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/developing-upload-template.md +1463 -0
  21. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/export-plugins.md +161 -34
  22. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/upload-plugins.md +1752 -572
  23. synapse_sdk/devtools/docs/sidebars.ts +7 -0
  24. synapse_sdk/plugins/README.md +1 -2
  25. synapse_sdk/plugins/categories/base.py +7 -0
  26. synapse_sdk/plugins/categories/export/actions/__init__.py +3 -0
  27. synapse_sdk/plugins/categories/export/actions/export/__init__.py +28 -0
  28. synapse_sdk/plugins/categories/export/actions/export/action.py +160 -0
  29. synapse_sdk/plugins/categories/export/actions/export/enums.py +113 -0
  30. synapse_sdk/plugins/categories/export/actions/export/exceptions.py +53 -0
  31. synapse_sdk/plugins/categories/export/actions/export/models.py +74 -0
  32. synapse_sdk/plugins/categories/export/actions/export/run.py +195 -0
  33. synapse_sdk/plugins/categories/export/actions/export/utils.py +187 -0
  34. synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +1 -1
  35. synapse_sdk/plugins/categories/upload/actions/upload/__init__.py +1 -2
  36. synapse_sdk/plugins/categories/upload/actions/upload/action.py +154 -531
  37. synapse_sdk/plugins/categories/upload/actions/upload/context.py +185 -0
  38. synapse_sdk/plugins/categories/upload/actions/upload/factory.py +143 -0
  39. synapse_sdk/plugins/categories/upload/actions/upload/models.py +66 -29
  40. synapse_sdk/plugins/categories/upload/actions/upload/orchestrator.py +182 -0
  41. synapse_sdk/plugins/categories/upload/actions/upload/registry.py +113 -0
  42. synapse_sdk/plugins/categories/upload/actions/upload/steps/__init__.py +1 -0
  43. synapse_sdk/plugins/categories/upload/actions/upload/steps/base.py +106 -0
  44. synapse_sdk/plugins/categories/upload/actions/upload/steps/cleanup.py +62 -0
  45. synapse_sdk/plugins/categories/upload/actions/upload/steps/collection.py +62 -0
  46. synapse_sdk/plugins/categories/upload/actions/upload/steps/generate.py +80 -0
  47. synapse_sdk/plugins/categories/upload/actions/upload/steps/initialize.py +66 -0
  48. synapse_sdk/plugins/categories/upload/actions/upload/steps/metadata.py +101 -0
  49. synapse_sdk/plugins/categories/upload/actions/upload/steps/organize.py +89 -0
  50. synapse_sdk/plugins/categories/upload/actions/upload/steps/upload.py +96 -0
  51. synapse_sdk/plugins/categories/upload/actions/upload/steps/validate.py +61 -0
  52. synapse_sdk/plugins/categories/upload/actions/upload/strategies/__init__.py +1 -0
  53. synapse_sdk/plugins/categories/upload/actions/upload/strategies/base.py +86 -0
  54. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/__init__.py +1 -0
  55. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/batch.py +39 -0
  56. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/single.py +34 -0
  57. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/__init__.py +1 -0
  58. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/flat.py +233 -0
  59. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/recursive.py +253 -0
  60. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/__init__.py +1 -0
  61. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/excel.py +174 -0
  62. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/none.py +16 -0
  63. synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/__init__.py +1 -0
  64. synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/async_upload.py +109 -0
  65. synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/sync.py +43 -0
  66. synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/__init__.py +1 -0
  67. synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/default.py +45 -0
  68. synapse_sdk/plugins/categories/upload/actions/upload/utils.py +194 -83
  69. synapse_sdk/plugins/categories/upload/templates/config.yaml +4 -0
  70. synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +269 -0
  71. synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +71 -27
  72. synapse_sdk/plugins/models.py +7 -0
  73. synapse_sdk/shared/__init__.py +21 -0
  74. {synapse_sdk-2025.9.1.dist-info → synapse_sdk-2025.9.4.dist-info}/METADATA +2 -1
  75. {synapse_sdk-2025.9.1.dist-info → synapse_sdk-2025.9.4.dist-info}/RECORD +79 -28
  76. synapse_sdk/plugins/categories/export/actions/export.py +0 -385
  77. synapse_sdk/plugins/categories/export/enums.py +0 -7
  78. {synapse_sdk-2025.9.1.dist-info → synapse_sdk-2025.9.4.dist-info}/WHEEL +0 -0
  79. {synapse_sdk-2025.9.1.dist-info → synapse_sdk-2025.9.4.dist-info}/entry_points.txt +0 -0
  80. {synapse_sdk-2025.9.1.dist-info → synapse_sdk-2025.9.4.dist-info}/licenses/LICENSE +0 -0
  81. {synapse_sdk-2025.9.1.dist-info → synapse_sdk-2025.9.4.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,187 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Any
3
+
4
+ from pydantic_core import PydanticCustomError
5
+
6
+ from synapse_sdk.clients.exceptions import ClientError
7
+ from synapse_sdk.i18n import gettext as _
8
+
9
+
10
+ class ExportTargetHandler(ABC):
11
+ """
12
+ Abstract base class for handling export targets.
13
+
14
+ This class defines the blueprint for export target handlers, requiring the implementation
15
+ of methods to validate filters, retrieve results, and process collections of results.
16
+ """
17
+
18
+ @abstractmethod
19
+ def validate_filter(self, value: dict, client: Any):
20
+ """
21
+ Validate filter query params to request original data from api.
22
+
23
+ Args:
24
+ value (dict): The filter criteria to validate.
25
+ client (Any): The client used to validate the filter.
26
+
27
+ Raises:
28
+ PydanticCustomError: If the filter criteria are invalid.
29
+
30
+ Returns:
31
+ dict: The validated filter criteria.
32
+ """
33
+ pass
34
+
35
+ @abstractmethod
36
+ def get_results(self, client: Any, filters: dict):
37
+ """
38
+ Retrieve original data from target sources.
39
+
40
+ Args:
41
+ client (Any): The client used to retrieve the results.
42
+ filters (dict): The filter criteria to apply.
43
+
44
+ Returns:
45
+ tuple: A tuple containing the results and the total count of results.
46
+ """
47
+ pass
48
+
49
+ @abstractmethod
50
+ def get_export_item(self, results):
51
+ """
52
+ Providing elements to build export data.
53
+
54
+ Args:
55
+ results (list): The results to process.
56
+
57
+ Yields:
58
+ generator: A generator that yields processed data items.
59
+ """
60
+ pass
61
+
62
+
63
+ class AssignmentExportTargetHandler(ExportTargetHandler):
64
+ """Handler for assignment target exports.
65
+
66
+ Implements ExportTargetHandler interface for assignment-specific
67
+ export operations including validation, data retrieval, and processing.
68
+ """
69
+
70
+ def validate_filter(self, value: dict, client: Any):
71
+ if 'project' not in value:
72
+ raise PydanticCustomError('missing_field', _('Project is required for Assignment.'))
73
+ try:
74
+ client.list_assignments(params=value)
75
+ except ClientError:
76
+ raise PydanticCustomError('client_error', _('Unable to get Assignment.'))
77
+ return value
78
+
79
+ def get_results(self, client: Any, filters: dict):
80
+ return client.list_assignments(params=filters, list_all=True)
81
+
82
+ def get_export_item(self, results):
83
+ for result in results:
84
+ yield {
85
+ 'data': result['data'],
86
+ 'files': result['file'],
87
+ 'id': result['id'],
88
+ }
89
+
90
+
91
+ class GroundTruthExportTargetHandler(ExportTargetHandler):
92
+ """Handler for ground truth target exports.
93
+
94
+ Implements ExportTargetHandler interface for ground truth dataset
95
+ export operations including validation, data retrieval, and processing.
96
+ """
97
+
98
+ def validate_filter(self, value: dict, client: Any):
99
+ if 'ground_truth_dataset_version' not in value:
100
+ raise PydanticCustomError('missing_field', _('Ground Truth dataset version is required.'))
101
+ try:
102
+ client.get_ground_truth_version(value['ground_truth_dataset_version'])
103
+ except ClientError:
104
+ raise PydanticCustomError('client_error', _('Unable to get Ground Truth dataset version.'))
105
+ return value
106
+
107
+ def get_results(self, client: Any, filters: dict):
108
+ filters['ground_truth_dataset_versions'] = filters.pop('ground_truth_dataset_version')
109
+ return client.list_ground_truth_events(params=filters, list_all=True)
110
+
111
+ def get_export_item(self, results):
112
+ for result in results:
113
+ files_key = next(iter(result['data_unit']['files']))
114
+ yield {
115
+ 'data': result['data'],
116
+ 'files': result['data_unit']['files'][files_key],
117
+ 'id': result['id'],
118
+ }
119
+
120
+
121
+ class TaskExportTargetHandler(ExportTargetHandler):
122
+ """Handler for task target exports.
123
+
124
+ Implements ExportTargetHandler interface for task-specific
125
+ export operations including validation, data retrieval, and processing.
126
+ """
127
+
128
+ def validate_filter(self, value: dict, client: Any):
129
+ if 'project' not in value:
130
+ raise PydanticCustomError('missing_field', _('Project is required for Task.'))
131
+ try:
132
+ client.list_tasks(params=value)
133
+ except ClientError:
134
+ raise PydanticCustomError('client_error', _('Unable to get Task.'))
135
+ return value
136
+
137
+ def get_results(self, client: Any, filters: dict):
138
+ filters['expand'] = ['data_unit', 'assignment', 'workshop']
139
+ return client.list_tasks(params=filters, list_all=True)
140
+
141
+ def get_export_item(self, results):
142
+ for result in results:
143
+ files_key = next(iter(result['data_unit']['files']))
144
+ yield {
145
+ 'data': result['data'],
146
+ 'files': result['data_unit']['files'][files_key],
147
+ 'id': result['id'],
148
+ }
149
+
150
+
151
+ class TargetHandlerFactory:
152
+ """Factory class for creating export target handlers.
153
+
154
+ Provides a centralized way to create appropriate target handlers
155
+ based on the target type. Supports assignment, ground_truth, and task targets.
156
+
157
+ Example:
158
+ >>> handler = TargetHandlerFactory.get_handler('assignment')
159
+ >>> isinstance(handler, AssignmentExportTargetHandler)
160
+ True
161
+ """
162
+
163
+ @staticmethod
164
+ def get_handler(target: str) -> ExportTargetHandler:
165
+ """Get the appropriate target handler for the given target type.
166
+
167
+ Args:
168
+ target (str): The target type ('assignment', 'ground_truth', 'task')
169
+
170
+ Returns:
171
+ ExportTargetHandler: The appropriate handler instance
172
+
173
+ Raises:
174
+ ValueError: If the target type is not supported
175
+
176
+ Example:
177
+ >>> handler = TargetHandlerFactory.get_handler('assignment')
178
+ >>> handler.validate_filter({'project': 123}, client)
179
+ """
180
+ if target == 'assignment':
181
+ return AssignmentExportTargetHandler()
182
+ elif target == 'ground_truth':
183
+ return GroundTruthExportTargetHandler()
184
+ elif target == 'task':
185
+ return TaskExportTargetHandler()
186
+ else:
187
+ raise ValueError(f'Unknown target: {target}')
@@ -4,7 +4,7 @@ from typing import Generator
4
4
 
5
5
  import requests
6
6
 
7
- from synapse_sdk.plugins.categories.export.enums import ExportStatus
7
+ from synapse_sdk.plugins.categories.export.actions.export.enums import ExportStatus
8
8
 
9
9
 
10
10
  class BaseExporter:
@@ -3,7 +3,7 @@ from .enums import LOG_MESSAGES, LogCode, UploadStatus
3
3
  from .exceptions import ExcelParsingError, ExcelSecurityError
4
4
  from .models import UploadParams
5
5
  from .run import UploadRun
6
- from .utils import ExcelMetadataUtils, ExcelSecurityConfig, PathAwareJSONEncoder
6
+ from .utils import ExcelSecurityConfig, PathAwareJSONEncoder
7
7
 
8
8
  __all__ = [
9
9
  'UploadAction',
@@ -16,5 +16,4 @@ __all__ = [
16
16
  'ExcelParsingError',
17
17
  'PathAwareJSONEncoder',
18
18
  'ExcelSecurityConfig',
19
- 'ExcelMetadataUtils',
20
19
  ]