synapse-sdk 1.0.0a96__py3-none-any.whl → 1.0.0b1__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 (66) hide show
  1. synapse_sdk/cli/__init__.py +139 -84
  2. synapse_sdk/cli/code_server.py +169 -0
  3. synapse_sdk/cli/config.py +105 -4
  4. synapse_sdk/cli/devtools.py +54 -34
  5. synapse_sdk/clients/base.py +3 -4
  6. synapse_sdk/devtools/server.py +24 -791
  7. synapse_sdk/devtools/streamlit_app/__init__.py +5 -0
  8. synapse_sdk/devtools/streamlit_app/app.py +128 -0
  9. synapse_sdk/devtools/streamlit_app/services/__init__.py +11 -0
  10. synapse_sdk/devtools/streamlit_app/services/job_service.py +233 -0
  11. synapse_sdk/devtools/streamlit_app/services/plugin_service.py +236 -0
  12. synapse_sdk/devtools/streamlit_app/services/serve_service.py +95 -0
  13. synapse_sdk/devtools/streamlit_app/ui/__init__.py +15 -0
  14. synapse_sdk/devtools/streamlit_app/ui/config_tab.py +76 -0
  15. synapse_sdk/devtools/streamlit_app/ui/deployment_tab.py +66 -0
  16. synapse_sdk/devtools/streamlit_app/ui/http_tab.py +125 -0
  17. synapse_sdk/devtools/streamlit_app/ui/jobs_tab.py +573 -0
  18. synapse_sdk/devtools/streamlit_app/ui/serve_tab.py +346 -0
  19. synapse_sdk/devtools/streamlit_app/ui/status_bar.py +118 -0
  20. synapse_sdk/devtools/streamlit_app/utils/__init__.py +40 -0
  21. synapse_sdk/devtools/streamlit_app/utils/json_viewer.py +197 -0
  22. synapse_sdk/devtools/streamlit_app/utils/log_formatter.py +38 -0
  23. synapse_sdk/devtools/streamlit_app/utils/styles.py +241 -0
  24. synapse_sdk/devtools/streamlit_app/utils/ui_components.py +289 -0
  25. synapse_sdk/devtools/streamlit_app.py +10 -0
  26. synapse_sdk/plugins/categories/upload/actions/upload.py +2 -1
  27. synapse_sdk/utils/converters/dm/__init__.py +0 -1
  28. synapse_sdk/utils/converters/pascal/from_dm.py +32 -10
  29. synapse_sdk/utils/storage/providers/file_system.py +15 -13
  30. {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/METADATA +4 -6
  31. {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/RECORD +35 -46
  32. synapse_sdk/devtools/models.py +0 -55
  33. synapse_sdk/devtools/utils.py +0 -52
  34. synapse_sdk/devtools/web/.gitignore +0 -2
  35. synapse_sdk/devtools/web/README.md +0 -34
  36. synapse_sdk/devtools/web/dist/index.html +0 -17
  37. synapse_sdk/devtools/web/index.html +0 -16
  38. synapse_sdk/devtools/web/jsconfig.json +0 -15
  39. synapse_sdk/devtools/web/package-lock.json +0 -2609
  40. synapse_sdk/devtools/web/package.json +0 -27
  41. synapse_sdk/devtools/web/pnpm-lock.yaml +0 -1055
  42. synapse_sdk/devtools/web/src/App.jsx +0 -14
  43. synapse_sdk/devtools/web/src/App.module.css +0 -33
  44. synapse_sdk/devtools/web/src/assets/favicon.ico +0 -0
  45. synapse_sdk/devtools/web/src/components/Breadcrumbs.jsx +0 -42
  46. synapse_sdk/devtools/web/src/components/Layout.jsx +0 -12
  47. synapse_sdk/devtools/web/src/components/LogViewer.jsx +0 -280
  48. synapse_sdk/devtools/web/src/components/MessageViewer.jsx +0 -150
  49. synapse_sdk/devtools/web/src/components/NavigationSidebar.jsx +0 -128
  50. synapse_sdk/devtools/web/src/components/ServerStatusBar.jsx +0 -245
  51. synapse_sdk/devtools/web/src/components/icons.jsx +0 -325
  52. synapse_sdk/devtools/web/src/index.css +0 -470
  53. synapse_sdk/devtools/web/src/index.jsx +0 -15
  54. synapse_sdk/devtools/web/src/logo.svg +0 -1
  55. synapse_sdk/devtools/web/src/router.jsx +0 -34
  56. synapse_sdk/devtools/web/src/utils/api.js +0 -442
  57. synapse_sdk/devtools/web/src/views/ApplicationDetailView.jsx +0 -241
  58. synapse_sdk/devtools/web/src/views/ApplicationsView.jsx +0 -224
  59. synapse_sdk/devtools/web/src/views/HomeView.jsx +0 -197
  60. synapse_sdk/devtools/web/src/views/JobDetailView.jsx +0 -310
  61. synapse_sdk/devtools/web/src/views/PluginView.jsx +0 -914
  62. synapse_sdk/devtools/web/vite.config.js +0 -13
  63. {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/WHEEL +0 -0
  64. {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/entry_points.txt +0 -0
  65. {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/licenses/LICENSE +0 -0
  66. {synapse_sdk-1.0.0a96.dist-info → synapse_sdk-1.0.0b1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,289 @@
1
+ """Unified UI components for consistent styling across the application."""
2
+
3
+ from typing import Any, Callable, Optional
4
+
5
+ import streamlit as st
6
+
7
+
8
+ def render_action_button(
9
+ label: str,
10
+ key: str,
11
+ type: str = 'secondary',
12
+ icon: Optional[str] = None,
13
+ on_click: Optional[Callable] = None,
14
+ args: Optional[tuple] = None,
15
+ disabled: bool = False,
16
+ use_container_width: bool = False,
17
+ help: Optional[str] = None,
18
+ ) -> bool:
19
+ """Render a styled action button with consistent appearance."""
20
+ button_types = {
21
+ 'primary': 'primary',
22
+ 'secondary': 'secondary',
23
+ 'danger': 'secondary', # Streamlit doesn't have danger, use CSS
24
+ 'success': 'secondary',
25
+ 'minimal': 'secondary',
26
+ }
27
+
28
+ # Add icon to label if provided
29
+ if icon:
30
+ display_label = f'{icon} {label}'
31
+ else:
32
+ display_label = label
33
+
34
+ # Create button with appropriate styling
35
+ clicked = st.button(
36
+ display_label,
37
+ key=key,
38
+ type=button_types.get(type, 'secondary'),
39
+ on_click=on_click,
40
+ args=args,
41
+ disabled=disabled,
42
+ use_container_width=use_container_width,
43
+ help=help,
44
+ )
45
+
46
+ # Apply custom CSS for special button types
47
+ if type == 'danger':
48
+ st.markdown(
49
+ f"""
50
+ <style>
51
+ button[kind="secondary"][key="{key}"] {{
52
+ background-color: #fff;
53
+ color: #dc3545;
54
+ border-color: #dc3545;
55
+ }}
56
+ button[kind="secondary"][key="{key}"]:hover {{
57
+ background-color: #dc3545;
58
+ color: white;
59
+ }}
60
+ </style>
61
+ """,
62
+ unsafe_allow_html=True,
63
+ )
64
+ elif type == 'success':
65
+ st.markdown(
66
+ f"""
67
+ <style>
68
+ button[kind="secondary"][key="{key}"] {{
69
+ background-color: #fff;
70
+ color: #28a745;
71
+ border-color: #28a745;
72
+ }}
73
+ button[kind="secondary"][key="{key}"]:hover {{
74
+ background-color: #28a745;
75
+ color: white;
76
+ }}
77
+ </style>
78
+ """,
79
+ unsafe_allow_html=True,
80
+ )
81
+ elif type == 'minimal':
82
+ st.markdown(
83
+ f"""
84
+ <style>
85
+ button[kind="secondary"][key="{key}"] {{
86
+ background-color: transparent;
87
+ border: none;
88
+ color: #007bff;
89
+ padding: 4px 8px;
90
+ }}
91
+ button[kind="secondary"][key="{key}"]:hover {{
92
+ background-color: #f8f9fa;
93
+ text-decoration: underline;
94
+ }}
95
+ </style>
96
+ """,
97
+ unsafe_allow_html=True,
98
+ )
99
+
100
+ return clicked
101
+
102
+
103
+ def render_section_header(title: str, subtitle: Optional[str] = None):
104
+ """Render a consistent section header."""
105
+ subtitle_html = (
106
+ f'<p style="margin-top: 0.25rem; color: #6c757d; font-size: 14px;">{subtitle}</p>' if subtitle else ''
107
+ )
108
+ st.markdown(
109
+ f'<div style="margin-bottom: 1.5rem;">'
110
+ f'<h3 style="margin: 0; font-weight: 600; color: #1a1a1a;">{title}</h3>'
111
+ f'{subtitle_html}'
112
+ f'</div>',
113
+ unsafe_allow_html=True,
114
+ )
115
+
116
+
117
+ def render_info_card(title: str, content: str, type: str = 'info', icon: Optional[str] = None):
118
+ """Render an information card with consistent styling."""
119
+ colors = {
120
+ 'info': {'bg': '#d1ecf1', 'border': '#bee5eb', 'text': '#0c5460'},
121
+ 'success': {'bg': '#d4edda', 'border': '#c3e6cb', 'text': '#155724'},
122
+ 'warning': {'bg': '#fff3cd', 'border': '#ffeaa7', 'text': '#856404'},
123
+ 'error': {'bg': '#f8d7da', 'border': '#f5c6cb', 'text': '#721c24'},
124
+ 'neutral': {'bg': '#f8f9fa', 'border': '#dee2e6', 'text': '#495057'},
125
+ }
126
+
127
+ color_scheme = colors.get(type, colors['info'])
128
+ icon_html = f'<span style="margin-right: 8px;">{icon}</span>' if icon else ''
129
+
130
+ st.markdown(
131
+ f'<div style="'
132
+ f' background-color: {color_scheme["bg"]};'
133
+ f' border: 1px solid {color_scheme["border"]};'
134
+ f' border-radius: 6px;'
135
+ f' padding: 12px 16px;'
136
+ f' margin: 12px 0;'
137
+ f'">'
138
+ f'<div style="color: {color_scheme["text"]}; font-weight: 500; margin-bottom: 4px;">'
139
+ f'{icon_html}{title}'
140
+ f'</div>'
141
+ f'<div style="color: {color_scheme["text"]}; font-size: 14px;">{content}</div>'
142
+ f'</div>',
143
+ unsafe_allow_html=True,
144
+ )
145
+
146
+
147
+ def render_metric_card(label: str, value: Any, delta: Optional[str] = None, delta_color: str = 'normal'):
148
+ """Render a metric card with consistent styling."""
149
+ delta_html = ''
150
+ if delta:
151
+ color = {'normal': '#28a745', 'inverse': '#dc3545', 'off': '#6c757d'}.get(delta_color, '#28a745')
152
+ delta_html = f'<div style="color: {color}; font-size: 12px; margin-top: 4px;">{delta}</div>'
153
+
154
+ st.markdown(
155
+ f'<div style="'
156
+ f' background-color: #fff;'
157
+ f' border: 1px solid #e0e0e0;'
158
+ f' border-radius: 8px;'
159
+ f' padding: 16px;'
160
+ f' margin: 8px 0;'
161
+ f'">'
162
+ f'<div style="color: #6c757d; font-size: 12px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.5px;">' # noqa: E501
163
+ f'{label}'
164
+ f'</div>'
165
+ f'<div style="color: #212529; font-size: 24px; font-weight: 600; margin-top: 4px;">'
166
+ f'{value}'
167
+ f'</div>'
168
+ f'{delta_html}'
169
+ f'</div>',
170
+ unsafe_allow_html=True,
171
+ )
172
+
173
+
174
+ def render_key_value_pair(key: str, value: Any, monospace_value: bool = False, inline: bool = True):
175
+ """Render a key-value pair with consistent styling."""
176
+ value_style = 'font-family: monospace;' if monospace_value else ''
177
+
178
+ if inline:
179
+ st.markdown(
180
+ f'<div style="margin-bottom: 8px; font-size: 14px;">'
181
+ f'<span style="color: #495057; font-weight: 500;">{key}:</span> '
182
+ f'<span style="color: #212529; {value_style}">{value}</span>'
183
+ f'</div>',
184
+ unsafe_allow_html=True,
185
+ )
186
+ else:
187
+ st.markdown(
188
+ f'<div style="margin-bottom: 12px;">'
189
+ f'<div style="color: #495057; font-weight: 500; font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px;">' # noqa: E501
190
+ f'{key}'
191
+ f'</div>'
192
+ f'<div style="color: #212529; font-size: 14px; {value_style}">{value}</div>'
193
+ f'</div>',
194
+ unsafe_allow_html=True,
195
+ )
196
+
197
+
198
+ def render_divider(margin: str = '1.5rem'):
199
+ """Render a consistent divider."""
200
+ st.markdown(
201
+ f'<hr style="margin: {margin} 0; border: none; border-top: 1px solid #e0e0e0;">', unsafe_allow_html=True
202
+ )
203
+
204
+
205
+ def render_table_header(columns: list, column_widths: list = None):
206
+ """Render a consistent table header."""
207
+ if not column_widths:
208
+ column_widths = [1] * len(columns)
209
+
210
+ header_cols = st.columns(column_widths)
211
+ for i, header in enumerate(columns):
212
+ with header_cols[i]:
213
+ st.markdown(
214
+ f'<div style="'
215
+ f' color: #495057;'
216
+ f' font-size: 12px;'
217
+ f' font-weight: 600;'
218
+ f' text-transform: uppercase;'
219
+ f' letter-spacing: 0.5px;'
220
+ f' padding: 8px 0;'
221
+ f' border-bottom: 2px solid #dee2e6;'
222
+ f'">{header}</div>',
223
+ unsafe_allow_html=True,
224
+ )
225
+ return header_cols
226
+
227
+
228
+ def render_empty_state(
229
+ message: str,
230
+ icon: Optional[str] = None,
231
+ action_label: Optional[str] = None,
232
+ action_callback: Optional[Callable] = None,
233
+ ):
234
+ """Render an empty state message with optional action."""
235
+ icon_html = f'<div style="font-size: 48px; margin-bottom: 16px;">{icon}</div>' if icon else ''
236
+
237
+ st.markdown(
238
+ f'<div style="'
239
+ f' text-align: center;'
240
+ f' padding: 48px 24px;'
241
+ f' background-color: #f8f9fa;'
242
+ f' border-radius: 8px;'
243
+ f' margin: 24px 0;'
244
+ f'">'
245
+ f'{icon_html}'
246
+ f'<div style="color: #6c757d; font-size: 16px;">{message}</div>'
247
+ f'</div>',
248
+ unsafe_allow_html=True,
249
+ )
250
+
251
+ if action_label and action_callback:
252
+ col1, col2, col3 = st.columns([1, 1, 1])
253
+ with col2:
254
+ if st.button(action_label, key='empty_state_action', type='primary'):
255
+ action_callback()
256
+
257
+
258
+ def render_progress_bar(progress: float, label: Optional[str] = None, show_percentage: bool = True):
259
+ """Render a custom progress bar with consistent styling."""
260
+ percentage = int(progress * 100)
261
+
262
+ label_html = f'<div style="font-size: 12px; color: #6c757d; margin-bottom: 4px;">{label}</div>' if label else ''
263
+ percentage_html = (
264
+ f'<span style="font-size: 12px; color: #495057; margin-left: 8px;">{percentage}%</span>'
265
+ if show_percentage
266
+ else ''
267
+ )
268
+
269
+ st.markdown(
270
+ f'{label_html}'
271
+ f'<div style="display: flex; align-items: center;">'
272
+ f'<div style="'
273
+ f' flex: 1;'
274
+ f' height: 8px;'
275
+ f' background-color: #e9ecef;'
276
+ f' border-radius: 4px;'
277
+ f' overflow: hidden;'
278
+ f'">'
279
+ f'<div style="'
280
+ f' width: {percentage}%;'
281
+ f' height: 100%;'
282
+ f' background: linear-gradient(90deg, #007bff 0%, #0056b3 100%);'
283
+ f' transition: width 0.3s ease;'
284
+ f'"></div>'
285
+ f'</div>'
286
+ f'{percentage_html}'
287
+ f'</div>',
288
+ unsafe_allow_html=True,
289
+ )
@@ -0,0 +1,10 @@
1
+ """Streamlit-based Synapse DevTools Application.
2
+
3
+ This module imports from the modularized structure.
4
+ The main application logic is now in streamlit_app/app.py
5
+ """
6
+
7
+ from synapse_sdk.devtools.streamlit_app import main
8
+
9
+ if __name__ == '__main__':
10
+ main()
@@ -207,7 +207,8 @@ class UploadParams(BaseModel):
207
207
  storage (int): The storage of the action.
208
208
  collection (int): The collection of the action.
209
209
  project (int | None): The project of the action.
210
- excel_metadata_path (str | None): Path to excel file containing metadata. Defaults to 'meta.xlsx' or 'meta.xls' in the path directory.
210
+ excel_metadata_path (str | None): Path to excel file containing metadata.
211
+ Defaults to 'meta.xlsx' or 'meta.xls' in the path directory.
211
212
  """
212
213
 
213
214
  name: Annotated[str, AfterValidator(non_blank)]
@@ -1,5 +1,4 @@
1
1
  from abc import ABC, abstractmethod
2
- from enum import Enum
3
2
 
4
3
  from synapse_sdk.shared.enums import SupportedTools
5
4
 
@@ -27,7 +27,9 @@ class FromDMToPascalConverter(FromDMConverter):
27
27
  return img_path
28
28
  return None
29
29
 
30
- def build_pascal_xml(self, img_filename: str, img_size: tuple, objects: List[dict]) -> ET.ElementTree:
30
+ def build_pascal_xml(
31
+ self, img_filename: str, img_size: tuple, objects: List[dict], has_segmentation: bool = None
32
+ ) -> ET.ElementTree:
31
33
  """Build a Pascal VOC XML tree from image filename, size, and objects."""
32
34
  folder = 'Images'
33
35
  width, height, depth = img_size
@@ -41,7 +43,12 @@ class FromDMToPascalConverter(FromDMConverter):
41
43
  ET.SubElement(size, 'width').text = str(width)
42
44
  ET.SubElement(size, 'height').text = str(height)
43
45
  ET.SubElement(size, 'depth').text = str(depth)
44
- ET.SubElement(annotation, 'segmented').text = '0'
46
+
47
+ # Set segmented to 1 if there are any segmentation objects, 0 otherwise
48
+ if has_segmentation is None:
49
+ has_segmentation = any(obj.get('has_segmentation', False) for obj in objects)
50
+ ET.SubElement(annotation, 'segmented').text = '1' if has_segmentation else '0'
51
+
45
52
  for obj in objects:
46
53
  obj_elem = ET.SubElement(annotation, 'object')
47
54
  ET.SubElement(obj_elem, 'name').text = obj['name']
@@ -58,6 +65,8 @@ class FromDMToPascalConverter(FromDMConverter):
58
65
  def parse_dm_annotations(self, annotation: dict):
59
66
  """Parse DM annotations and convert to Pascal VOC format."""
60
67
  objects = []
68
+ has_segmentation = 'segmentation' in annotation
69
+
61
70
  # Only include bounding_box (Pascal VOC does not support polyline/keypoint by default)
62
71
  if 'bounding_box' in annotation:
63
72
  for box in annotation['bounding_box']:
@@ -67,10 +76,18 @@ class FromDMToPascalConverter(FromDMConverter):
67
76
  ymin = int(round(y))
68
77
  xmax = int(round(x + w))
69
78
  ymax = int(round(y + h))
70
- objects.append({'name': class_name, 'xmin': xmin, 'ymin': ymin, 'xmax': xmax, 'ymax': ymax})
79
+ objects.append({
80
+ 'name': class_name,
81
+ 'xmin': xmin,
82
+ 'ymin': ymin,
83
+ 'xmax': xmax,
84
+ 'ymax': ymax,
85
+ 'has_segmentation': has_segmentation,
86
+ })
71
87
  self.class_names.add(class_name)
88
+
72
89
  # polyline, keypoint 등은 무시
73
- return objects
90
+ return objects, has_segmentation
74
91
 
75
92
  def _convert_split_dir(self, split_dir: str, split_name: str):
76
93
  """Convert a split dir (train/valid/test) to list of (xml_tree, xml_filename, img_src, img_name)."""
@@ -89,8 +106,10 @@ class FromDMToPascalConverter(FromDMConverter):
89
106
  with Image.open(img_path) as img:
90
107
  width, height = img.size
91
108
  depth = len(img.getbands())
92
- objects = self.parse_dm_annotations(img_ann)
93
- xml_tree = self.build_pascal_xml(os.path.basename(img_path), (width, height, depth), objects)
109
+ objects, has_segmentation = self.parse_dm_annotations(img_ann)
110
+ xml_tree = self.build_pascal_xml(
111
+ os.path.basename(img_path), (width, height, depth), objects, has_segmentation
112
+ )
94
113
  xml_filename = base + '.xml'
95
114
  results.append((xml_tree, xml_filename, img_path, os.path.basename(img_path)))
96
115
  return results
@@ -112,8 +131,10 @@ class FromDMToPascalConverter(FromDMConverter):
112
131
  with Image.open(img_path) as img:
113
132
  width, height = img.size
114
133
  depth = len(img.getbands())
115
- objects = self.parse_dm_annotations(img_ann)
116
- xml_tree = self.build_pascal_xml(os.path.basename(img_path), (width, height, depth), objects)
134
+ objects, has_segmentation = self.parse_dm_annotations(img_ann)
135
+ xml_tree = self.build_pascal_xml(
136
+ os.path.basename(img_path), (width, height, depth), objects, has_segmentation
137
+ )
117
138
  xml_filename = base + '.xml'
118
139
  results.append((xml_tree, xml_filename, img_path, os.path.basename(img_path)))
119
140
  return results
@@ -202,12 +223,13 @@ class FromDMToPascalConverter(FromDMConverter):
202
223
  # Process annotations from the first (and only) image in data
203
224
  if 'images' in data and len(data['images']) > 0:
204
225
  img_ann = data['images'][0]
205
- objects = self.parse_dm_annotations(img_ann)
226
+ objects, has_segmentation = self.parse_dm_annotations(img_ann)
206
227
  else:
207
228
  objects = []
229
+ has_segmentation = False
208
230
 
209
231
  # Build Pascal VOC XML
210
- xml_tree = self.build_pascal_xml(img_filename, (width, height, depth), objects)
232
+ xml_tree = self.build_pascal_xml(img_filename, (width, height, depth), objects, has_segmentation)
211
233
  xml_filename = os.path.splitext(img_filename)[0] + '.xml'
212
234
 
213
235
  # Convert XML tree to string for easy viewing
@@ -23,10 +23,23 @@ class FileSystemStorage(BaseStorage):
23
23
  >>> storage = FileSystemStorage(config)
24
24
  """
25
25
 
26
- def __init__(self, url):
27
- super().__init__(url)
26
+ def __init__(self, connection_params: str | dict):
27
+ super().__init__(connection_params)
28
28
  self.base_path = Path(self.query_params['location'])
29
29
 
30
+ def get_pathlib(self, path):
31
+ """Get the path as a pathlib object.
32
+
33
+ Args:
34
+ path (str): The path to convert.
35
+
36
+ Returns:
37
+ pathlib.Path: The converted path.
38
+ """
39
+ if path == '/' or path == '':
40
+ return self.base_path
41
+ return self.base_path / path
42
+
30
43
  def upload(self, source, target):
31
44
  """Upload a file from source to target location.
32
45
 
@@ -72,17 +85,6 @@ class FileSystemStorage(BaseStorage):
72
85
  target_path = self.base_path / target
73
86
  return f'file://{target_path.absolute()}'
74
87
 
75
- def get_pathlib(self, path):
76
- """Get the path as a pathlib object.
77
-
78
- Args:
79
- path (str): The path to convert.
80
-
81
- Returns:
82
- pathlib.Path: The converted path.
83
- """
84
- return self.base_path / path
85
-
86
88
  def get_path_file_count(self, pathlib_obj):
87
89
  """Get the file count in the path.
88
90
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse-sdk
3
- Version: 1.0.0a96
3
+ Version: 1.0.0b1
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -27,11 +27,9 @@ Requires-Dist: ray[all]==2.44.1; extra == "all"
27
27
  Requires-Dist: python-nmap; extra == "all"
28
28
  Requires-Dist: hyperopt; extra == "all"
29
29
  Requires-Dist: bayesian-optimization==1.4.3; extra == "all"
30
- Provides-Extra: dashboard
31
- Requires-Dist: fastapi>=0.115.13; extra == "dashboard"
32
- Requires-Dist: uvicorn[standard]>=0.34.3; extra == "dashboard"
33
- Requires-Dist: websockets>=15.0.1; extra == "dashboard"
34
- Requires-Dist: aiofiles>=24.1.0; extra == "dashboard"
30
+ Provides-Extra: devtools
31
+ Requires-Dist: streamlit>=1.29.0; extra == "devtools"
32
+ Requires-Dist: streamlit-ace>=0.1.1; extra == "devtools"
35
33
  Provides-Extra: test
36
34
  Requires-Dist: pytest>=7.0.0; extra == "test"
37
35
  Requires-Dist: pytest-cov>=4.0.0; extra == "test"
@@ -6,9 +6,10 @@ synapse_sdk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  synapse_sdk/i18n.py,sha256=VXMR-Zm_1hTAg9iPk3YZNNq-T1Bhx1J2fEtRT6kyYbg,766
7
7
  synapse_sdk/loggers.py,sha256=xK48h3ZaDDZLaF-qsdnv1-6-4vw_cYlgpSCKHYUQw1g,6549
8
8
  synapse_sdk/types.py,sha256=khzn8KpgxFdn1SrpbcuX84m_Md1Mz_HIoUoPq8uok40,698
9
- synapse_sdk/cli/__init__.py,sha256=RLZwqbtoC90-tw_2ErakY8-GxSNf6Ms2lNePBd_y-9U,9694
10
- synapse_sdk/cli/config.py,sha256=ooIHI7ZDA1yLtisxk_Xn1ptz4sM5j7TDivxaPvBUONE,11886
11
- synapse_sdk/cli/devtools.py,sha256=Wm6b5iif12Tl1wkn688F_d0gQG5mKfu274rRM9QANyk,2609
9
+ synapse_sdk/cli/__init__.py,sha256=tdOwJRf6qggHqFrXBTwvhUbkG0KZmJ_xDlDdDv7Wn8M,11663
10
+ synapse_sdk/cli/code_server.py,sha256=vp5i0p8BO-bA3XrbqBtb95S0kGhQZwzmPJj42YTX72s,7042
11
+ synapse_sdk/cli/config.py,sha256=2WVKeAdcDeiwRb4JnNEOeZoAVlTHrY2jx4NAUiAZO2c,16156
12
+ synapse_sdk/cli/devtools.py,sha256=hi06utdLllptlUy3HhPfmfRqjc9bdiVGezY0U5s_0pY,2617
12
13
  synapse_sdk/cli/alias/__init__.py,sha256=jDy8N_KupVy7n_jKKWhjQOj76-mR-uoVvMoyzObUkuI,405
13
14
  synapse_sdk/cli/alias/create.py,sha256=P9uX_dbafSdpO4UM4A4l6fyu88I3plaUPnIk72z5-wQ,1132
14
15
  synapse_sdk/cli/alias/dataclass.py,sha256=avVaUvBmtdVkM9GD_MilCXk0kVQSbh2p5s5XEqL4kMs,1498
@@ -23,7 +24,7 @@ synapse_sdk/cli/plugin/create.py,sha256=HpYTpohV1NbSrULaVUlc4jWLWznPrx7glgydTM3s
23
24
  synapse_sdk/cli/plugin/publish.py,sha256=wok85WnfXzb4j6Aix7gRWM3kXW3E2eC31Q3bsDrn-vw,1547
24
25
  synapse_sdk/cli/plugin/run.py,sha256=xz5LRm3zh8Y9DMjw5FFRFVRWSCWtYfZJskfCmrPikaQ,2598
25
26
  synapse_sdk/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- synapse_sdk/clients/base.py,sha256=DPY2fNwJHYKa61z07ozJ0poCFRgGd43zfgmHgpI_ngc,12890
27
+ synapse_sdk/clients/base.py,sha256=2-aCbWx0LcFGXXgd9nkWtaaSroRJybjRAHAT4qCjhv0,12889
27
28
  synapse_sdk/clients/exceptions.py,sha256=ylv7x10eOp4aA3a48jwonnvqvkiYwzJYXjkVkRTAjwk,220
28
29
  synapse_sdk/clients/utils.py,sha256=8pPJTdzHiRPSbZMoQYHAgR2BAMO6u_R_jMV6a2p34iQ,392
29
30
  synapse_sdk/clients/agent/__init__.py,sha256=FqYbtzMJdzRfuU2SA-Yxdc0JKmVP1wxH6OlUNmB4lH8,2230
@@ -45,9 +46,8 @@ synapse_sdk/clients/validators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
45
46
  synapse_sdk/clients/validators/collections.py,sha256=LtnwvutsScubOUcZ2reGHLCzseXxtNIdnH2nv098aUU,1195
46
47
  synapse_sdk/devtools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
48
  synapse_sdk/devtools/config.py,sha256=ODAfnXD4TBZQM2dxL7pcHlx6JfkZo15Kwf1MEenbics,2509
48
- synapse_sdk/devtools/models.py,sha256=6tdpNblSvE5VQ97J0NZreFkD0jK8v6JuJK4ap0DX2w8,1112
49
- synapse_sdk/devtools/server.py,sha256=WDeVYl5wuh2FneRMeIZ7BuZDrpA30wpFmykKCRtpNaw,34421
50
- synapse_sdk/devtools/utils.py,sha256=-f3ZxnRpYg6suNQIL-m4n1DhvLdQEbS4e9Mk9tQ8crE,1706
49
+ synapse_sdk/devtools/server.py,sha256=tj-9ICg1bSECvDD1yUZnLeiH7qpUcwrJ6jaD9C1Ba_8,1454
50
+ synapse_sdk/devtools/streamlit_app.py,sha256=fa17_8NUDCClWp8ESLkPEUD5CTo6bisTFEVXniyUhY8,256
51
51
  synapse_sdk/devtools/docs/.gitignore,sha256=fCv2uiY7oUmiiFhHqfcYbg169Y-q4-AfLmmnRl98_sw,233
52
52
  synapse_sdk/devtools/docs/README.md,sha256=yBzWf0K1ef4oymFXDaHo0nYWEgMQJqsOyrkNhIOPQrY,774
53
53
  synapse_sdk/devtools/docs/docusaurus.config.ts,sha256=zH1dxP4hmKsYWTo1OYMBIeE0Cj5dC8KChVtkORNQB5E,3129
@@ -76,35 +76,24 @@ synapse_sdk/devtools/docs/static/img/logo.png,sha256=JQWNUU1U4D7Rsta3EJAe9jK-BgF
76
76
  synapse_sdk/devtools/docs/static/img/undraw_docusaurus_mountain.svg,sha256=XWOoH_PdXqJm6ZFW-OM_dswC3w8E4aRIckBmNwRmC38,31486
77
77
  synapse_sdk/devtools/docs/static/img/undraw_docusaurus_react.svg,sha256=Hywde83UIZyYadlLRcBS4oVkZOkcPgcE2ZtHFNMsxmg,36002
78
78
  synapse_sdk/devtools/docs/static/img/undraw_docusaurus_tree.svg,sha256=CXBNiO-Elke_LuAqTLGxtBPwAN4Fmo15QBkjjvLF5Kc,11887
79
- synapse_sdk/devtools/web/.gitignore,sha256=UeqwuXCVR17AeEG2aRcVjr_JPOpEHQzojhZVnWG2jyM,17
80
- synapse_sdk/devtools/web/README.md,sha256=xyc2P1KkP_TQHI6ADzgyfWFjERLw1VKNfbjru3BlnqQ,1097
81
- synapse_sdk/devtools/web/index.html,sha256=YiYabbQoU_W7EIuLOLQtyI_y_WjTp2DVMVuJWwmP3LQ,501
82
- synapse_sdk/devtools/web/jsconfig.json,sha256=erIAIRGM4UfgR5fvYTQhXHw21ZBVTqaSOE1CKfLbmuU,338
83
- synapse_sdk/devtools/web/package-lock.json,sha256=U8D6cfTZGAhYnGAt7cn0zRapKWvqQQ890d5bFAkkuAo,88728
84
- synapse_sdk/devtools/web/package.json,sha256=XhFiaskku7iVMh33AYrwQUim5Sw3x0m0mFheJBt701w,579
85
- synapse_sdk/devtools/web/pnpm-lock.yaml,sha256=BvWYbeMzrQJjyWukCiGCLuBwpq-314RtTfJjEBn_23Y,34021
86
- synapse_sdk/devtools/web/vite.config.js,sha256=mCx0SMeHaJQ6YiwVCjFW2wnKo3ET31CeBQWL-oWGIMI,275
87
- synapse_sdk/devtools/web/dist/index.html,sha256=U2XwWhEkLtEiIM2k2bkDsNOYHG2_NUEiI70jU7LwPVA,603
88
- synapse_sdk/devtools/web/src/App.jsx,sha256=ldhadXC3mCQqfAKKU1DHo8f3zSHmH9ZarVC8HrUwIgk,302
89
- synapse_sdk/devtools/web/src/App.module.css,sha256=CkYPpB5DZOSEnOqliwEyYcdZx8jrPkVS6hCs0DP7x9o,472
90
- synapse_sdk/devtools/web/src/index.css,sha256=xEcCf4tGnShIHHT_Josx7-wvA1Kb-aeQ_joj0QkPgag,9960
91
- synapse_sdk/devtools/web/src/index.jsx,sha256=VYyu_ZU9Ubhn14hpaN6y6Pzu9fvGE_rOZvaWS3kLmsc,392
92
- synapse_sdk/devtools/web/src/logo.svg,sha256=EjsEvGoSQbMRX4beCZCMAZ8l1PDYiRarScJIcSHT37U,1598
93
- synapse_sdk/devtools/web/src/router.jsx,sha256=RX22-qz1SdFzTkRz-z8KQWRHM5Opq0iiQZKpfZv6Ehc,1367
94
- synapse_sdk/devtools/web/src/assets/favicon.ico,sha256=DnJqOB_Vx-5-V5YPnqX_ajVAcQVd0HG_EwBSrVqJnj0,15086
95
- synapse_sdk/devtools/web/src/components/Breadcrumbs.jsx,sha256=K1oANO1dz7DdZlIWwrvoHmLzJMphylbxeYv5zXORCWk,1271
96
- synapse_sdk/devtools/web/src/components/Layout.jsx,sha256=tAJbm1uOpoLjBarYhfTGy3fyIrDMpnK8_mJtmbc4L54,269
97
- synapse_sdk/devtools/web/src/components/LogViewer.jsx,sha256=3rdszzAocjxSyiyyBaOS9WYdepO76-Xo0fqnYJ7YmwY,8840
98
- synapse_sdk/devtools/web/src/components/MessageViewer.jsx,sha256=maCiK1D3P-Y5UJaaq_rIfU481GTmB9pFiPygMk2EK3I,5029
99
- synapse_sdk/devtools/web/src/components/NavigationSidebar.jsx,sha256=IW2PiUOiJuLW1HrBoFjAfFdKYKK8eodimdgL3Za7dmk,3993
100
- synapse_sdk/devtools/web/src/components/ServerStatusBar.jsx,sha256=vBH36S9Wcjy-3rTw9gtJE-Q-R_6IJ8qDpDDeRNlMW6I,8234
101
- synapse_sdk/devtools/web/src/components/icons.jsx,sha256=PWLGyluP0sudc0Qlc7jcbCcEMXocaX_oFULvRVMepKc,7690
102
- synapse_sdk/devtools/web/src/utils/api.js,sha256=dPVeAnYpQGVE83xcPILL1p7cW9gOYADACPMl-xYe9M4,10861
103
- synapse_sdk/devtools/web/src/views/ApplicationDetailView.jsx,sha256=wMXIkRkiykWZZrMGZ8bymmzpoN6miHN7RUqL5eLt9P4,9640
104
- synapse_sdk/devtools/web/src/views/ApplicationsView.jsx,sha256=LKfIWGf7isXc6_Fxaxei_8gM5bbQ_zWkGrfw8Qe5vpI,9081
105
- synapse_sdk/devtools/web/src/views/HomeView.jsx,sha256=ri2Rq_RzEzfYqNRKna1cI2pWHcvGoWRSS1oZXxGDAGc,8038
106
- synapse_sdk/devtools/web/src/views/JobDetailView.jsx,sha256=QyVgFMdzHgTQKA7IiEjDtMHjRAAo3ERpe7QBQsWgb7M,11830
107
- synapse_sdk/devtools/web/src/views/PluginView.jsx,sha256=_-V8elSiEtsvKECeROtQopSY8f5JUIypZhY-vD3XorE,39357
79
+ synapse_sdk/devtools/streamlit_app/__init__.py,sha256=7oO_5ppKNH3QI_HLkryaVpsNb_AIQkx0TqFr_RrFYNY,123
80
+ synapse_sdk/devtools/streamlit_app/app.py,sha256=-R0f1y9lLL3mdFKkQJigXzdDoYTK0U7EedJduJz8d4k,4281
81
+ synapse_sdk/devtools/streamlit_app/services/__init__.py,sha256=z5ki6N2cPzxK2XT8zhwGFi8RBkAeD1hNlPa9i6uqArk,228
82
+ synapse_sdk/devtools/streamlit_app/services/job_service.py,sha256=h2KGq2kaOE5na-2zQBGZOwp4su6abtqzx9ma_Bz0to8,11036
83
+ synapse_sdk/devtools/streamlit_app/services/plugin_service.py,sha256=MNTMvzoy4zo3qCrTb5QMghWmzvGgWMEGt1-qXdbxk24,8589
84
+ synapse_sdk/devtools/streamlit_app/services/serve_service.py,sha256=LynDK7X1bFfcfJoYfomiNNcmu5rowbWhsuTcOZLTeVM,4643
85
+ synapse_sdk/devtools/streamlit_app/ui/__init__.py,sha256=YtjnoUTjSrlq_sfzCCesvbpYf_fELvSMBG-Qp-z9zJk,311
86
+ synapse_sdk/devtools/streamlit_app/ui/config_tab.py,sha256=3R-IR6KROdqs-zSSaR067q7BmZ7FHIJcbGtt3kHT7Yw,3358
87
+ synapse_sdk/devtools/streamlit_app/ui/deployment_tab.py,sha256=qTIHTiD9Kxaf7Fzerd3PNCO6ffofAz7fmhXe5H-IXls,2415
88
+ synapse_sdk/devtools/streamlit_app/ui/http_tab.py,sha256=sNbceVIqtrZ4bkTvigwkGEFCdJ4gJ3ChLxafjq2sNpI,4516
89
+ synapse_sdk/devtools/streamlit_app/ui/jobs_tab.py,sha256=nhmFrYDMocyAxJlEtC6SuDKPUserkZF0UFwdhFGm4Ko,22369
90
+ synapse_sdk/devtools/streamlit_app/ui/serve_tab.py,sha256=aF4QF3EIztZO9xDwj-9oy1QKm6qO0FvVw6BHHHvsXaE,14723
91
+ synapse_sdk/devtools/streamlit_app/ui/status_bar.py,sha256=wnsgKuMiTSgPbaDxJ4E4hWgI8Y9mldoCUNs9plI0H54,4619
92
+ synapse_sdk/devtools/streamlit_app/utils/__init__.py,sha256=o5S4h5p1s3EnMWxX_5D-NZUK94JVRNWa-bxodKr4b0s,944
93
+ synapse_sdk/devtools/streamlit_app/utils/json_viewer.py,sha256=W1OH27fq3dazrENBCzQP2_3zMYSdDtS7-V5s1sn6slc,7211
94
+ synapse_sdk/devtools/streamlit_app/utils/log_formatter.py,sha256=fQZoEGP-FK9Sgoqh0Z-o1zX_MHpiXVZXLu_4WMcvYNQ,1292
95
+ synapse_sdk/devtools/streamlit_app/utils/styles.py,sha256=ivVBlHzJll9uVZX25Sdbu5Hq40SOmaRamrCqY9A9aFY,5147
96
+ synapse_sdk/devtools/streamlit_app/utils/ui_components.py,sha256=ciSyNEhPYNU6KqnfgDI9RZr1tGFZeiOJ9qBDhlXqmUY,9557
108
97
  synapse_sdk/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
98
  synapse_sdk/plugins/enums.py,sha256=ibixwqA3sCNSriG1jAtL54JQc_Zwo3MufwYUqGhVncc,523
110
99
  synapse_sdk/plugins/exceptions.py,sha256=Qs7qODp_RRLO9y2otU2T4ryj5LFwIZODvSIXkAh91u0,691
@@ -165,7 +154,7 @@ synapse_sdk/plugins/categories/smart_tool/templates/plugin/__init__.py,sha256=47
165
154
  synapse_sdk/plugins/categories/smart_tool/templates/plugin/auto_label.py,sha256=eevNg0nOcYFR4z_L_R-sCvVOYoLWSAH1jwDkAf3YCjY,320
166
155
  synapse_sdk/plugins/categories/upload/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
156
  synapse_sdk/plugins/categories/upload/actions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
168
- synapse_sdk/plugins/categories/upload/actions/upload.py,sha256=YATMn9ud8cqWKw4Pq14XhuCPvn5NTq_7RyfZv5hG75w,38279
157
+ synapse_sdk/plugins/categories/upload/actions/upload.py,sha256=7oV8kcJ_JTkHtRHHf0e1s3dka_CKf2engMkIioLTdek,38291
169
158
  synapse_sdk/plugins/categories/upload/templates/config.yaml,sha256=6_dRa0_J2aS8NSUfO4MKbPxZcdPS2FpJzzp51edYAZc,281
170
159
  synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
171
160
  synapse_sdk/plugins/categories/upload/templates/plugin/upload.py,sha256=IZU4sdSMSLKPCtlNqF7DP2howTdYR6hr74HCUZsGdPk,1559
@@ -200,11 +189,11 @@ synapse_sdk/utils/converters/__init__.py,sha256=xQi_n7xS9BNyDiolsxH2jw1CtD6avxMP
200
189
  synapse_sdk/utils/converters/coco/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
201
190
  synapse_sdk/utils/converters/coco/from_dm.py,sha256=NncrAmOZgfWlOt24ROlk35aLrMBQo9_4Jj9KZbOz4TM,11365
202
191
  synapse_sdk/utils/converters/coco/to_dm.py,sha256=SOzzACYlK0vJE6SIpmFwMUV1ZbdmsQ_t5mceG0SQahE,9105
203
- synapse_sdk/utils/converters/dm/__init__.py,sha256=_B6w814bMPhisNCNlSPEiQOs9RH0EZHQqd89LnVhD1U,1983
192
+ synapse_sdk/utils/converters/dm/__init__.py,sha256=st_c4sM_Gnb7k9bEQwetKBO8VZojupwCzeb7xDp3jqI,1961
204
193
  synapse_sdk/utils/converters/dm/from_v1.py,sha256=4BG_NA_7YdW5rI1F8LCFg39M-IJZVfRgi2b9FBxTAmw,26059
205
194
  synapse_sdk/utils/converters/dm/to_v1.py,sha256=A123zAR_dLqEW83BgAl5_J1ACstjZWTHivlW5qvOu_E,13432
206
195
  synapse_sdk/utils/converters/pascal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
207
- synapse_sdk/utils/converters/pascal/from_dm.py,sha256=GKO1zT6SvvEFWuHvBIgl1Fn2UQHw8xpZ1Ikgq9kacEY,10378
196
+ synapse_sdk/utils/converters/pascal/from_dm.py,sha256=kyVl1TBsPY-zWNusMNX5kjKD3VUu-HO71-HJ_b0NNec,11119
208
197
  synapse_sdk/utils/converters/pascal/to_dm.py,sha256=bQNUepahOCot4J23LCPOlFOhIZJ8cAK-pge23eJZETM,8614
209
198
  synapse_sdk/utils/converters/yolo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
210
199
  synapse_sdk/utils/converters/yolo/from_dm.py,sha256=-JDCQLk4g1_FIVoOwZ1Tcs2kWFkhXRCAPVLKLXz6sLU,16180
@@ -216,14 +205,14 @@ synapse_sdk/utils/pydantic/validators.py,sha256=G47P8ObPhsePmd_QZDK8EdPnik2CbaYz
216
205
  synapse_sdk/utils/storage/__init__.py,sha256=HmZHqvoV-EogV2bE-Sw5XQRlrNuf3gfNL9irAJeRYsA,2195
217
206
  synapse_sdk/utils/storage/registry.py,sha256=-VNIM7wERubomcyXMuAlPPRKyy87kVpkRAsdlBRp2ig,589
218
207
  synapse_sdk/utils/storage/providers/__init__.py,sha256=crxrRzXXfBAmyR4nZS2RZvlLnr4IP1S-6eYeX_bSnLI,6412
219
- synapse_sdk/utils/storage/providers/file_system.py,sha256=MBBXxWRgVSDtjP4T0L0sbaZkXEI4B8ANtLweaMWtaaQ,3217
208
+ synapse_sdk/utils/storage/providers/file_system.py,sha256=kJJmVPOsDpRwZQ-Sh4VvOP1cfknJ2tiqPp6WnB93iqM,3329
220
209
  synapse_sdk/utils/storage/providers/gcp.py,sha256=i2BQCu1Kej1If9SuNr2_lEyTcr5M_ncGITZrL0u5wEA,363
221
210
  synapse_sdk/utils/storage/providers/http.py,sha256=2DhIulND47JOnS5ZY7MZUex7Su3peAPksGo1Wwg07L4,5828
222
211
  synapse_sdk/utils/storage/providers/s3.py,sha256=ZmqekAvIgcQBdRU-QVJYv1Rlp6VHfXwtbtjTSphua94,2573
223
212
  synapse_sdk/utils/storage/providers/sftp.py,sha256=_8s9hf0JXIO21gvm-JVS00FbLsbtvly4c-ETLRax68A,1426
224
- synapse_sdk-1.0.0a96.dist-info/licenses/LICENSE,sha256=bKzmC5YAg4V1Fhl8OO_tqY8j62hgdncAkN7VrdjmrGk,1101
225
- synapse_sdk-1.0.0a96.dist-info/METADATA,sha256=5UeC7skKojVvQZpdH1wkcoHm384G3GYNs0t5O-TvKe8,3837
226
- synapse_sdk-1.0.0a96.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
227
- synapse_sdk-1.0.0a96.dist-info/entry_points.txt,sha256=VNptJoGoNJI8yLXfBmhgUefMsmGI0m3-0YoMvrOgbxo,48
228
- synapse_sdk-1.0.0a96.dist-info/top_level.txt,sha256=ytgJMRK1slVOKUpgcw3LEyHHP7S34J6n_gJzdkcSsw8,12
229
- synapse_sdk-1.0.0a96.dist-info/RECORD,,
213
+ synapse_sdk-1.0.0b1.dist-info/licenses/LICENSE,sha256=bKzmC5YAg4V1Fhl8OO_tqY8j62hgdncAkN7VrdjmrGk,1101
214
+ synapse_sdk-1.0.0b1.dist-info/METADATA,sha256=3I_xE3UvzmLYm991d1sHvOhIeFTiSbrR5wTNQLKvIqE,3718
215
+ synapse_sdk-1.0.0b1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
216
+ synapse_sdk-1.0.0b1.dist-info/entry_points.txt,sha256=VNptJoGoNJI8yLXfBmhgUefMsmGI0m3-0YoMvrOgbxo,48
217
+ synapse_sdk-1.0.0b1.dist-info/top_level.txt,sha256=ytgJMRK1slVOKUpgcw3LEyHHP7S34J6n_gJzdkcSsw8,12
218
+ synapse_sdk-1.0.0b1.dist-info/RECORD,,