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.
- synapse_sdk/devtools/docs/docs/api/clients/annotation-mixin.md +378 -0
- synapse_sdk/devtools/docs/docs/api/clients/backend.md +368 -1
- synapse_sdk/devtools/docs/docs/api/clients/core-mixin.md +477 -0
- synapse_sdk/devtools/docs/docs/api/clients/data-collection-mixin.md +422 -0
- synapse_sdk/devtools/docs/docs/api/clients/hitl-mixin.md +554 -0
- synapse_sdk/devtools/docs/docs/api/clients/index.md +391 -0
- synapse_sdk/devtools/docs/docs/api/clients/integration-mixin.md +571 -0
- synapse_sdk/devtools/docs/docs/api/clients/ml-mixin.md +578 -0
- synapse_sdk/devtools/docs/docs/plugins/developing-upload-template.md +1463 -0
- synapse_sdk/devtools/docs/docs/plugins/export-plugins.md +161 -34
- synapse_sdk/devtools/docs/docs/plugins/upload-plugins.md +1497 -213
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/annotation-mixin.md +289 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/backend.md +378 -11
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/core-mixin.md +417 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/data-collection-mixin.md +356 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/hitl-mixin.md +192 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/index.md +391 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/integration-mixin.md +479 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ml-mixin.md +284 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/developing-upload-template.md +1463 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/export-plugins.md +161 -34
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/upload-plugins.md +1752 -572
- synapse_sdk/devtools/docs/sidebars.ts +7 -0
- synapse_sdk/plugins/README.md +1 -2
- synapse_sdk/plugins/categories/base.py +7 -0
- synapse_sdk/plugins/categories/export/actions/__init__.py +3 -0
- synapse_sdk/plugins/categories/export/actions/export/__init__.py +28 -0
- synapse_sdk/plugins/categories/export/actions/export/action.py +160 -0
- synapse_sdk/plugins/categories/export/actions/export/enums.py +113 -0
- synapse_sdk/plugins/categories/export/actions/export/exceptions.py +53 -0
- synapse_sdk/plugins/categories/export/actions/export/models.py +74 -0
- synapse_sdk/plugins/categories/export/actions/export/run.py +195 -0
- synapse_sdk/plugins/categories/export/actions/export/utils.py +187 -0
- synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +1 -1
- synapse_sdk/plugins/categories/upload/actions/upload/__init__.py +1 -2
- synapse_sdk/plugins/categories/upload/actions/upload/action.py +154 -531
- synapse_sdk/plugins/categories/upload/actions/upload/context.py +185 -0
- synapse_sdk/plugins/categories/upload/actions/upload/factory.py +143 -0
- synapse_sdk/plugins/categories/upload/actions/upload/models.py +66 -29
- synapse_sdk/plugins/categories/upload/actions/upload/orchestrator.py +182 -0
- synapse_sdk/plugins/categories/upload/actions/upload/registry.py +113 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/base.py +106 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/cleanup.py +62 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/collection.py +62 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/generate.py +80 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/initialize.py +66 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/metadata.py +101 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/organize.py +89 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/upload.py +96 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/validate.py +61 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/base.py +86 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/batch.py +39 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/single.py +34 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/flat.py +233 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/recursive.py +253 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/excel.py +174 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/none.py +16 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/async_upload.py +109 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/sync.py +43 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/default.py +45 -0
- synapse_sdk/plugins/categories/upload/actions/upload/utils.py +194 -83
- synapse_sdk/plugins/categories/upload/templates/config.yaml +4 -0
- synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +269 -0
- synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +71 -27
- synapse_sdk/plugins/models.py +7 -0
- synapse_sdk/shared/__init__.py +21 -0
- {synapse_sdk-2025.9.1.dist-info → synapse_sdk-2025.9.4.dist-info}/METADATA +2 -1
- {synapse_sdk-2025.9.1.dist-info → synapse_sdk-2025.9.4.dist-info}/RECORD +79 -28
- synapse_sdk/plugins/categories/export/actions/export.py +0 -385
- synapse_sdk/plugins/categories/export/enums.py +0 -7
- {synapse_sdk-2025.9.1.dist-info → synapse_sdk-2025.9.4.dist-info}/WHEEL +0 -0
- {synapse_sdk-2025.9.1.dist-info → synapse_sdk-2025.9.4.dist-info}/entry_points.txt +0 -0
- {synapse_sdk-2025.9.1.dist-info → synapse_sdk-2025.9.4.dist-info}/licenses/LICENSE +0 -0
- {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}')
|
|
@@ -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
|
|
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
|
]
|