synapse-sdk 2025.9.3__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/plugins/categories/base.py +4 -20
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/recursive.py +25 -10
- synapse_sdk/plugins/models.py +4 -2
- synapse_sdk/shared/__init__.py +21 -0
- {synapse_sdk-2025.9.3.dist-info → synapse_sdk-2025.9.4.dist-info}/METADATA +1 -1
- {synapse_sdk-2025.9.3.dist-info → synapse_sdk-2025.9.4.dist-info}/RECORD +10 -10
- {synapse_sdk-2025.9.3.dist-info → synapse_sdk-2025.9.4.dist-info}/WHEEL +0 -0
- {synapse_sdk-2025.9.3.dist-info → synapse_sdk-2025.9.4.dist-info}/entry_points.txt +0 -0
- {synapse_sdk-2025.9.3.dist-info → synapse_sdk-2025.9.4.dist-info}/licenses/LICENSE +0 -0
- {synapse_sdk-2025.9.3.dist-info → synapse_sdk-2025.9.4.dist-info}/top_level.txt +0 -0
|
@@ -12,6 +12,7 @@ from synapse_sdk.plugins.enums import RunMethod
|
|
|
12
12
|
from synapse_sdk.plugins.exceptions import ActionError
|
|
13
13
|
from synapse_sdk.plugins.models import PluginRelease, Run
|
|
14
14
|
from synapse_sdk.plugins.upload import archive_and_upload, build_and_upload, download_and_upload
|
|
15
|
+
from synapse_sdk.shared import init_sentry, needs_sentry_init
|
|
15
16
|
from synapse_sdk.utils.module_loading import import_string
|
|
16
17
|
from synapse_sdk.utils.pydantic.errors import pydantic_to_drf_error
|
|
17
18
|
|
|
@@ -182,8 +183,8 @@ class Action:
|
|
|
182
183
|
runtime_env[self.plugin_package_manager][key] = value
|
|
183
184
|
|
|
184
185
|
# Sentry init if SENTRY_DSN is set
|
|
185
|
-
if
|
|
186
|
-
runtime_env['worker_process_setup_hook'] =
|
|
186
|
+
if needs_sentry_init():
|
|
187
|
+
runtime_env['worker_process_setup_hook'] = init_sentry
|
|
187
188
|
|
|
188
189
|
# 맨 마지막에 진행되어야 함
|
|
189
190
|
runtime_env['env_vars'] = self.envs
|
|
@@ -312,27 +313,10 @@ class Action:
|
|
|
312
313
|
|
|
313
314
|
return JobSubmissionClient(address=self.envs.get('RAY_DASHBOARD_URL'))
|
|
314
315
|
|
|
315
|
-
def _sentry_init(self, sentry_dsn):
|
|
316
|
-
import sentry_sdk
|
|
317
|
-
from sentry_sdk.integrations.ray import RayIntegration
|
|
318
|
-
|
|
319
|
-
sentry_sdk.init(
|
|
320
|
-
dsn=sentry_dsn,
|
|
321
|
-
environment=os.getenv('DEPLOYMENT_TARGET', 'development'),
|
|
322
|
-
integrations=[RayIntegration()],
|
|
323
|
-
send_default_pii=True,
|
|
324
|
-
)
|
|
325
|
-
|
|
326
|
-
def sentry_init(self):
|
|
327
|
-
sentry_dsn = os.getenv('SENTRY_DSN', self.envs.get('SENTRY_DSN') if self.envs else None)
|
|
328
|
-
if sentry_dsn:
|
|
329
|
-
self._sentry_init(sentry_dsn)
|
|
330
|
-
self.envs['SENTRY_INIT_FUNCTION'] = self._sentry_init
|
|
331
|
-
|
|
332
316
|
def ray_init(self):
|
|
333
317
|
import ray
|
|
334
318
|
|
|
335
|
-
|
|
319
|
+
init_sentry()
|
|
336
320
|
|
|
337
321
|
if not ray.is_initialized():
|
|
338
322
|
ray.init(address=self.envs['RAY_ADDRESS'], ignore_reinit_error=True)
|
|
@@ -52,26 +52,40 @@ class RecursiveFileDiscoveryStrategy(FileDiscoveryStrategy):
|
|
|
52
52
|
for spec_name, dir_path in type_dirs.items():
|
|
53
53
|
dir_path_str = path_cache[dir_path]
|
|
54
54
|
if file_path_str.startswith(dir_path_str):
|
|
55
|
-
|
|
55
|
+
# Create unique dataset key using relative path from spec directory
|
|
56
|
+
relative_path = file_path.relative_to(dir_path)
|
|
57
|
+
# Use parent directory + stem as unique key to group related files
|
|
58
|
+
if relative_path.parent != Path('.'):
|
|
59
|
+
dataset_key = f'{relative_path.parent}_{file_path.stem}'
|
|
60
|
+
else:
|
|
61
|
+
dataset_key = file_path.stem
|
|
56
62
|
|
|
57
|
-
if
|
|
58
|
-
dataset_files[
|
|
63
|
+
if dataset_key not in dataset_files:
|
|
64
|
+
dataset_files[dataset_key] = {}
|
|
59
65
|
|
|
60
|
-
if spec_name not in dataset_files[
|
|
61
|
-
dataset_files[
|
|
66
|
+
if spec_name not in dataset_files[dataset_key]:
|
|
67
|
+
dataset_files[dataset_key][spec_name] = file_path
|
|
62
68
|
else:
|
|
63
69
|
# Keep the most recent file - only stat when needed
|
|
64
|
-
existing_file = dataset_files[
|
|
70
|
+
existing_file = dataset_files[dataset_key][spec_name]
|
|
65
71
|
try:
|
|
66
72
|
if file_path.stat().st_mtime > existing_file.stat().st_mtime:
|
|
67
|
-
dataset_files[
|
|
73
|
+
dataset_files[dataset_key][spec_name] = file_path
|
|
68
74
|
except (OSError, IOError):
|
|
69
75
|
# If stat fails, keep existing file
|
|
70
76
|
pass
|
|
71
77
|
|
|
72
78
|
# Create organized files for datasets with all required files
|
|
73
|
-
for
|
|
79
|
+
for dataset_key, files_dict in sorted(dataset_files.items()):
|
|
74
80
|
if all(req in files_dict for req in required_specs):
|
|
81
|
+
# Extract original file stem from dataset_key
|
|
82
|
+
# If dataset_key contains path info (parent_stem), extract just the stem part
|
|
83
|
+
if '_' in dataset_key and len(dataset_key.split('_')) >= 2:
|
|
84
|
+
# Extract the last part after the last underscore as the original stem
|
|
85
|
+
original_stem = dataset_key.split('_')[-1]
|
|
86
|
+
else:
|
|
87
|
+
original_stem = dataset_key
|
|
88
|
+
|
|
75
89
|
# Calculate most common file extension (optimized)
|
|
76
90
|
file_extensions = {}
|
|
77
91
|
for file_path in files_dict.values():
|
|
@@ -82,14 +96,15 @@ class RecursiveFileDiscoveryStrategy(FileDiscoveryStrategy):
|
|
|
82
96
|
origin_file_extension = max(file_extensions, key=file_extensions.get) if file_extensions else ''
|
|
83
97
|
|
|
84
98
|
meta_data = {
|
|
85
|
-
'origin_file_stem':
|
|
99
|
+
'origin_file_stem': original_stem,
|
|
86
100
|
'origin_file_extension': origin_file_extension,
|
|
87
101
|
'created_at': datetime.now().isoformat(),
|
|
102
|
+
'dataset_key': dataset_key, # Add dataset key for debugging
|
|
88
103
|
}
|
|
89
104
|
|
|
90
105
|
# Add metadata if available - using optimized index lookup
|
|
91
106
|
if metadata_index:
|
|
92
|
-
matched_metadata = self._find_matching_metadata_optimized(
|
|
107
|
+
matched_metadata = self._find_matching_metadata_optimized(original_stem, files_dict, metadata_index)
|
|
93
108
|
if matched_metadata:
|
|
94
109
|
meta_data.update(matched_metadata)
|
|
95
110
|
|
synapse_sdk/plugins/models.py
CHANGED
|
@@ -6,6 +6,7 @@ from synapse_sdk.clients.backend import BackendClient
|
|
|
6
6
|
from synapse_sdk.devtools.config import get_backend_config
|
|
7
7
|
from synapse_sdk.loggers import BackendLogger, ConsoleLogger
|
|
8
8
|
from synapse_sdk.plugins.utils import read_plugin_config
|
|
9
|
+
from synapse_sdk.shared import init_sentry, needs_sentry_init
|
|
9
10
|
from synapse_sdk.shared.enums import Context
|
|
10
11
|
from synapse_sdk.utils.storage import get_storage
|
|
11
12
|
from synapse_sdk.utils.string import hash_text
|
|
@@ -84,8 +85,8 @@ class PluginRelease:
|
|
|
84
85
|
|
|
85
86
|
extra_runtime_env = {}
|
|
86
87
|
|
|
87
|
-
if
|
|
88
|
-
extra_runtime_env['worker_process_setup_hook'] =
|
|
88
|
+
if needs_sentry_init():
|
|
89
|
+
extra_runtime_env['worker_process_setup_hook'] = init_sentry
|
|
89
90
|
|
|
90
91
|
nodes = list_nodes(address=self.envs['RAY_DASHBOARD_URL'])
|
|
91
92
|
node_ids = [n['node_id'] for n in nodes]
|
|
@@ -99,6 +100,7 @@ class PluginRelease:
|
|
|
99
100
|
** self.package_manager_options
|
|
100
101
|
},
|
|
101
102
|
'working_dir': self.get_url(self.envs['SYNAPSE_PLUGIN_STORAGE']),
|
|
103
|
+
**extra_runtime_env,
|
|
102
104
|
},
|
|
103
105
|
scheduling_strategy=strategy,
|
|
104
106
|
).remote()
|
synapse_sdk/shared/__init__.py
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def needs_sentry_init():
|
|
5
|
+
return os.getenv('SENTRY_DSN') is not None
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def init_sentry():
|
|
9
|
+
import sentry_sdk
|
|
10
|
+
from sentry_sdk.integrations.ray import RayIntegration
|
|
11
|
+
|
|
12
|
+
dsn = os.getenv('SENTRY_DSN')
|
|
13
|
+
if dsn is None:
|
|
14
|
+
return
|
|
15
|
+
|
|
16
|
+
sentry_sdk.init(
|
|
17
|
+
dsn=dsn,
|
|
18
|
+
environment=os.getenv('DEPLOYMENT_TARGET', 'development'),
|
|
19
|
+
integrations=[RayIntegration()],
|
|
20
|
+
send_default_pii=True,
|
|
21
|
+
)
|
|
@@ -183,10 +183,10 @@ synapse_sdk/plugins/README.md,sha256=S0xowL7ukJZf0_zjNnWz0g_-b731GrIkdkwaS2ubpz0
|
|
|
183
183
|
synapse_sdk/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
184
184
|
synapse_sdk/plugins/enums.py,sha256=ibixwqA3sCNSriG1jAtL54JQc_Zwo3MufwYUqGhVncc,523
|
|
185
185
|
synapse_sdk/plugins/exceptions.py,sha256=Qs7qODp_RRLO9y2otU2T4ryj5LFwIZODvSIXkAh91u0,691
|
|
186
|
-
synapse_sdk/plugins/models.py,sha256=
|
|
186
|
+
synapse_sdk/plugins/models.py,sha256=g1qvgzLL63LVZ_tIc2gUGw4j7zKr0BPYeLtddrHsS_U,5924
|
|
187
187
|
synapse_sdk/plugins/upload.py,sha256=VJOotYMayylOH0lNoAGeGHRkLdhP7jnC_A0rFQMvQpQ,3228
|
|
188
188
|
synapse_sdk/plugins/categories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
189
|
-
synapse_sdk/plugins/categories/base.py,sha256=
|
|
189
|
+
synapse_sdk/plugins/categories/base.py,sha256=7zRkZw3_oTF2n69Lv85ztKADXn6Qei5-vcpJHDUOS8M,11555
|
|
190
190
|
synapse_sdk/plugins/categories/decorators.py,sha256=Gw6T-UHwpCKrSt596X-g2sZbY_Z1zbbogowClj7Pr5Q,518
|
|
191
191
|
synapse_sdk/plugins/categories/registry.py,sha256=KdQR8SUlLT-3kgYzDNWawS1uJnAhrcw2j4zFaTpilRs,636
|
|
192
192
|
synapse_sdk/plugins/categories/templates.py,sha256=FF5FerhkZMeW1YcKLY5cylC0SkWSYdJODA_Qcm4OGYQ,887
|
|
@@ -273,7 +273,7 @@ synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/batch.
|
|
|
273
273
|
synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/single.py,sha256=bjvWu5t_nAK9Z8AWM_n1uwusMWd9G-7ddqSmwsH39l0,1344
|
|
274
274
|
synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/__init__.py,sha256=ELVncVuhTFvPrbGUjZZAD7upvV3IEsaRi9eTXyjaOU8,42
|
|
275
275
|
synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/flat.py,sha256=OW_EyZJYi40Qgri4MhRKGj98M-0SOUz58ldM-de00Cc,9866
|
|
276
|
-
synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/recursive.py,sha256=
|
|
276
|
+
synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/recursive.py,sha256=gdIaOFB9QyO7MZTQTnX_iI_fn_ysEfRLKQRyRHzZkLE,11072
|
|
277
277
|
synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/__init__.py,sha256=d3sSL9boHCmYmbWupbJ7s8LOBakGCgjiPKRQIbfDCs8,36
|
|
278
278
|
synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/excel.py,sha256=LlykEvwfyuRRCWozExQoolvIfHH1-B4vHOu7dykSTnQ,7333
|
|
279
279
|
synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/none.py,sha256=RGcSmc4N9JnqxC8R-AEo_4_wmg1KS0lij1PxXij9ipk,507
|
|
@@ -302,7 +302,7 @@ synapse_sdk/plugins/utils/actions.py,sha256=QjzISxUMyrcFtOphaYP8tdAkAAzOUZlfnMbV
|
|
|
302
302
|
synapse_sdk/plugins/utils/config.py,sha256=uyGp9GhphQE-b6sla3NwMUH0DeBunvi7szycRj-TMsE,6735
|
|
303
303
|
synapse_sdk/plugins/utils/legacy.py,sha256=UWEk5FHk_AqU4GxhfyKJ76VgBUHS-ktKV6_jTJCgT8k,2689
|
|
304
304
|
synapse_sdk/plugins/utils/registry.py,sha256=HKALzYcPQSFsdLAzodYXMdfFnKOcg6oHYBrx7EwVqNU,1484
|
|
305
|
-
synapse_sdk/shared/__init__.py,sha256=
|
|
305
|
+
synapse_sdk/shared/__init__.py,sha256=kvO_PloP92smK7mA9D2hUwfGiMZd3916BVSsbmRIzco,440
|
|
306
306
|
synapse_sdk/shared/enums.py,sha256=5uy4HGKtGCAvrBMuVSzwloJ6f41sOk0ty__605zF8hg,3538
|
|
307
307
|
synapse_sdk/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
308
308
|
synapse_sdk/utils/dataset.py,sha256=zWTzFmv589izFr62BDuApi3r5FpTsdm-5AmriC0AEdM,1865
|
|
@@ -347,9 +347,9 @@ synapse_sdk/utils/storage/providers/gcp.py,sha256=i2BQCu1Kej1If9SuNr2_lEyTcr5M_n
|
|
|
347
347
|
synapse_sdk/utils/storage/providers/http.py,sha256=2DhIulND47JOnS5ZY7MZUex7Su3peAPksGo1Wwg07L4,5828
|
|
348
348
|
synapse_sdk/utils/storage/providers/s3.py,sha256=ZmqekAvIgcQBdRU-QVJYv1Rlp6VHfXwtbtjTSphua94,2573
|
|
349
349
|
synapse_sdk/utils/storage/providers/sftp.py,sha256=_8s9hf0JXIO21gvm-JVS00FbLsbtvly4c-ETLRax68A,1426
|
|
350
|
-
synapse_sdk-2025.9.
|
|
351
|
-
synapse_sdk-2025.9.
|
|
352
|
-
synapse_sdk-2025.9.
|
|
353
|
-
synapse_sdk-2025.9.
|
|
354
|
-
synapse_sdk-2025.9.
|
|
355
|
-
synapse_sdk-2025.9.
|
|
350
|
+
synapse_sdk-2025.9.4.dist-info/licenses/LICENSE,sha256=bKzmC5YAg4V1Fhl8OO_tqY8j62hgdncAkN7VrdjmrGk,1101
|
|
351
|
+
synapse_sdk-2025.9.4.dist-info/METADATA,sha256=Z6dOGBiTPybtGy3xbfmsr-Z7QpFYF4HHDauxoRCb-OA,3815
|
|
352
|
+
synapse_sdk-2025.9.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
353
|
+
synapse_sdk-2025.9.4.dist-info/entry_points.txt,sha256=VNptJoGoNJI8yLXfBmhgUefMsmGI0m3-0YoMvrOgbxo,48
|
|
354
|
+
synapse_sdk-2025.9.4.dist-info/top_level.txt,sha256=ytgJMRK1slVOKUpgcw3LEyHHP7S34J6n_gJzdkcSsw8,12
|
|
355
|
+
synapse_sdk-2025.9.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|